使用impdp命令在不同实例间通过dblink同步数据库

一、环境说明
源数据库:

IP地址:192.168.137.100
sid:catalog
用户名:rman
密码:rman

目标数据库:
IP地址:192.168.137.101
sid:orcl
用户名:rman
密码:rman

二、在目标数据库上创建到源数据库的tnsname。
用oracle用户登录目标数据库,修改 $ORACLE_HOME/network/admin/tnsnames.ora文件,增加如下内容

catalog =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.100)(PORT = 1521))
)
(CONNECT_DATA =
(SID = catalog)
)
)

修改完这个文件之后,执行如下命令,测试创建的tnsname是否正确
$ tnsping catalog
如果返回结果的最后是 OK (0 msec),证明tnsname创建成功,执行下一步操作[@more@]

三、创建 dblink
创建dblink的语句为

CREATE DATABASE LINK CONNECT TO IDENTIFIED BY USING ''

用oracle用户身份登录目标数据库服务器,执行如下操作
$ sqlplus rman/rman
sql> CREATE DATABASE LINK dmp_link CONNECT TO rman IDENTIFIED BY rman USING 'catalog';

*************************************
如果出现
ERROR at line 1:
ORA-01031: insufficient privileges
需要用sysdba身份,执行如下语句,将创建dblink的权限授予用户,然后再次执行上面创建dblink的语句
grant create database link to rman;
*************************************


然后执行如下语句,测试dblink是否创建成功,能返回结果证明dblink创建成功
SQL> select tname from tab@dmp_link;
SQL> exit;

四、在目标数据库上创建directory对象
以oracle用户登录目标数据库

1、创建一个目录,假设为 /oracle/dmp,并保证这个目录oracle用户可读写
2、以sysdba身份登录数据库,创建directory对象,并给这个对象赋予读写权限
3、然后登录数据库,执行如下语句:

$ sqlplus / as sysdba
sql> create or replace directory dmp_dir as '/oracle/dmp';
sql> grant read,write on directory dmp_dir to public;
sql> exit;

五、在目标数据库上执行impdp命令,导入数据
将transdata.sh脚本放到目标数据库的一个目录中,并设置可以用oracle用户运行,然后使用如下命令格式运行

sh transdata.sh
其中:
是目标数据库(要导入的数据库)的用户名
是目标数据库(要导入的数据库)的密码
是目标数据库(要导入的数据库)的实例名(实例名要注意大小写)

六、下面是transdata.sh的脚本

transdata.sh

################################################################################
lv_argc=0 #args count
lv_user="" #local database username
lv_pwd="" #local database password
lv_sid="" #local database sid

################################################################################
lv_argc=$#
case ${lv_argc} in
3 )
lv_user=`echo $1| tr "[:lower:]" "[:upper:]"`
lv_pwd=$2
lv_sid=$3
;;
* )
echo "usage:$0 username passwd sid"
exit
;;
esac

################################################################################
export ORACLE_SID=$lv_sid

sqlplus $lv_user/$lv_pwd < /dev/null
set echo off;
set feedback off;
set heading off;
set pagesize 0;
set linesize 120;
set termout off;
set trimout on;
set trimspool on;

spool dropobject_tmp.sql
Select 'alter table '||t.table_name||' drop constraint '|| t.constraint_name||';' From User_Constraints t Where t.constraint_type='R';
select 'drop '||object_type||' '||object_name||';' from user_objects where object_type not in ('TABLE','INDEX','DATABASE LINK','LOB','TYPE','PACKAGE BODY');
spool off
host cat dropobject_tmp.sql|grep -v "^SQL>" > dropobject.sql
@dropobject.sql;

exit
!

################################################################################

impdp ${lv_user}/${lv_pwd} directory=dmp_dir network_link=dmp_link exclude=USER:"='${lv_user}'" TABLE_EXISTS_ACTION=REPLACE parallel=4

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22049049/viewspace-1029591/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22049049/viewspace-1029591/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值