Bisakah saya mengubah SID dari database Oracle?

18

Server adalah Oracle Database 11g Edisi Perusahaan Rilis 11.1.0.7.0 - 64bit

Apakah ada cara mudah & cepat untuk mengubah SID dari database pengujian di server?

Menjatuhkan & membuat ulang basis data adalah pilihan bagi saya. Tetapi saya sedang mencari sesuatu yang membutuhkan waktu lebih sedikit.

Opsi lain untuk menetapkan nama di klien tnsnames.ora rentan terhadap kesalahan, karena mereka tidak diadministrasikan secara terpusat.

Dibandingkan dengan waktu untuk drop & membuat database pada SQL-Server, jumlah waktu yang dibutuhkan untuk membuat database Oracle baru jauh lebih besar. Selanjutnya pada SQL-Server Anda dapat mengubah nama contoh SQL-Server. [Biasanya Anda mengganti nama server tempat SQL-Server berjalan dan memiliki beberapa masalah hingga Anda mengubah nama server juga].

bernd_k
sumber
Anda menyebutkan bahwa Anda dapat menjatuhkan dan membuat ulang basis data. Apakah Anda memiliki akses ke basis data produksi dan cadangannya? Anda bisa menggunakan RMAN dan perintah duplikat untuk membuat ulang database dan mengubah SID secara bersamaan.
Sumnibot
Tidak, saya bekerja sebagai DBA untuk pengembangan dan beberapa pengujian basis data Oracle.
bernd_k
2
Ketika Anda akan menggunakan database dalam SQL Server, Anda biasanya menggunakan Skema (= pengguna) di Oracle. Nama yang sama tidak berarti hal yang sama di kedua dunia
a_horse_with_no_name

Jawaban:

13

Karena 9i dbnewid utility (nid) dapat digunakan untuk mengubah nama basis data (dan DBID jika diperlukan). Jika nama database diubah hanya maka resetlog tidak diperlukan:

  • 1 startup database dalam mode mount

    shutdown immediate
    startup mount
  • 2 jalankan nid untuk mengubah nama basis data:

    nid target=sys/syspassword@dbtns dbname=newname setname=YES
  • 3 shutdown dan mulai database dalam mode mount:

    shutdown immediate
    startup mount
  • 4 perubahan db_namespfile (atau pfile mengedit file):

    alter system set db_name=newname scope=spfile;
  • 5 membuat ulang file kata sandi:

    orapwd file=orapwnewname password=syspassword
  • 6 mulai database

    startup
  • 7 pos ganti nama langkah:

    change SID in listener.ora
    correct tnsnames.ora
    remove old trace directories
    change /etc/oratab (UNIX) or rename windows service using oradim
Andrey Goryunov
sumber
1
Saya mengganti nama 4 database oracle pada Windows Server dengan cara ini. Mencari utilitas dbnewid saya menemukan oracle-base.com/articles/9i/DBNEWID.php yang memberikan beberapa penjelasan tambahan.
bernd_k
1
ini adalah jawaban yang bagus ketika pertanyaannya adalah: bagaimana cara mengubah nama database. Pertanyaannya adalah: bagaimana cara mengubah SID.
ik_zelf
17

Anda perlu membuat ulang file kontrol

Posting ini oleh Kaunain Ahmed menjelaskan langkah-langkah yang diperlukan:

  1. lakukan: ubah file backup kontrol database untuk dilacak;
  2. ekstrak perintah "create controlfile" dari background-dump-destination tracefile.
  3. mematikan DB.
  4. Ubah Nama-DB di init.ora Anda dan ubah init.ora
  5. Ubah SID di / etc / oratab atau / var / opt / oracle / oratab
  6. Ubah SID di lingkungan Anda dan sumberkan
  7. Memulai database ke mount startup status-mount
  8. Buat kembali file kontrol dengan pernyataan dari posisi 2.
  9. Lakukan perubahan basis data, ubah nama global_name menjadi 10. Ubah TNS-Configuration sesuai $ ORACLE_HOME / network / admin / *. Ora Cari SID dan GLOBAL_NAME

Ada alat lain yang dirujuk di utas.

Berikut ini adalah posting oleh AskTom yang merujuk proses secara lebih rinci. Sementara untuk 10g, masih harus bekerja.

Brian Ballsun-Stanton
sumber
5
Catatan untuk pengguna windows, Anda juga perlu menggunakan utilitas "oradim" untuk mengatur layanan baru.
REW
9

Ya, Anda bisa dan itu juga cukup mudah.

Di Oracle, ORACLE_SID hanyalah nama untuk Oracle Instance dan tidak terlalu terkait dengan DBNAME. Database dengan nama PROD, dapat disajikan menggunakan Instance dengan nama yang valid. Tidak ada koneksi langsung antara SID dan DBNAME. Koneksi ini dibuat menggunakan parameter.

File parameter diidentifikasi sebagai init $ {ORACLE_SID} .ora atau spfile $ {ORACLE_SID} .ora Dalam file parameter adalah parameter db_name. Di sinilah koneksi antara Oracle Instance dan database dibuat.

Jadi, Anda tidak perlu membuat ulang file kontrol, Anda tidak perlu menggunakan nid, pastikan saja parameterfile Anda memiliki nama yang tepat, turunkan Oracle Instance lama dan mulai Instance Oracle baru setelah mengatur ORACLE_SID ke nama Oracle Instance baru. Parameterfile dan file kata sandi keduanya ditemukan menggunakan $ {ORACLE_SID} sebagai bagian dari namanya.

Menciptakan kembali file kontrol hanya diperlukan saat DBNAME harus berubah. nid diperlukan setelah operasi klon di mana Anda perlu mengubah DBID untuk mencegah kecelakaan yang dapat merusak cadangan dari basis data sumber.

ik_zelf
sumber
+1 Tapi saya masih tidak yakin apakah saya ingin mengubah DB_NAME juga.
bernd_k
Jika Anda ingin: yakin, Anda bisa, jawaban yang lain menjelaskan dengan benar cara melakukannya. Untuk alasan apa Anda akan melakukannya? Db_name sangat fisik. Mengetahui db_name itu baik untuk dba tetapi bagi kebanyakan orang itu tidak relevan. Dalam pendekatan konsolidasi normal Anda memiliki database yang melayani banyak layanan. Suatu layanan - aplikasi - seharusnya tidak perlu peduli pada basis data apa yang sedang dijalankannya.
ik_zelf