通過執行定時任務從源資料庫(sourcedb)向目標資料庫(targetdb)進行資料同步操作。
資料庫版本一致是進行資料同步的前置條件;
在配置oracle客戶端的伺服器上執行以下命令:
exp username/password@sourcedb file=
/export
/home/oracle/datasync/table/tablea.dmp tables=
"(tablea)"
&
exp username/password@sourcedb file=
/export
/home/oracle/datasync/table/tableb.dmp tables=
"(tableb)"
& exp username/password@sourcedb file=
/export
/home/oracle/datasync/table/tablec.dmp tables=
"(tablec)"
&
如果需要多匯出幾張表的話,可以進行擴充套件,該命令需要注意以下事項:
sourcedb對應了%oracle_home%\network\admin\tnsnames.ora 配置檔案的資料庫名稱;
每行匯出命令後都需要用&符號進行連線,這樣可以實現同時匯出,提高匯出效率;
執行匯出命令的伺服器需要與源資料庫網路互通;
清空資料庫資料是通過指令碼去執行 .sql 檔案
指令碼:
#!
/bin/sh
sqlplus username/password@targetdb <<
eof@/
export
/home/oracle/datasync/list_table.sql;
eof
.sql檔案:
truncate
table tablea ;
delete
from tableb where1=
1;drop
table tablec ;
需要注意以下事項:
主鍵約束如果要清空的表和其他表有主鍵約束,需要先將從表drop,再將主表drop;
主鍵約束的小表,可以通過 delete from 命令進行清空;
其他的表通過truncate、drop都可以;
可以通過sql語句檢視當前資料庫的主鍵約束情況
select
(select a.table_name from user_constraints a where a.constraint_name = c.r_constraint_name) 主表表名, c.r_constraint_name 主表主鍵鍵約束名, c.table_name 從表表名, c.constraint_name 從表外來鍵約束名 from user_constraints c where c.constraint_type =
'r';
在進行資料匯入時,需要注意主鍵約束表的匯入先後順序,先導入主表再匯入從表,這樣的話才能建立起主鍵約束關係
imp username/password@targetdb full=y file=/export/home/oracle/datasync/table/tablea.dmp ignore=y
imp username/password@targetdb full=y file=/export/home/oracle/datasync/table/tableb.dmp ignore=y
imp username/password@targetdb full=y file=/export/home/oracle/datasync/table/tablec.dmp ignore=y
在這裡提一下自己遇到的坑:
最開始的時候是直接在root使用者下新增定時任務,然後定時任務執行指令碼時失敗,因為root使用者下不能夠直接執行 exp imp指令碼命令;
後來把定時任務新增到oracle使用者下,新增乙個定時任務還是不能直接執行exp imp命令;
通過檢視網上資料,可以通過配置環境變數 /etc/profile ,在環境變數裡面新增oracle的配置,後續在定時任務中新增source /etc/profile 即可執行匯出匯入命令;
定時任務如下:
30 00 * * * source /etc/profile;cd /export/home/oracle/datasync;nohup ./clear.sh > clear.out 2>&1
新增環境變數如下
#oracle
oracle_base=/export/home/oracle
oracle_home=/export/home/oracle/product/11.2.0
export oracle_base oracle_home
export nls_lang=american_america.zhs16gbk
export lc_all=zh_cn.gb2312
ld_library_path=/export/home/oracle/product/11.2.0/lib:$ld_library_path
export ld_library_path
classpath=$oracle_home/jre:$oracle_home/jlib:$oracle_home/rdbms/jlib:$oracle_home/network/jlib:$classpath
export classpath
export path=/export/home/oracle/product/11.2.0/bin:$path:.
該方式僅僅適用於對資料實時性要求不高的需求,如果要求實時性很高的話,可以考慮通過高階複製的方式來進行資料同步 Oracle資料庫資料同步方法
我這人有個習慣,看到自己認為好的文章,總要認認真真的抄回來。比較原始的,觸發器 job dblink的方式,可同步和定時重新整理。物化檢視重新整理的方式,有增量重新整理和完全重新整理兩種模式,定時重新整理。高階複製,分為多主複製和物化檢視複製兩種模式。其中多主複製能進行雙向同步複製和非同步複製,物化...
oracle資料庫定時任務
不久前,做的專案中需要用到定時任務 有兩種實現方式 應用程式,資料庫。決定採用資料庫的定時任務。關於資料庫定時任務的資料,網上有很多文章,但當自己在設計時,並沒有僅通過一篇文章就解決問題。於是決定綜合網上資料和自己的專案,寫一篇oracle資料庫自帶的job來實現定時任務。一 定時任務的建立 啟動 ...
oracle資料庫定時任務
常要oracle資料庫定時的自動執行一些指令碼,或做資料庫備份,或做資料的提煉,或做資料庫的效能優化,包括重建索引等等的工作,這時需要用到乙個函式dbms job.submit,來完成oracle定時器job時間的處理上。使用dbms job.submit這個函式,我們只需要考慮兩個事情 安排某一任...