sql同步使用dblink同步數據。
具體參考實例:
1、在win下創建linux的DBLINK
a.查看linux下的tnsnames.ora文件
[oracle@myrac1 admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /s01/app/oracle/proct/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
HJJ =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myrac1.oracle.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = hjj)
)
)
b.創建dblink
SQL> create database link win_lin_link connect to hjj identified by xxxx
2 using '(DESCRIPTION =
3 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.171)(PORT = 1521))
4 (CONNECT_DATA =
5 (SERVER = DEDICATED)
6 (SERVICE_NAME = hjj)
7 )
8 )'
9 /
Database link created.
2.在win下創建trigger
SQL> create or replace trigger trig_win_emp
2 after insert on emp
3 for each row
4 begin
5 insert into emp@win_lin_link values(:new.empno,:new.empname,:new.empsalary);
6 end;
7 /
Trigger created.
3.測試
4.結果
win下插入數據
SQL> insert into emp values('E001','LYN',2300);
1 row created.
SQL>COMMIT;
Commit complete.
SQL> select *from emp;
EMPNO EMPNAME EMPSALARY
---------------------------------------- ---------------------------------------- ----------
E001 LYN 2300
SQL> select * from emp@win_lin_link;
EMPNO EMPNAME EMPSALARY
---------------------------------------- ---------------------------------------- ----------
E001 LYN 2300
linux下查看數據
SQL> select * from emp;
EMPNO EMPNAME EMPSALARY
-------------------- -------------------- ----------
E001 LYN 2300
㈡ SQL多用戶訪問資料庫如何解決的沖突
sql多用戶訪問資料庫其實就是事務並發,會引起如下問題:
1、臟讀:一個事務讀取到了另外一個事務沒有提交的數據
事務1:更新一條數據
事務2:讀取事務1更新的記錄
事務1:調用commit進行提交
此時事務2讀取到的數據是保存在資料庫內存中的數據,稱為臟讀。
讀到的數據為臟數據
詳細解釋:
臟讀就是指:當一個事務正在訪問數據,並且對數據進行了修改,而這種修改還沒有提交到資料庫中,這時,
另外一個事務也訪問這個數據,然後使用了這個數據。因為這個數據是還沒有提交的數據,那麼另外一個
事務讀到的這個數據是臟數據,依據臟數據所做的操作可能是不正確的。
2、不可重復讀:在同一事務中,兩次讀取同一數據,得到內容不同
事務1:查詢一條記錄
事務2:更新事務1查詢的記錄
事務2:調用commit進行提交
事務1:再次查詢上次的記錄
此時事務1對同一數據查詢了兩次,可得到的內容不同,稱為不可重復讀。
3、幻讀:同一事務中,用同樣的操作讀取兩次,得到的記錄數不相同
事務1:查詢表中所有記錄
事務2:插入一條記錄
事務2:調用commit進行提交
事務1:再次查詢表中所有記錄
此時事務1兩次查詢到的記錄是不一樣的,稱為幻讀
詳細解釋:
幻讀是指當事務不是獨立執行時發生的一種現象,例如第一個事務對一個表中的數據進行了修改,
這種修改涉及到表中的全部數據行。同時,第二個事務也修改這個表中的數據,這種修改是向表
中插入一行新數據。那麼,以後就會發生操作第一個事務的用戶發現表中還有沒有修改的數據行,
就好象發生了幻覺一樣。
處理以上隔離級別的問題,採用如下方是:
事務隔離五種級別:
TRANSACTION_NONE 不使用事務。
TRANSACTION_READ_UNCOMMITTED 允許臟讀。
TRANSACTION_READ_COMMITTED 防止臟讀,最常用的隔離級別,並且是大多數資料庫的默認隔離級別
TRANSACTION_REPEATABLE_READ 可以防止臟讀和不可重復讀,
TRANSACTION_SERIALIZABLE 可以防止臟讀,不可重復讀取和幻讀,(事務串列化)會降低資料庫的效率
以上的五個事務隔離級別都是在Connection介面中定義的靜態常量,
使用setTransactionIsolation(int level) 方法可以設置事務隔離級別。
如:con.setTransactionIsolation(Connection.REPEATABLE_READ);
注意:事務的隔離級別受到資料庫的限制,不同的資料庫支持的的隔離級別不一定相同
1 臟讀:修改時加排他鎖,直到事務提交後才釋放,讀取時加共享鎖,讀取完釋放事務1讀取數據時加上共享鎖後(這 樣在事務1讀取數據的過程中,其他事務就不會修改該數據),不允許任何事物操作該數據,只能讀取,之後1如果有更新操作,那麼會轉換為排他鎖,其他事務更 無權參與進來讀寫,這樣就防止了臟讀問題。
但是當事務1讀取數據過程中,有可能其他事務也讀取了該數據,讀取完畢後共享鎖釋放,此時事務1修改數據,修改 完畢提交事務,其他事務再次讀取數據時候發現數據不一致,就會出現不可重復讀問題,所以這樣不能夠避免不可重復讀問題。
2 不可重復讀:讀取數據時加共享鎖,寫數據時加排他鎖,都是事務提交才釋放鎖。讀取時候不允許其他事物修改該數據,不管數據在事務過程中讀取多少次,數據都是一致的,避免了不可重復讀問題
3 幻讀問題:採用的是范圍鎖RangeS RangeS_S模式,鎖定檢索范圍為只讀,這樣就避免了幻影讀問題。
㈢ access 或 sql 可以實現多個資料庫的事務管理嗎
很多朋友想用sql2000資料庫的編程方法,但是卻又苦於自己是學access的,對sql只是一點點的了解而已,這里我給大家提供以下參考---將access轉化成sql2000的方法和注意事項
一,首先,我說的是在access2000,sql2000之間轉換,其他的我也還沒有嘗試過,希望大家多多試驗,肯定是有辦法的;
二,轉換的方法
1,打開」控制面板「下」管理工具「中的」資料庫源「;
2,按」添加「添加一個新的數據源,在選擇欄里選「driver
do
microsoft
access
(*.mdb)」,完成後將出現一個框,在「資料庫源」裡面輸入你想寫的名稱,我取名叫「abc」,說明不需要填,接著,按下面的選擇,尋找你的資料庫地址和選中(注意,請先備份自己的access資料庫),然後確定。數據源在這里建好了,剩下轉換了。
3,打開sql2000企業管理器,進入資料庫,新建一個空的資料庫「abc」;
4,選擇新建立的資料庫,按滑鼠右鍵,選擇「所有任務」下「導入數據」,按「下一步」繼續;
5,在資料庫源下拉但中選擇」driver
do
microsoft
access(*.mdb)「,在」用戶/系統dsn「中,選種你剛才添加的」abc「,按
」下一步「;
6,「目的」不需要修改,選擇伺服器(一般下為自己的本機local,也可以選擇伺服器地址或者區域網地址,確定你的許可權是否可以操作,),使用windows
身份驗證指用自己的系統管理員身份操作,使用sql身份操作驗證可以用於網站的操作,推薦用後者;
7,選上使用sql身份操作驗證後,填寫你的用戶名和密碼,我自己選擇的是系統默認號碼sa,****,資料庫選擇剛新建的abc,按下一步;
8,這一步的兩個單項選擇,從數據源復製表和視圖與用一條查詢指令指定要傳輸的數據,選擇前者,按下一步繼續;
9,這里將出現你自己access資料庫的表,按全選後,下一步;
10,dts導入/導出向導,看立即運行被選中按下一步,
11,按完成繼續;
12,這個步驟你將看到你的數據被導入sql2000裡面,當出現已經成功把xxx個表導入到資料庫的字樣,而且所有的表前面都有綠色的勾,就表示成功導入所有數據,如果中途出現問題或者表前面有紅色的叉的話,說明該表沒有成功導入,這時就要回去查看自己的操作是否正確了.
三,數據修改
1,由於sql2000裡面沒有自動編號,所以你的以自動編號設置的欄位都會變成非空的欄位,這就必須手工修改這些欄位,並把他的標示選擇是,種子為1,增量為1,
2,另外,access2000轉換成sql2000後,原來屬性為是/否的欄位將被轉換成非空的bit,這時候你必須修改成自己想要的屬性了;
3,另外,大家要注意對時間函數的把握.access與sql是有很多不同的.
access轉ms
sql資料庫的幾點經驗
1.access的資料庫中的自動編號類型在轉化時,sql
server並沒有將它設為自動編號型,我們需在sql創建語句中加上identity,表示自動編號!
2.轉化時,跟日期有關的欄位,sql
server默認為smalldatetime型,我們最好將它變為datetime型,因為datetime型的范圍比smalldatetime型大。我遇見這種情況,用smalldatetime型時,轉化失敗,而用datetime型時,轉化成功。
3.對此兩種資料庫進行操作的sql語句不全相同,例如:在對access資料庫進行刪除紀錄時用:delete
*
from
user
where
id=10,而對sql
server資料庫進行刪除是用:delete
user
where
id=10.
4.日期函數不相同,在對access資料庫處理中,可用date()、time()等函數,但對sql
server資料庫處理中,只能用datediff,dateadd等函數,而不能用date()、time()等函數。
5.在對access資料庫處理中,sql語句中直接可以用一些vb的函數,像cstr()函數,而對sql
server資料庫處理中,卻不能用。
㈣ SQL資料庫如何同時修改一張表裡的多個數據
工具/材料:Management Studio。
1、首先在桌面上,點擊「Management Studio」圖標。
㈤ 如何在一台伺服器上安裝多個SQL資料庫 - SQL Server -
首先你的ERP支搏扮慶持缺改什麽資料庫先 ?創建不同資料庫就是啊 每個子公司讀取自己基握的資料庫就得,回去讀讀基礎吧,如果要對應不同數據 ,這個不同指DB2 SQLSERVER之類 就要介面了,如果只是同一個資料庫軟體下設置不同資料庫還不簡單 。建議回去看基礎
㈥ SQL資料庫並發處理(如何處理資料庫並發問題)
並發(concurrent)和並行(parallel)這兩個概念,在資料庫系統的資料中經常出現,然而有關它們的定義和區別卻沒有明確的說法。這里,我們根據這兩個概念在資料中的使用,對它們的不同做一個說明。
並發是指多個任務的同時執行,任務與任務之間沒有聯系。由於資料庫系統要同時為許多用戶提供服務,每個用戶都可以發出自己的訪問請求,一個請求就是一個任務。在一個時間點,資料庫系統可能要同時處理多個戚培任務。因此,資料庫系統一定要具備並發處理能力。
並行是指將一個任務劃分為多個子任務,這些子任務同時執行。在所有子任務處理完成後,將它們的結果進行合並,就得到該任務的最終處理結果。在資料庫系統中,如果要執行一個大的數據查詢,為了提高速度、降低響應時間,用戶可以通過系統配置或者在命令中,要求對該大數據量查詢進行並行處理,將該查詢劃分成多個子查詢。這些子查詢同時執行,最後系統將所有子查詢的處理結果進行合並,作為該查詢處理的最終結果。現有的大型資料庫系統都支持並行處理。
需要說明的是,並發和並行與資料庫系統採用多進程仔局還是多線程體系結構無關。對採用多進程結構的資料庫系統,所有的任務、子任務通過進程來處理;而對採用多線程結構的資料庫系統,這些工作是由線程來完成。
資料庫系統的並發控制,涉及到任務的調度、數據的一致性及可靠性等,而資料庫系統的並行處理,高戚唯主要涉及任務的處理速度、系統性能等方面。