使用impdp命令在不同例項間透過dblink同步資料庫

cnhtm發表於2009-12-11

一、環境說明
源資料庫:

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章