ORACLE數據庫如何用datapump工具導出表結構而後導入到其它Schema下面

這裏簡單介紹一下如何使用ORACLE數據庫的datapump工具導出、導入表結構定義。因爲業務場景可能很是簡單,你不會遇到任何問題,也有可能業務場景很是複雜,你就會遇到一些雜七雜八的問題。下面我簡單介紹一下我的遇到的需求。一批表準備歸檔,歸檔的策略爲將UserA下面的一批表T一、T二、、、、Tn,歸檔到UserB下面(UserB.T1, UserB.T2.....),那麼必須在UserB下面建立這樣一批表,不想手工建立。手工建立的話,費時又費力,想利用datapump工具批量導出這批表的定義,而後批量導入。sql

 

正確的作法:數據庫

 

1:先導出表結構定義app

 

expdp xxxx/xxxx tables=xxx,xxx,xxx..... directory=dumpdir  content=metadata_only dumpfile=test.dmp logfile=exp_test_20200527.log;

 

2:導入表結構定義時,要作好幾件事情。工具

 

    2.1  原始表與目標表位於不一樣的SCHEMA,那麼導入的時候,就必須完成這種轉換,可使用REMAP_SCHEMA參數將表和數據從一個SCHEMA轉移到另一個SCHEMA,其做用相似於老的imp工具中的fromuser和touser參數,impdp中將fromuser和touser參數合併成了REMAP_SCHEMA參數。該參數的使用方法REMAP_SCHEMA=source_schema:target_schema.spa

   

        注意事項:即便你指定的對應SCHEMA不存在,只要導入時鏈接的用戶有足夠的權限,就會使用DUMP文件中的CREATE USER的metadata來建立一個對應的用戶。code

     

   2.2  通常而言,對應SCHEMA(User)有默認的表空間,有可能不一樣SCHEMA默認的表空間不一樣,那麼就必須用參數REMAP_TABLESPACE來解決導入數據更改表空間的情形,不然就會遇到ORA-01950: no privileges on tablespace 'xxxxx' 這種錯誤。orm

   

        注意事項:有可能原始表的數據和索引位於不一樣的表空間,因此可能須要匹配多個表空間,具體操做爲REMAP_TABLESPACE=src1:dst1 REMAP_TABLESPACE=src2:dst2索引

 

   2.3 邏輯衝突,這個無關工具的關係,而是因爲邏輯關係緣故。ip

 

        以下案例所示,例如原表"TEST"."INV_CARTONS"跟"TEST"."INV_STORE_CODES"有主外鍵關係。可是咱們沒有導出、導入"TEST"."INV_STORE_CODES",那麼此時不存在"TEST_ARCH"."INV_STORE_CODES",因此拋出一個錯誤。ci

 

$ impdp xxx/xxx tables=test.inv_cartons,test.inv_month_end_aging directory=dumpdir  remap_schema=test:test_arch REMAP_TABLESPACE=TEST_DATA:TEST_DATA_ARCH REMAP_TABLESPACE=TEST_IDX:TEST_DATA_ARCH dumpfile=test.dmp logfile=imp_test_20200527.log
 
Import: Release 10.2.0.5.0 - 64bit Production on Wednesday, 27 May, 2020 13:57:10
 
Copyright (c) 2003, 2007, Oracle.  All rights reserved.
 
Connected to: Oracle Database 10g Release 10.2.0.5.0 - 64bit Production
Master table "SYSTEM"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_TABLE_01":  system/******** tables=test.inv_cartons,test.inv_month_end_aging directory=dumpdir remap_schema=test:test_arch REMAP_TABLESPACE=TEST_DATA:TEST_DATA_ARCH REMAP_TABLESPACE=TEST_IDX:TEST_DATA_ARCH dumpfile=test.dmp logfile=imp_test_20200527.log 
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
ORA-39083: Object type REF_CONSTRAINT failed to create with error:
ORA-00942: table or view does not exist
Failing sql is:
ALTER TABLE "TEST_ARCH"."INV_CARTONS" ADD CONSTRAINT "FK_INV_CART_FK_INV_CA_INV_STOR" FOREIGN KEY ("STORE_CD") REFERENCES "TEST_ARCH"."INV_STORE_CODES" ("STORE_CD") ENABLE NOVALIDATE
 
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SYSTEM"."SYS_IMPORT_TABLE_01" completed with 1 error(s) at 13:57:11

 

常見的datapump工具導入腳本例子

 

impdp xxx/xxx tables=xxxxxx directory=dumpdir  remap_schema=xxxxx:xxxxx REMAP_TABLESPACE=xxxx:xxxx REMAP_TABLESPACE=xxxx:xxxx dumpfile=test_20200527.dmp logfile=imp_test_20200527.log
相關文章
相關標籤/搜索