Mengimpor skema ke tablespace baru atau berbeda

13

Apakah ada cara yang nyaman untuk mengimpor skema ke Oracle 11gR2 menggunakan tablespace baru atau berbeda dari tempat data berasal?

Sebagai contoh, saya telah mengekspor BLOG_DATA dari OLDDB, tempat semua data pengguna disimpan dalam tablespace USERS.

Pada NEWDB, saya ingin mengimpor skema BLOG_DATA, tetapi menyimpan objek pengguna di tablespace BLOG_DATA, yang dibuat khusus untuk pengguna ini.

Saya telah membuat pengguna BLOG_DATA, membuat tablespace BLOG_DATA dan menetapkannya sebagai tablespace default untuk pengguna itu dan menambahkan kuota tak terbatas yang sesuai.

CREATE TABLESPACE blog_data DATAFILE SIZE 1G;

CREATE USER blog_data IDENTIFIED BY secretpassword DEFAULT TABLESPACE blog_data QUOTA UNLIMITED ON blog_data;

GRANT connect,resource TO blog_data

Skema diekspor dari OLDDB dengan sesuatu seperti

exp blog_data/secretpassword@OLDDB file=blog_data.dmp 

Setelah membaca jawaban Phil yang luar biasa di bawah ini, saya mendapati diri saya bertanya-tanya :

Karena data tidak memiliki tempat lain untuk pergi daripada tablespace default - satu-satunya tablespace pengguna memiliki kuota aktif - akankah ini secara efektif memaksa imp untuk meletakkan semua objek pengguna di tablespace default itu?

imp blog_data/secretpassword@NEWDB file=blog_data.dmp

Apakah ini kemudian menempatkan seluruh skema blog_data di tablespace blog_data di NEWDB? Apakah ada alasan mengapa ini tidak berhasil atau saya akan mengalami masalah dengan objek tertentu dll?

memperbarui:

Saya melakukan tes cepat dan menemukan ini menjadi masalahnya. Impmenempatkan objek di tablespace default untuk pengguna itu, asalkan tidak bisa menempatkannya di tablespace asli (mis. tablespace tidak ada). Penjelasan lengkap: http://www.dolicapax.org/?p=57

Namun, saya kira menggunakan Data Pump seperti Phil menyarankan mungkin menjadi pilihan yang lebih disukai.

Roy
sumber
Apakah itu diekspor menggunakan exputilitas lama atau dengan expdp(pompa data)?
Philᵀᴹ
Dalam contoh itu diekspor dengan utilitas exp konvensional, seperti yang ditunjukkan di atas. Saya kira orang bisa dengan mudah menggunakan expdp dan mengambil file dari server db lama, apakah itu akan membuat transisi ke tablespace baru lebih mudah?
Roy
Saya telah membahas keduanya dalam jawaban saya. Gunakan pompa data - lebih mudah untuk melakukan tugas ini
Philᵀᴹ

Jawaban:

15

Sebenarnya tidak mungkin untuk menentukan tablespace yang berbeda saat mengimpor menggunakan imputilitas oracle . Namun, sebagai solusinya, Anda bisa membuat pra-tabel dengan melakukan ROWS=Nimpor ke USERStablespace, lalu alter table mytable move tablespace BLOG_DATA;untuk setiap tabel untuk memindahkannya ke tablespace baru, lalu lakukan impor lagi denganIGNORE=Y parameter untuk mengabaikan kesalahan pembuatan tabel dan mengimpor semua dari data.

Jika data diekspor menggunakan Data Pump ( expdp), (sebagai tambahan, semua orang harus menggunakan ini hari ini, daripada warisan lama exp/ imputilitas) Anda dapat dengan mudah mengimpor ke tablespace lain menggunakanREMAP_TABLESPACE parameter.

misalnya:

impdp scott/tiger@ZOMG file=blog_data.dmp directory=mydir remap_tablespace=USERS:BLOG_DATA
Philᵀᴹ
sumber
Terima kasih banyak, Phil. Saya bertanya-tanya: Jika pengguna yang diimpor secara eksklusif memiliki kuota di tablespace default, apakah itu akan memaksa imp untuk menempatkan semua objek yang diimpor di tablespace default terlepas dari tata letak pada sumber data?
Roy
Saya sedang mengerjakan sesuatu yang serupa tetapi ini adalah keseluruhan migrasi DB menggunakan expdp / impdp karena saya ingin QA env kami cocok dengan produksi. Jika saya menggunakan remap_tablespace akan memetakan kembali setiap skema ke tablespace tunggal lainnya, namun saya pikir saya dapat menjalankan perintah impdp sekali per skema dan menggunakan remap_tablespace. Ini harus mencapai pekerjaan.
Nicolas de Fontenay
0

Anda harus mengikuti langkah-langkah seperti yang disebutkan di bawah ini: -

  • Ekspor pengguna
  • Lakukan impor menggunakan perintah
    imp system/manager file=export.dmp indexfile=newfile.sql
    Ini akan mengimpor data dan menyimpan semua definisi newfile.sql.
  • Jatuhkan benda-benda yang diperlukan.
  • Jalankan skrip newfile.sqlsetelah mengubah tablespace.
  • Impor dari cadangan untuk objek yang diperlukan.
Md Wasi
sumber