使用datapump 匯出匯入同義詞(export and import synonym using datapump)

dawn009發表於2014-03-02

對於同義詞的備份我們有多種方式來實現,如直接透過指令碼生成同義詞的建立指令碼,或者使用dbms_metadata.get_ddl來提取同義詞的定義指令碼。然而在使用傳統的exp或是datapump expdp實現schema級別資料遷移時,不能匯出公共同義詞。儘管如此,我們依舊可以使用匯出匯入的方式來實現。所不同的是,我們使用FULL=Y的方式來單獨匯出同義詞,然後再將其匯入的目標資料庫。下文是對此進行的描述,末尾也給出了手動建立同義詞的指令碼。

 

1、環境

  1. --源資料庫  
  2. SQL> select * from v$version where rownum<2;  
  3.   
  4. BANNER  
  5. ----------------------------------------------------------------  
  6. Oracle Database 10g Release 10.2.0.3.0 - 64bit Production  
  7.   
  8. SQL> show parameter db_nam  
  9.   
  10. NAME                                 TYPE        VALUE  
  11. ------------------------------------ ----------- ------------------------------  
  12. db_name                              string      XM6320  
  13. SQL> select count(*) from dba_synonyms where table_owner='GOEX_ADMIN';  
  14.   
  15.   COUNT(*)  
  16. ----------  
  17.       1042  
  18.   
  19. --目標資料庫  
  20. --目標資料庫schema goex_admin的所有資料均來源於源資料庫,但是使用datapump匯入後,無同義詞  
  21. SQL> select * from v$version where rownum<2;  
  22.   
  23. BANNER  
  24. ----------------------------------------------------------------  
  25. Oracle Database 10g Release 10.2.0.3.0 - 64bit Production  
  26.   
  27. SQL> show parameter db_name  
  28.   
  29. NAME                                 TYPE        VALUE  
  30. ------------------------------------ ----------- ------------------------------  
  31. db_name                              string      KM3625  
  32.   
  33. --下面的查詢中僅有兩個同義詞,這兩個同義是在建立DB的時候手動建立的,非使用datapump匯入產生的  
  34. SQL> select count(*) from dba_synonyms where table_owner='GOEX_ADMIN';  
  35.   
  36.   COUNT(*)  
  37. ----------  
  38.          2  

2、從源資料庫匯出公共同義詞

  1. oracle@BKDB01p:~> env | grep SID  
  2. ORACLE_SID=XM6320  
  3. #使用下面的方式匯出公共同義詞,對於可匯出的物件我們可以查詢資料字典 DATABASE_EXPORT_OBJECTS  
  4. oracle@BKDB01p:~> expdp goex_admin/xxx directory=db_dump_dir dumpfile=syns.dmp logfile=exp_syns.log full=y \  
  5. > include=PUBLIC_SYNONYM/SYNONYM:\"IN \(SELECT synonym_name FROM dba_synonyms WHERE table_owner=\'GOEX_ADMIN\'\)\"  
  6.   
  7. Export: Release 10.2.0.3.0 - 64bit Production on Wednesday, 19 June, 2013 16:11:19  
  8.   
  9. Copyright (c) 20032005, Oracle.  All rights reserved.  
  10.   
  11. Connected to: Oracle Database 10g Release 10.2.0.3.0 - 64bit Production  
  12. Starting "GOEX_ADMIN"."SYS_EXPORT_FULL_01":  goex_admin/******** directory=db_dump_dir dumpfile=syns.dmp logfile=exp_syns.log   
  13. full=y include=PUBLIC_SYNONYM/SYNONYM:"IN (SELECT synonym_name FROM dba_synonyms WHERE table_owner='GOEX_ADMIN')"  
  14. Estimate in progress using BLOCKS method...  
  15. Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA  
  16. Total estimation using BLOCKS method: 0 KB  
  17. Processing object type DATABASE_EXPORT/SCHEMA/PUBLIC_SYNONYM/SYNONYM  
  18. Master table "GOEX_ADMIN"."SYS_EXPORT_FULL_01" successfully loaded/unloaded  
  19. ******************************************************************************  
  20. Dump file set for GOEX_ADMIN.SYS_EXPORT_FULL_01 is:  
  21.   /u02/database/XM6320/BNR/dump/syns.dmp  
  22. Job "GOEX_ADMIN"."SYS_EXPORT_FULL_01" successfully completed at 16:11:23  

3、匯入公共同義詞到目標資料庫

  1. oracle@BKDB01p:~> cp /u02/database/XM6320/BNR/dump/syns.dmp /u02/database/KM3625/BNR/dump/  
  2. oracle@BKDB01p:~> export ORACLE_SID=KM3625  
  3.   
  4. oracle@BKDB01p:~> impdp goex_admin/xxx directory=db_dump_dir dumpfile=syns.dmp logfile=imp_syns.log full=y include=synonym  
  5.   
  6. Import: Release 10.2.0.3.0 - 64bit Production on Wednesday, 19 June, 2013 16:15:52  
  7.   
  8. Copyright (c) 20032005, Oracle.  All rights reserved.  
  9.   
  10. Connected to: Oracle Database 10g Release 10.2.0.3.0 - 64bit Production  
  11. Master table "GOEX_ADMIN"."SYS_IMPORT_FULL_01" successfully loaded/unloaded  
  12. Starting "GOEX_ADMIN"."SYS_IMPORT_FULL_01":  goex_admin/******** directory=db_dump_dir dumpfile=syns.dmp logfile=imp_syns.log full=y include=synonym  
  13. Processing object type DATABASE_EXPORT/SCHEMA/PUBLIC_SYNONYM/SYNONYM  
  14. ORA-31684: Object type SYNONYM:"PUBLIC"."GO_GA_SYS_DATAPUMP_PARA_TBL" already exists  
  15. ORA-31684: Object type SYNONYM:"PUBLIC"."BO_SYS_DATAPUMP_PKG" already exists  
  16. Job "GOEX_ADMIN"."SYS_IMPORT_FULL_01" completed with 2 error(s) at 16:16:12  
  17. #上面的匯入過程可以看到,Processing object type DATABASE_EXPORT/SCHEMA/PUBLIC_SYNONYM/SYNONYM實現了同義詞的匯入  
  18. #同時由於有兩個同義詞存在,也給出了提示  
  19.   
  20. #驗證匯入的同義詞  
  21. oracle@BKDB01p:~> sqlplus / as sysdba  
  22.   
  23. SQL*Plus: Release 10.2.0.3.0 - Production on Wed Jun 19 16:16:24 2013  
  24.   
  25. Copyright (c) 19822006, Oracle.  All Rights Reserved.  
  26.   
  27.   
  28. Connected to:  
  29. Oracle Database 10g Release 10.2.0.3.0 - 64bit Production  
  30.   
  31. SQL> show parameter db_name  
  32.   
  33. NAME                                 TYPE        VALUE  
  34. ------------------------------------ ----------- ------------------------------  
  35. db_name                              string      KM3625  
  36.   
  37. SQL> select count(*) from dba_synonyms where table_owner='GOEX_ADMIN';  
  38.   
  39.   COUNT(*)  
  40. ----------  
  41.       1042  

4、手動建立同義詞的指令碼

  1. ACCEPT input_owner PROMPT 'Enter the owner of table:'  
  2. SET HEADING OFF VERIFY OFF FEEDBACK OFF TERMOUT OFF;  
  3. SPOOL $LOG/create_synonym.sql  
  4.   
  5. --Author: Robinson  
  6. --Blog  : http://blog.csdn.net/robinson_0612  
  7.   
  8. SELECT 'create public synonym ' || synonym_name || ' for ' || table_owner || '.' || table_name || ';'  
  9.   FROM dba_synonyms s  
  10.  WHERE s.owner = 'PUBLIC' AND s.table_owner = UPPER ('&input_owner');  
  11.   
  12. SET HEADING ON VERIFY ON TERMOUT ON FEEDBACK OFF;  
  13. SPOOL OFF;  
  14. --@$LOG/create_synonym.sql; 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29119536/viewspace-1098047/,如需轉載,請註明出處,否則將追究法律責任。

相關文章