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. Imp
menempatkan 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.
exp
utilitas lama atau denganexpdp
(pompa data)?Jawaban:
Sebenarnya tidak mungkin untuk menentukan tablespace yang berbeda saat mengimpor menggunakan
imp
utilitas oracle . Namun, sebagai solusinya, Anda bisa membuat pra-tabel dengan melakukanROWS=N
impor keUSERS
tablespace, lalualter 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 lamaexp
/imp
utilitas) Anda dapat dengan mudah mengimpor ke tablespace lain menggunakanREMAP_TABLESPACE
parameter.misalnya:
sumber
Anda harus mengikuti langkah-langkah seperti yang disebutkan di bawah ini: -
imp system/manager file=export.dmp indexfile=newfile.sql
Ini akan mengimpor data dan menyimpan semua definisi
newfile.sql
.newfile.sql
setelah mengubah tablespace.sumber