当前位置:操作系统 > Unix/Linux >>

使用datapump导出导入同义词(export and import synonym using datapump)

使用datapump导出导入同义词(export and import synonym using datapump)
 
    对于同义词的备份我们有多种方式来实现,如直接通过脚本生成同义词的创建脚本,或者使用dbms_metadata.get_ddl来提取同义词的定义脚本。然而在使用传统的exp或是datapump expdp实现schema级别数据迁移时,不能导出公共同义词。尽管如此,我们依旧可以使用导出导入的方式来实现。所不同的是,我们使用FULL=Y的方式来单独导出同义词,然后再将其导入的目标数据库。下文是对此进行的描述,末尾也给出了手动创建同义词的脚本。
 
1、环境
[sql] 
--源数据库  
SQL> select * from v$version where rownum<2;  
  
BANNER  
----------------------------------------------------------------  
Oracle Database 10g Release 10.2.0.3.0 - 64bit Production  
  
SQL> show parameter db_nam  
  
NAME                                 TYPE        VALUE  
------------------------------------ ----------- ------------------------------  
db_name                              string      XM6320  
SQL> select count(*) from dba_synonyms where table_owner='GOEX_ADMIN';  
  
  COUNT(*)  
----------  
      1042  
  
--目标数据库  
--目标数据库schema goex_admin的所有数据均来源于源数据库,但是使用datapump导入后,无同义词  
SQL> select * from v$version where rownum<2;  
  
BANNER  
----------------------------------------------------------------  
Oracle Database 10g Release 10.2.0.3.0 - 64bit Production  
  
SQL> show parameter db_name  
  
NAME                                 TYPE        VALUE  
------------------------------------ ----------- ------------------------------  
db_name                              string      KM3625  
  
--下面的查询中仅有两个同义词,这两个同义是在创建DB的时候手动创建的,非使用datapump导入产生的  
SQL> select count(*) from dba_synonyms where table_owner='GOEX_ADMIN';  
  
  COUNT(*)  
----------  
         2  
2、从源数据库导出公共同义词
[python] 
oracle@BKDB01p:~> env | grep SID  
ORACLE_SID=XM6320  
#使用下面的方式导出公共同义词,对于可导出的对象我们可以查询数据字典 DATABASE_EXPORT_OBJECTS  
oracle@BKDB01p:~> expdp goex_admin/xxx directory=db_dump_dir dumpfile=syns.dmp logfile=exp_syns.log full=y \  
> include=PUBLIC_SYNONYM/SYNONYM:\"IN \(SELECT synonym_name FROM dba_synonyms WHERE table_owner=\'GOEX_ADMIN\'\)\"  
  
Export: Release 10.2.0.3.0 - 64bit Production on Wednesday, 19 June, 2013 16:11:19  
  
Copyright (c) 2003, 2005, Oracle.  All rights reserved.  
  
Connected to: Oracle Database 10g Release 10.2.0.3.0 - 64bit Production  
Starting "GOEX_ADMIN"."SYS_EXPORT_FULL_01":  goex_admin/******** directory=db_dump_dir dumpfile=syns.dmp logfile=exp_syns.log   
full=y include=PUBLIC_SYNONYM/SYNONYM:"IN (SELECT synonym_name FROM dba_synonyms WHERE table_owner='GOEX_ADMIN')"  
Estimate in progress using BLOCKS method...  
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA  
Total estimation using BLOCKS method: 0 KB  
Processing object type DATABASE_EXPORT/SCHEMA/PUBLIC_SYNONYM/SYNONYM  
Master table "GOEX_ADMIN"."SYS_EXPORT_FULL_01" successfully loaded/unloaded  
******************************************************************************  
Dump file set for GOEX_ADMIN.SYS_EXPORT_FULL_01 is:  
  /u02/database/XM6320/BNR/dump/syns.dmp  
Job "GOEX_ADMIN"."SYS_EXPORT_FULL_01" successfully completed at 16:11:23  
3、导入公共同义词到目标数据库
[python] 
oracle@BKDB01p:~> cp /u02/database/XM6320/BNR/dump/syns.dmp /u02/database/KM3625/BNR/dump/  
oracle@BKDB01p:~> export ORACLE_SID=KM3625  
  
oracle@BKDB01p:~> impdp goex_admin/xxx directory=db_dump_dir dumpfile=syns.dmp logfile=imp_syns.log full=y include=synonym  
  
Import: Release 10.2.0.3.0 - 64bit Production on Wednesday, 19 June, 2013 16:15:52  
  
Copyright (c) 2003, 2005, Oracle.  All rights reserved.  
  
Connected to: Oracle Database 10g Release 10.2.0.3.0 - 64bit Production  
Master table "GOEX_ADMIN"."SYS_IMPORT_FULL_01" successfully loaded/unloaded  
Starting "GOEX_ADMIN"."SYS_IMPORT_FULL_01":  goex_admin/******** directory=db_dump_dir dumpfile=syns.dmp logfile=imp_syns.log full=y include=synonym  
Processing object type DATABASE_EXPORT/SCHEMA/PUBLIC_SYNONYM/SYNONYM  
ORA-31684: Object type SYNONYM:"PUBLIC"."GO_GA_SYS_DATAPUMP_PARA_TBL" already exists  
ORA-31684: Object type SYNONYM:"PUBLIC"."BO_SYS_DATAPUMP_PKG" already exists  
Job "GOEX_ADMIN"."SYS_IMPORT_FULL_01" completed with 2 error(s) at 16:16:12  
#上面的导入过程可以看到,Processing object type DATABASE_EXPORT/SCHEMA/PUBLIC_SYNONYM/SYNONYM实现了同义词的导入  
#同时由于有两个同义词存在,也给出了提示  
  
#验证导入的同义词  
oracle@BKDB01p:~> sqlplus / as sysdba  
  
SQL*Plus: Release 10.2.0.3.0 - Production on Wed Jun 19 16:16:24 2013  
  
Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.  
  
  
Connected to:  
Oracle Database 10g Release 10.2.0.3.0 - 64bit Production  
  
SQL> show parameter db_name  
  
NAME                                 TYPE        VALUE  
------------------------------------ ----------- ------------------------------  
db_name                              string      KM3625  
  
SQL> select count(*) from dba_synonyms where table_owner='GOEX_ADMIN';  
  
  COUNT(*)  
----------  
      1042  
4、手动创建同义词的脚本
[sql] 
ACCEPT input_own
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,