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

      对于同义词的备份我们有多种方式来实现,如直接通过脚本生成同义词的创建脚本,或者使用dbms_metadata.get_ddl来提取同义词的定义脚本。然而在使用传统的exp或是datapump expdp实现schema级别数据迁移时,不能导出公共同义词。尽管如此,我们依旧可以使用导出导入的方式来实现。所不同的是,我们使用FULL=Y的方式来单独导出同义词,然后再将其导入的目标数据库。下文是对此进行的描述,末尾也给出了手动创建同义词的脚本。

1、环境

--源数据库
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、从源数据库导出公共同义词

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、导入公共同义词到目标数据库

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、手动创建同义词的脚本

ACCEPT input_owner PROMPT 'Enter the owner of table:'
SET HEADING OFF VERIFY OFF FEEDBACK OFF TERMOUT OFF;
SPOOL $LOG/create_synonym.sql

--Author: Robinson
--Blog  : http://blog.csdn.net/robinson_0612

SELECT 'create public synonym ' || synonym_name || ' for ' || table_owner || '.' || table_name || ';'
  FROM dba_synonyms s
 WHERE s.owner = 'PUBLIC' AND s.table_owner = UPPER ('&input_owner');

SET HEADING ON VERIFY ON TERMOUT ON FEEDBACK OFF;
SPOOL OFF;
--@$LOG/create_synonym.sql;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

不经意发现的dba_objects和dba_tables中的细节(r7笔记第56天)

今天有一个同学问我一个问题,因为白天比较忙也没有在意,在下班后坐地铁的时候抽空看了这个问题,感觉还是蛮有意思的。但是当时也没有任何答案,就准备自己回去好好实验一...

39030
来自专栏乐沙弥的世界

PL/SQL -->隐式游标(SQL%FOUND)

在PL/SQL中,游标的使用分为两种,一种是显示游标,一种是隐式游标,显示游标的使用需要事先使用declare来进行声明,其过程包括

10530
来自专栏乐沙弥的世界

PL/SQL-->UTL_FILE包的使用介绍

    在PL/SQL中,UTL_FILE包提供了文本文件输入和输出互功能。也就是说我们可以通过该包实现从操作系统级别来实现文件读取输入或者是写入到操作系统文件...

10110
来自专栏杨建荣的学习笔记

insert中启用错误日志的问题及分析(r2第10天)

在平时的工作中,有时候需要insert一批数据,这些数据可能是临时表,外部表,普通表,子查询等形式,类似下面的格式 insert into xxxx (sele...

33090
来自专栏杨建荣的学习笔记

使用awk来解析dump文件 (73天)

dump文件是平时工作中经常碰见的,有时候得到一个dump,但是没有提供一些更多的信息,导入的时候就很可能会有问题。 如果某个用户默认表空间是user,但是du...

44780
来自专栏乐沙弥的世界

FORALL 之 SAVE EXCEPTIONS 子句应用一例

     对于大批量的DML操作中出现的错误,除了使用DML error logging特性来记录在DML期间出现的错误之外,使用批量SQL语句FORALL的S...

7510
来自专栏乐沙弥的世界

PL/SQL 包编译时hang住的处理

       最近PL/SQL包在编译时被hang住,起初以为是所依赖的对象被锁住。结果出乎意料之外。下面直接看代码演示。

9860
来自专栏杨建荣的学习笔记

merge语句导致的CPU使用率过高的优化(r7笔记第4天)

今天有一个数据库有点反常,早上的时候报出了CPU使用率的警告。 警告内容如下: ZABBIX-监控系统: -----------------------...

34150
来自专栏乐沙弥的世界

Oracle 联机重做日志文件(ONLINE LOG FILE)

--=========================================

12120
来自专栏张戈的专栏

MySQL错误修复记录:Table xx is marked as crashed and should be repaired

昨晚入睡后,收到松哥的 QQ 消息,说松松商城打开报错,于是手机 QQ 上打开了首页地址,发现有如下报错: ? MySQL server error repor...

651110

扫码关注云+社区

领取腾讯云代金券