Saya ingin mengimpor dump Oracle ke tablespace yang berbeda.
Saya memiliki tablespace A yang digunakan oleh Pengguna A. Saya telah mencabut DBA pada pengguna ini dan memberinya hibah terhubung dan sumber daya. Lalu aku sudah membuang semuanya dengan perintah
exp/*** pemilik = file = oracledump.dmp log = log.log kompres = y
Sekarang saya ingin mengimpor dump ke tablespace B yang digunakan oleh Pengguna B. Jadi saya telah memberinya hibah untuk koneksi dan sumber daya (tanpa DBA). Kemudian saya telah menjalankan impor berikut:
imp b/*** file = oracledump.dmp log = import.log fromuser = a touser = b
Hasilnya adalah log dengan banyak kesalahan:
IMP-00017: pernyataan berikut gagal dengan Oracle error 20001: "BEGIN DBMS_STATS.SET_TABLE_STATS IMP-00003: Oracle error 20001 temui ORA-20001: Nilai input tidak valid atau tidak konsisten
Setelah itu saya sudah mencoba perintah impor yang sama tetapi dengan opsi statistik = tidak ada. Ini menghasilkan kesalahan berikut:
ORA-00959: tablespace 'A_TBLSPACE' tidak ada
Bagaimana ini harus dilakukan?
Catatan: banyak kolom bertipe CLOB. Sepertinya masalahnya ada hubungannya dengan itu.
Note2: Versi Oracle adalah campuran dari 9.2, 10.1 dan 10.1 XE. Tapi saya pikir itu tidak ada hubungannya dengan versi.
Anda punya beberapa masalah di sini.
Pertama , versi berbeda dari Oracle yang Anda gunakan adalah alasan untuk kesalahan statistik tabel - Saya memiliki masalah yang sama ketika beberapa Oracle 10g Database kami ditingkatkan ke Rilis 2, dan beberapa masih pada Rilis 1 dan Saya bertukar file .DMP di antara mereka.
Solusi yang berhasil bagi saya adalah dengan menggunakan versi yang sama dari alat exp
dan imp
untuk melakukan ekspor dan impor pada berbagai contoh Database. Ini paling mudah dilakukan dengan menggunakan PC yang sama (atau Oracle Server) untuk mengeluarkan semua perintah ekspor dan impor.
Kedua , saya curiga Anda mendapatkan ORA-00959: tablespace 'A_TBLSPACE' does not exist
karena Anda mencoba mengimpor file .DMP dari Database Oracle yang lengkap ke Database 10g Express Edition (XE), yang, secara default, membuat satu , tablespace standar yang disebut USERS
untuk Anda.
Jika itu masalahnya, maka Anda harus melakukan yang berikut ..
Dengan file .DMP Anda, buat file SQL yang berisi struktur (Tabel):
imp <xe_username>/<password>@XE file=<filename.dmp> indexfile=index.sql full=y
Buka file indeks (index.sql) dalam editor teks yang dapat menemukan dan mengganti seluruh file, dan terbitkan temuan berikut dan ganti pernyataan DALAM PESANAN (abaikan tanda kutip tunggal .. '):
Find: 'REM<space>' Replace: <nothing>
Find: '"<source_tablespace>"' Replace: '"USERS"'
Find: '...' Replace: 'REM ...'
Find: 'CONNECT' Replace: 'REM CONNECT'
Simpan indexfile, kemudian jalankan di akun Oracle Express Edition Anda (saya menemukan yang terbaik untuk membuat akun pengguna XE baru yang kosong - atau jatuhkan dan buat ulang jika saya menyegarkan):
sqlplus <xe_username>/<password>@XE @index.sql
Terakhir jalankan file .DMP yang sama dengan yang Anda buat di indexfile dengan akun yang sama untuk mengimpor data, prosedur tersimpan, tampilan dll:
imp <xe_username>/<password>@XE file=<filename.dmp> fromuser=<original_username> touser=<xe_username> ignore=y
Anda mungkin mendapatkan halaman kesalahan Oracle ketika mencoba membuat objek tertentu seperti Pekerjaan Database karena Oracle akan mencoba menggunakan Pengidentifikasi Database yang sama, yang kemungkinan besar akan gagal karena Anda berada di Database yang berbeda.
Bagi saya pekerjaan ini ok (Oracle Database 10g Express Edition Release 10.2.0.1.0):
impdp B/B full=Y dumpfile=DUMP.dmp REMAP_TABLESPACE=OLD_TABLESPACE:USERS
Tetapi untuk pemulihan baru Anda perlu tablespace baru
P.S. Mungkin bermanfaat http://www.Oracle-base.com/articles/10g/OracleDataPump10g.php
Versi Oracle apa yang Anda gunakan? Jika 10g atau lebih, Anda harus melihat menggunakan Data Pump alih-alih impor/ekspor. Saya tidak 100% yakin apakah ini bisa menangani skenario ini, tapi saya harapkan bisa.
Pompa Data adalah pengganti exp/imp untuk 10g ke atas. Ia bekerja sangat mirip dengan exp/imp, kecuali itu (seharusnya, saya tidak menggunakannya karena saya terjebak di tanah 9i) lebih baik.
Saya ingin meningkatkan untuk dua pengguna baik di tablespace yang berbeda di server yang berbeda (database)
1 . Pertama buat direktori untuk dump sementara untuk kedua server (database):
server # 1:
CREATE OR REPLACE DIRECTORY tempdump AS '/temp/old_datapump/';
GRANT READ, WRITE ON DIRECTORY tempdump TO old_user;
server # 2:
CREATE OR REPLACE DIRECTORY tempdump AS '/temp/new_datapump/';
GRANT READ, WRITE ON DIRECTORY tempdump TO new_user;
2 . Ekspor (server # 1):
expdp tables=old_user.table directory=tempdump dumpfile=adump.dmp logfile=adump.log
3 . Impor (server # 2):
impdp directory=tempdump dumpfile=adump_table.dmp logfile=bdump_table.log
REMAP_TABLESPACE=old_tablespace:new_tablespace REMAP_SCHEMA=old_user:new_user
solusi saya adalah menggunakan utilitas GSAR untuk mengganti nama tablespace dalam file DUMP. Ketika Anda melakukan replce, pastikan bahwa ukuran file dump tidak berubah dengan menambahkan spasi . E.g.
gsar -f -s"TSDAT_OV101" -r"USERS " rm_schema.dump rm_schema.n.dump
gsar -f -s"TABLESPACE """USERS """ ENABLE STORAGE IN ROW CHUNK 8192 RETENTION" -r" " rm_schema.n1.dump rm_schema.n.dump
gsar -f -s"TABLESPACE """USERS """ LOGGING" -r" " rm_schema.n1.dump rm_schema.n.dump
gsar -f -s"TABLESPACE """USERS """ " -r" " rm_schema.n.dump rm_schema.n1.dump
Masalahnya berkaitan dengan kolom CLOB. Tampaknya alat imp tidak dapat menulis ulang pernyataan create untuk menggunakan tablespace lain.
Sumber: http://asktom.Oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:66890284723848
Solusinya adalah: Buat skema dengan tangan di tablespace yang benar. Jika Anda tidak memiliki skrip untuk membuat skema, Anda dapat membuatnya dengan menggunakan indexfile = dari alat imp.
Anda harus menonaktifkan semua kendala Anda sendiri, alat Oracle imp tidak akan menonaktifkannya.
Setelah itu Anda dapat mengimpor data dengan perintah berikut:
imp b/*** file = oracledump.dmp log = import.log fromuser = touser = b statistik = tidak ada abaikan = y
Catatan: Saya masih membutuhkan statistik = tidak ada karena kesalahan lain.
info tambahan tentang pompa data
Pada Oracle 10 impor/ekspor ditingkatkan: alat pompa data ([ http://www.Oracle-base.com/articles/10g/OracleDataPump10g.php[[1] )
Menggunakan ini untuk mengimpor kembali data ke tablespace baru:
Pertama buat direktori untuk dump sementara:
BUAT OR REPLACE DIRECTORY tempdump AS '/ temp/tempdump /';
BACA DITERIMA, TULIS DIREKTORI tempdump KE a;
Ekspor:
expdp a/* schemas = direktori = tempdump dumpfile = adump.dmp logfile = adump.log
Impor:
impdp b/* direktori = tempdump dumpfile = adump.dmp logfile = bdump.log REMAP_SCHEMA = a: b
Catatan: file dump disimpan dan dibaca dari disk server, bukan dari disk (klien) lokal
Jawabannya sulit, tetapi bisa dilakukan:
Situasi adalah: userAdan tablespaceX
ganti nama tablespace
ubah tablespaceXganti nama menjadiY
buat direktori untuk perintah expdp dan berikan hak
impor dump dengan impdp
direktori B/B impdp = DIR dumpfile = DUMPFILE.dmp logfile = LOGFILE.log REMAP_SCHEMA =A:B
dan hanya itu ...
Karena saya ingin imp
ort (ke Oracle 12.1 | 2) dump yang exp
ort dari database pengembangan lokal (18c xe), dan saya tahu bahwa semua basis data target saya akan memiliki tablespace yang dapat diakses yang disebut DATABASE_TABLESPACE
, saya baru saja membuat skema/pengguna saya untuk menggunakan tablespace baru dari nama itu alih-alih USERS
default (yang saya tidak punya akses pada database target):
-- don't care about the details
CREATE TABLESPACE DATABASE_TABLESPACE
DATAFILE 'DATABASE_TABLESPACE.dat'
SIZE 10M
REUSE
AUTOEXTEND ON NEXT 10M MAXSIZE 200M;
ALTER DATABASE DEFAULT TABLESPACE DATABASE_TABLESPACE;
CREATE USER username
IDENTIFIED BY userpassword
CONTAINER=all;
GRANT create session TO username;
GRANT create table TO username;
GRANT create view TO username;
GRANT create any trigger TO username;
GRANT create any procedure TO username;
GRANT create sequence TO username;
GRANT create synonym TO username;
GRANT create synonym TO username;
GRANT UNLIMITED TABLESPACE TO username;
exp
yang dibuat dari ini membuat imp
bahagia di target saya.