Oracle資料庫定時同步

2021-09-24 13:27:01 字數 3017 閱讀 6631

通過執行定時任務從源資料庫(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這個函式,我們只需要考慮兩個事情 安排某一任...