午夜国产狂喷潮在线观看|国产AⅤ精品一区二区久久|中文字幕AV中文字幕|国产看片高清在线

    利用MSSQL復制功能實現(xiàn)與Oracle數據庫同步
    來源:易賢網 閱讀:932 次 日期:2014-12-04 14:55:20
    溫馨提示:易賢網小編為您整理了“利用MSSQL復制功能實現(xiàn)與Oracle數據庫同步”,方便廣大網友查閱!

    一 概述

    默認情況下,SQL Server 代理創(chuàng)建錯誤日志來記錄警告和錯誤。日志中顯示下列警告和錯誤:

    警告消息,提供有關潛在問題的信息,例如“作業(yè) 在執(zhí)行時被刪除”。

    錯誤消息,通常需要系統(tǒng)管理員干預,例如“無法啟動郵件會話”??梢酝ㄟ^ net send 將錯誤消息發(fā)送給特定用戶或計算機。

    默認情況下,執(zhí)行跟蹤消息不寫入 SQL Server代理日志錯誤,因為它們會將日志填滿。如果錯誤日志已滿,會降低選擇和分析更嚴重的錯誤的能力。因為日志會增加服務器的處理負荷,所以請務必仔細考慮是否值得將執(zhí)行跟蹤消息捕獲到錯誤日志中。通常,最好僅在調試某個特定問題時捕獲所有消息。

    二 錯誤日志的存放目錄和個數

    SQL Server 最多可以維護 1個當前錯誤日志記錄 和 9個 SQL Server 代理錯誤日志歷史記錄。每個存檔日志都有一個擴展名,指示該日志的相對存在時間。例如,擴展名 .1 表示最新的存檔錯誤日志,而擴展名 .9 表示最舊的存檔錯誤日志。

    SQL Server 代理停止后,可以修改 SQL Server 代理錯誤日志的位置。如果錯誤日志為空,則無法打開日志??梢噪S時循環(huán)訪問 SQL Server 代理日志,無需停止 SQL Server 代理。

    三 基本管理任務

    查看 SQL Server 代理錯誤日志 :企業(yè)管理器;通過openrowset讀取文件;xp_cmdshell下執(zhí)行dos輸出的type命令等;xp_cmdshell下bcp進入數據庫系統(tǒng)的表中;exec xp_cmdshell 'type "C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLLOGSQLAGENT.out"'

    重命名 SQL Server 代理錯誤日志 ,重啟sql代理后生效 :企業(yè)管理器;EXEC msdb.dbo.sp_set_sqlagent_properties @errorlog_file=N'C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLLOGSQLAGENT.OUT'

    發(fā)送 SQL Server 代理錯誤消息 ,使用net send 發(fā)送消息,依賴于windows的messenges 服務 :企業(yè)管理器;EXEC msdb.dbo.sp_set_sqlagent_properties @error_recipient=N'jinsen'

    將執(zhí)行跟蹤消息寫入到 SQL Server 代理錯誤日志中 :配置sql代理,記錄跟蹤內容;

    配置代理錯誤日志的信息內容類型(錯誤 1、警告 2、信息(包含錯誤跟蹤) 4),類型可以疊加:企業(yè)管理器;EXEC msdb.dbo.sp_set_sqlagent_properties @errorlogging_level={1|2|4|3|5|7|6}

    配置代理錯誤日志的信息 1.分別建立鏈接對數據庫進行操作,SQLServer可以用ADO.NET,操作Oracle可以用OLEDB或者用System.Data.OracleClient(需要添加引用才能用)

    這種方案的優(yōu)點就是簡單,各自寫各自的數據庫操作代碼,缺點就是不能將兩個數據庫中的表直接進行聯(lián)合查詢,鏈接Oracle的每臺機器必須安裝OracleClient才可以使用。

    2.使用同義詞操作Oracle數據庫。

    這種方法的具體操作我在以前的文章中已經寫清楚了,這樣做一來可以進行表的聯(lián)合查詢二來不需要每臺機器都安裝OracleClient,但是還是有一個缺點:效率低,比如對同義詞使用like去查找需要的數據,如果是直接連Oracle數據庫也許只要0.1秒就可以找到答案,但是用同義詞可能就要等10秒20秒或更久。原來SQLServer并不是直接把查詢語句傳遞給Oracle,讓Oracle執(zhí)行操作,而是將所有數據都取到SQLServer服務器上,邊取數據邊分析,直到滿足查詢條件為止。其實這種數據放在兩個服務器上還有一個缺點就是一旦Oracle服務器宕機,即使我們這邊的所有服務器都是好的,那么我們的程序中用到Oracle數據的地方就無法使用。

    3.直接鏈接Oracle數據庫+同義詞+作業(yè)+異常跳轉 方式。

    這種方法具體講就是我們的程序直接用OLEDB(OracleClient)鏈接Oracle數據庫,同時SQLServer服務器也建立了同義詞指向Oracle,在SQLServer上建立作業(yè),將同義詞中的數據拷貝到SQLServer服務器的表中。一旦Oracle宕機,程序中就會捕捉到異常,于是就使用SQLServer中的數據。這樣做比較復雜,需要一定的編程,效率也不是特別高,但是優(yōu)點也是明細的,平時鏈接Oralce服務器,異常情況下鏈接SQLServer中的備份數據,保證了程序的正常運行。

    4.直接編寫一個程序,以服務或自啟動方式一直運行,每隔一段時間將Oracle數據庫中的數據寫到SQLServer數據庫中。

    這種方法就是編程復雜,具有很大難度。

    5.利用SQLServer2005的復制功能將Oracle數據庫中的數據同步到SQLServer服務器中,程序只操作SQLServer,不鏈接Oracle數據庫。

    這種方法不需要編寫任何代碼,由于只對SQLServer進行查詢,所以查詢效率高可以做多表鏈接,開發(fā)人員也不需要再裝OracleClient,也不用害怕Oracle服務器宕機導致我們的相關程序無法使用。優(yōu)點倒是很多,那么有沒有缺點拉?缺點還是有的,主要是取得的數據不是實時的數據,Oracle那邊的數據更新了,我們這邊還有可能是老數據。

    前面的四種方法我就不用多講了,這次主要是講第五種方法的具體實現(xiàn):

    1.安裝SQLServer復制功能。

    在安裝SQLServer數據庫的時候選上“復制”,將“復制”功能安裝到服務器。微軟說如果第一次安裝的時候沒有裝,以后再想添加該功能只需要運行安裝程序將“復制”選上就可以了,不過說是這么說,我試了幾次都不行,我也不知道怎么回事,為了安裝上復制,所以將SQLServer卸載了,重新安裝!這種方法很笨,不過我實現(xiàn)想不出其他辦法了,希望高手指點。

    2.設置Oracle服務器端的權限。

    創(chuàng)建一個用于復制用的用戶,授予下列權限:

    CREATE PUBLIC SYNONYM 和 DROP PUBLIC SYNONYM

    CREATE PROCEDURE

    CREATE SEQUENCE

    CREATE SESSION

    還必須直接為用戶授予下列權限(不是通過角色):

    CREATE ANY TRIGGER。

    CREATE TABLE

    CREATE VIEW

    同時該用戶還必須對要發(fā)布的表所在表空間有UNLIMITED的權限,還要針對每個要用于同步的表設置Select權限。

    3.SQLServer服務器上安裝OracleClient10g

    必須安裝了才可以鏈接Oracle服務器,不推薦安裝Oracle9i,即使我們要鏈接的Oracle是9i的。安裝完成以后重啟SQLServer服務器。用PLSQL或其他工具測試一下是否可以鏈接到Oracle服務器。

    4.設置SQLServer Agent權限

    在SQLServer服務器上 新建用戶,將該用戶加為管理員,在“服務”中找到“SQLServer Agent”,將其啟動用戶改為該用戶,重啟該服務。

    5.配置分發(fā)

    打開ManagementStudio右鍵“復制”節(jié)點,選中“配置分發(fā)”,按向導一步一步操作,將快照文件夾路徑指定為一個專門的共享文件夾,其他都不用修改,完成配置分發(fā)。

    6.添加Oracle發(fā)布

    右鍵“本地發(fā)布”->“新建Oracle發(fā)布”,啟動Oracle發(fā)布向導,添加Oracle服務器,將在Oracle服務器上新建的用戶密碼輸入,一直下一步,選快照發(fā)布,選中需要發(fā)布的表,選中“立即創(chuàng)建快照發(fā)布”和“計劃運行快照代理”,計劃時間就自己根據需要設定,“快照代理”選擇“代理服務帳戶”,發(fā)布名稱填寫需要的名稱,比如“Test1”,然后點擊完成。這樣就完成了發(fā)布工作。

    7.添加Oracle訂閱

    右鍵“本地訂閱”->“新建訂閱”運行向導,選中剛才新建的Test1發(fā)布,一般選中“推送訂閱”,指定要訂閱的數據庫(比如:mis),也就是要用來存儲Oracle數據的數據庫,訂閱屬性中選中用SQLServer代理用戶運行,代理計劃“連續(xù)運行”,初始化時間“立即”,然后創(chuàng)建訂閱完成。

    這個時候我們打開訂閱的數據庫mis,我們可以看到其中添加了Oracle發(fā)布出來的表,而且這些內容會按照計劃隔段時間同步Oracle數據一次。

    到此我們的同步完成。

    8.測試是否同步成功

    用PLSQL往Oracle中寫入數據,修改數據,刪除數據,如果發(fā)布時候選中的是每一分鐘運行快照代理一次,那么隔一分鐘后,我們再去打開SQLServer中的表,我們可以看到其中的內容和Oracle一樣進行了變化。

    PS:在“本地發(fā)布”下選中我們的發(fā)布,右鍵,“查看代理運行狀態(tài)”可以看到我們的發(fā)布是否成功。內容的編碼類型 :企業(yè)管理器;EXEC msdb.dbo.sp_set_sqlagent_properties @oem_errorlog={0|1}

    回收錯誤日志的空間 :使用企業(yè)管理器;EXEC msdb.dbo.sp_cycle_agent_errorlog

    配置代理錯誤日志文件記錄數的大小(行數):企業(yè)管理器;EXEC msdb.dbo.sp_set_sqlagent_properties @jobhistory_max_rows=1000,

    配置代理錯誤日志文件記錄每個作業(yè)的最大記錄的大小(行數):企業(yè)管理器;EXEC msdb.dbo.sp_set_sqlagent_properties @jobhistory_max_rows_per_job=100

    四 常見問題

    q:為什么sql代理錯誤日志文件的內容始終為空,無法進行錯誤信息的日志記錄?

    a:重新配置sql代理錯誤日志文件的編碼格式為非oem——即配置為unicode編碼,可以解決問題

    q:為什么在使用企業(yè)管理器查看sql代理錯誤日志時,日志查看器出現(xiàn)異常,“unicode file expected”?

    a:重新配置sql代理錯誤日志文件的編碼格式為非oem——即配置為unicode編碼,可以解決問題

    q:為什么企業(yè)管理器、sms 無法回收sql2000的sql代理錯誤日志文件?

    a:sqlserver2000的sql 代理錯誤日志的文件 不支持回收!

    更多信息請查看IT技術專欄

    更多信息請查看數據庫

    2025國考·省考課程試聽報名

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關于我們 | 聯(lián)系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網