1. 程式人生 > >SQL Server訂閱與釋出 [程序無法連線到 Distributor]

SQL Server訂閱與釋出 [程序無法連線到 Distributor]

1.      SQL Server資料複製需要重點注意的事項:

1)      服務的啟動帳戶

MSSQLserver和Sqlserveragent服務是否是以域使用者身份啟動並執行的(.\administrator使用者也是可以的,不是sqlserver使用者,是windows使用者),最好在配置當中專門設定一個域使用者,各個釋出伺服器都用這個用號,統一管理,並且這個域使用者對釋出伺服器有管理員的許可權。

如果登入用的是本地系統帳戶local,將不具備網路功能,會產生以下錯誤:     程序未能連線到Distributor '@Server name'

注意:如果您的伺服器已經用了SQL Server全文檢索服務, 請不要修改MSSQLserver和Sqlserveragent服務的local啟動。會照成全文檢索服務不能用。請換另外一臺機器來做SQL Server 2000裡複製中的分發伺服器。) 

注意:修改服務啟動的登入使用者,需要重新啟動MSSQLserver和Sqlserveragent服務才能生效。   

2)      資料庫的註冊屬性

資料庫的註冊屬性,不能過再使用本地預設的“.”“local”或者“IP地址”,只能使用伺服器名稱,這樣一來就不會在建立複製的過程中出現14010、20084、18456、18482、18483錯誤了。 如果在廣域網中最好是在 hosts檔案中把對應的IP地址和伺服器名稱寫上,以便網路能夠通過計算機名互相訪問。

3)      快照資料夾

最好手動建立一個,這個資料夾的屬性中,要設定為共享,共享許可權中允許Everyone修改(可以不這樣做)。

4)      檢查相關的幾臺SQL Server伺服器是否改過名稱

需要srvid=0的本地機器上srvname和datasource一樣,如果不一致,是由於在安裝完SQl Server後重新修改了計算機名造成的,處理的方法可以藉助一下程式碼來完成。

在查詢分析器裡執行:

use master

select srvid,srvname,datasource from sysservers

如果沒有srvid=0或者srvid=0(也就是本機器)但srvname和datasource不一樣, 需要按如下方法修改:

USE master

GO

-- 設定兩個變數
DECLARE @serverproperty_servername varchar(100), @servername varchar(100)

-- 取得Windows NT 伺服器和與指定的 SQL Server 例項關聯的例項資訊
SELECT @serverproperty_servername = CONVERT(varchar(100), SERVERPROPERTY(ServerName))

-- 返回執行 Microsoft SQL Server 的本地伺服器名稱

SELECT @servername = CONVERT(varchar(100), @@SERVERNAME)

-- 顯示獲取的這兩個引數

select @serverproperty_servername,@servername

--如果@serverproperty_servername和@servername不同(因為你改過計算機名字),再執行下面的

--刪除錯誤的伺服器名

EXEC sp_dropserver @[email protected]

--新增正確的伺服器名

EXEC sp_addserver @[email protected]_servername, @local=local

修改這項引數,需要重新啟動MSSQLserver和Sqlserveragent服務才能生效。

這樣一來就不會在建立複製的過程中出現18482、18483錯誤了。

5)      檢查相關的幾臺SQL Server伺服器網路是否能夠正常訪問

如果ping主機IP地址可以,但ping主機名不通的時候,需要在

winnt\system32\drivers\etc\hosts (WIN2000)

windows\system32\drivers\etc\hosts (WIN2003)

檔案裡寫入資料庫伺服器IP地址和主機名的對應關係。

關於伺服器之間的連通問題可以參見 遠端連線sql server 2000伺服器的解決方案.doc檔案中的描述。

6)      系統需要的擴充套件儲存過程是否存在(如果不存在,需要恢復):

sp_addextendedproc xp_regenumvalues,@dllname =xpstar.dll

go

sp_addextendedproc xp_regdeletevalue,@dllname =xpstar.dll

go

sp_addextendedproc xp_regdeletekey,@dllname =xpstar.dll

go

sp_addextendedproc xp_cmdshell ,@dllname =xplog70.dll

7)      對於個人版,事務複製僅在訂閱伺服器上支援,企業版,開發版,標準版支援所有的事務複製功能

在個人版上不能做事務複製的釋出伺服器。

8)      複製型別以及應用場景

複製型別

工作原理

應用場景

快照複製

完全按照資料和資料庫物件出現時的狀態對其進行復制和分發的過程。

1、主要是靜態資料,不經常更改

2、一個時期內允許有自己過時的資料副本

3、複製小批量資料

4、站點經常離線,並且可以接受高滯後時間

5、不能完成資料的合併,報主鍵錯誤

6、資料單向同步,訂閱庫同步分發資料

事務複製

將資料的初始快照傳播到訂閱伺服器。然後,當釋出伺服器上發生資料修改時,捕獲個別事物並將其傳播到訂閱伺服器。

1、希望將修改的資料在幾秒之內傳播到訂閱伺服器

2、需要的事務是不可再細分的原子事務

3、訂閱伺服器連線到釋出伺服器時

4、應用程式不能接受訂閱伺服器接受更新的高延遲

5、個人版不能用,可以合併,不能複製大二進位制欄位

6、資料單向同步,訂閱庫同步分發資料

合併複製

使各站點得以自主工作(聯機或離線),並且經過一段時間以後將多個站點上的資料修改合併為一個統一的結果。

1、多個訂閱伺服器需要在不同的時刻更新資料,並將這些更改傳播到釋出伺服器和其他訂閱伺服器

2、訂閱伺服器需要接收資料、離線更改資料、然後將更改同步到釋出伺服器和其他訂閱伺服器

3、應用程式延遲請求為高或低時

4、對站點(高速連線)獨立要求很高的環境

5、訂閱和出版方修改資料都可以同步,加入兩方一塊修改則優先級別高得起作用,一般是出版方優先順序高

6、個人版不能用,可以合併,不能複製大二進位制欄位

7、資料雙向同步

9)      複製中各種角色的對應如下:

釋出伺服器:提供原資料;定義釋出

      出版社:將新書成批量印製,賣到書店

分發伺服器:儲存元資料,歷史紀錄,接收並儲存資料變化;把資料的變化轉發到訂閱伺服器

         書店:將從出版社購買來的新書,對外賣

訂閱伺服器:接收資料;儲存資料副本

         讀者:從書店購買新書

以上三種角色的建立過程:首先建立分發伺服器,就好比書店需要新書;

                                     然後建立釋出伺服器,好比書店有需求了,出版社才按需供應;

                                     最後建立訂閱伺服器,好比讀者購買

2.      複製前的準備工作:

主要是要注意許可權的問題,一般做釋出/訂閱,建議你做如下準備工作:

10)釋出伺服器,訂閱伺服器都建立一個同名的windows使用者,並設定相同的密碼,做為釋出快照資料夾的有效訪問使用者

我的電腦

--控制面板

--管理工具

--計算機管理

--使用者和組

--右鍵使用者

--新建使用者

--建立一個隸屬於administrator組的登陸windows的使用者

11)在釋出伺服器上,新建一個共享目錄,做為釋出的快照檔案的存放目錄,操作:

我的電腦--D:\ 新建一個目錄,名為: PUB

--右鍵這個新建的目錄

--屬性--共享

--選擇"共享該資料夾"

--通過"許可權"按紐來設定具體的使用者許可權,保證第一步中建立的使用者具有對該資料夾的所有許可權

--確定

12)設定SQL代理(SQLSERVERAGENT)服務的啟動使用者(釋出/訂閱伺服器均做此設定)

開始--程式--管理工具--服務

--右鍵SQLSERVERAGENT

--屬性--登陸--選擇"此賬戶"

--輸入或者選擇第一步中建立的windows登入使用者名稱

--"密碼"中輸入該使用者的密碼

13)設定SQL Server身份驗證模式,解決連線時的許可權問題(釋出/訂閱伺服器均做此設定)

企業管理器

--右鍵SQL例項--屬性

--安全性--身份驗證

--選擇"SQL Server 和 Windows"

--確定

14)在釋出伺服器和訂閱伺服器上互相註冊

企業管理器

--右鍵SQL Server組

--新建SQL Server註冊...

--下一步--可用的伺服器中,輸入你要註冊的遠端伺服器名--新增

--下一步--連線使用,選擇第二個"SQL Server身份驗證"

--下一步--輸入使用者名稱和密碼

--下一步--選擇SQL Server組,也可以建立一個新組

--下一步--完成

15)對於只能用IP,不能用計算機名的,為其註冊伺服器別名

  (在連線端配置,比如,在訂閱伺服器上配置的話,伺服器名稱中輸入的是釋出伺服器的IP)

開始--程式--Microsoft SQL Server--客戶端網路實用工具

--別名--新增

--網路庫選擇"tcp/ip"--伺服器別名輸入SQL伺服器名

--連線引數--伺服器名稱中輸入SQL伺服器ip地址

--如果你修改了SQL的埠,取消選擇"動態決定埠",並輸入對應的埠號

3.      實施過程中遇到的問題

1)       (NULL) 未配置為分發伺服器錯誤 14114:

 原因:

針對本地伺服器在 sysservers master 資料庫中沒有一個項不足顯示錯誤訊息。
要驗證是否為本地伺服器在 master 資料庫, sysservers 表中沒有項有連線到本地伺服器並執行 " 從查詢分析器選擇 @ @ servername "。 如果返回 (NULL), 然後針對本地伺服器一個項不存在 master 資料庫中 sysservers 表中。

解決方法:

1、              執行此程式碼:

use master

go select * from sysservers go

2、              標識列表中的本地伺服器名稱。 如果名稱存在, 並且svrID 不是 0, 則執行下列語句刪掉本地伺服器重建,並且替換 " yourservername " 為本地伺服器:

sp_dropserver 'yourservername','droplogins'

3、              將本地伺服器新增到列表通過執行此程式碼:

sp_addserver 'localservername', 'local'

三步執行完後,檢查srvid是否為0,如果為0,重新啟動計算機進行下一步工作

2)      錯誤18483:未能連線到伺服器 'xx',因為'distributor_admin'未在該伺服器上定義為遠端登入。如果是錯誤5也是該處理方法

原因:出現這種問題,應該是你曾經更改過計算機名

解決方法:執行下面的語句,完成後重新啟動SQL服務

if serverproperty('servername') <> @@servername

begin

declare @server sysname

set @server = @@servername

exec sp_dropserver @server = @server

set @server = cast(serverproperty('servername') as sysname)

exec sp_addserver @server = @server , @local = 'LOCAL'

end

檢查一下有沒有這兩個檔案:

c:\program files\Microsoft sqlserver\80\tools\binn\osql.exe

D:\mssql\install\instdist.sql

前者可以在任意一臺sql執行正常的電腦上去複製

如果是後者不存在,則有可能是你的sql版本問題,建議御載後重新安裝

3)      當我在釋出伺服器上的資料庫中插入一條記錄時,分發代理程式報錯,說是“未能找到儲存過程 'sp_MSins_project_inspect_register'。“project_inspect_register”就是我插入記錄的表的表名

沒有安裝sql補丁或補丁失效,解決的辦法是安裝sql sp3

檢查你的SQL有沒有打補丁,沒有的話要打上補丁,檢查的方法是在查詢分析器中執行:

select @@version

如果出來的版本號是8.00.760以下,則表明你未安裝sp3的補丁,要裝上

4)      我現在發現,如果在應用快照時,初始化訂閱資料庫的框架時就不會有這種錯誤。但是我在做合併釋出時,如果只發佈一個表來合併就好好的,一但表多了就出現快照代理程式報錯不能完成,說是“程序未能從表‘[dbo].[administrator_execute_law]'向外大容量複製”。我以為是這個表有問題,就刪了它,發現還是有這個問題,只是表名換了,奇怪的是,第次都是我資料庫中的第一個表出現這樣的問題。

原因:程序未能從表‘[dbo].[administrator_execute_law]'向外大容量複製

這個與欄位型別有關,把所有表的char/varchar/text欄位修改為nchar/nvarchar/ntext就行了

5)      已在下列訂閱伺服器上成功建立訂閱:

    LHUI

SQL Server 企業管理器 未能啟動伺服器“YXZ”上的服務“SQLSERVERAGENT”。

5 - (拒絕訪問。)

因為該釋出的快照尚不可用,所以不能立即初始化訂閱伺服器“LHUI”上的訂閱。若要初始化該訂閱,請在快照可用後啟動分發代理程式。

這個問題說是要打補丁,可是打了補丁之後還是有提示,但不影響複製。

6)      在資料釋出時報如下錯誤資訊:

   在BCP資料檔案中遇到意外的EOF(源:ODBC SQL Server Driver(ODBC):錯誤程式碼:S1000)

   這是因為資料庫中含有TEXT或nTExt或Image欄位引起的,只要在某項釋出屬性頁中選擇<快照>-<快照格式>-<字元模式格式>,即可解決該問題.

7)      另外,在建資料釋出時,報如下錯誤:

     (源: (資料來源);錯誤程式碼:2627)

     這是因為在建釋出時,資料庫資料正在執行插入或修改動作引起的,只要該釋出的快照重新執行一下即可。

8)      對某些大型資料表無法生成快照的問題,資料庫報如下錯誤:

    程序未能從表"[dbo].[syncobj_0x3436383044343035]"向外大容量複製,在寫 BCP 資料檔案時發生 I/O 錯誤(源: ODBC SQL Server Driver (ODBC); 錯誤程式碼: 0)
     這是因為該表有問題或表資料太大造成的,可用如下方法試著解決一下:
     a、用DBCC checktable 對該表檢查一下,資料表是否有問題,然後再試一下重新生成資料快照。
     b、如果上述問題仍無法解決,可以用資料匯出功能將資料表導到訂閱伺服器中。
     c、然後重建一個針對該資料表的資料釋出,選擇不生成快照功能,然後執行下述問題4的解決方法,解決出現的問題。

9)      九、在建立訂閱時,選擇不初始化訂閱方資料表,則在訂閱伺服器不產生相應的複製存貯過程,執行該釋出時,會報如下錯誤:
     未能找到存貯過程'sp_MSupd_XXX'...

   原因如下:
Problem Description :
======
Replication Distribution Agent reports error. The error message is "It could not
find the stored procedure sp_MSins_***".

Reason :
======
If we choose "the subscriber has schema and data already" option when we create the
subscription, those three system auto created stored procedures will not be created
in the subscribing database side, they are
"sp_MSins_***"/"sp_MSupd_***"/"sp_MSdel_***".

Soltuion :
======
We could use the system command "sp_scriptpublicationcustomprocs 'pulication_name'"
to create the scripts of those three system stored procedures. Then we run these
scripts in the subscribing database. The problem will be resolved.
   解決方案:
     在釋出伺服器上執行如下命令:sp_scriptpublicationcustomprocs 'xxxx', 其中xxxx為釋出名稱,該命令會生成建立上述三個存貯過程的指令碼,然後在訂閱伺服器執行生成三個存貯過程即可。

10)在訂閱資料時,發生如下錯誤:

該訂閱已標記為不活動,必須重新初始化該訂閱。需要刪除並重新建立 NoSync 訂閱。
(源: (資料來源); 錯誤程式碼: 21074)

解決方案:
   在釋出伺服器上,選擇某項釋出,在屬性-》訂閱-》重新初始化。可以解決上述問題

11)在資料釋出時,發生如下錯誤:

   不能在具有唯一索引 'PK_tbMeetingMemo' 的物件 'tbMeetingMemo' 中插入重複鍵的行。
(源: (資料來源); 錯誤程式碼: 2601)

   原因:可能是在釋出該表時,在不同的釋出中存在多次釋出該表的情況.
   解決方法:
 a、查明是否有多次釋出該表的情況.
  在釋出伺服器的釋出資料庫中用執行如下SQL語句:select * from    sysarticles order by dest_table
  檢視在dest_table列中是否出現多次該表的資訊,如是,則說明該表已被多  次釋出,可以用下一步中說明的方法來檢視是哪些釋出釋出了該表。
b、執行語句:select * from syspublications,檢視pubid與上述資訊相同的pubid的內容,則就能確定是何種釋出釋出了相同的資料表。
c、找到了釋出後,如果是增加資料表,則不用刪除該釋出下的所有訂閱,如果是去除釋出的資料表,則需刪除該釋出下的所有的訂閱資訊,修改相應的釋出內容,重新制定相應的訂閱.

注:
1、如何忽略在分發中出現的報錯
    a、在釋出伺服器的管理-》SQL server代理->作業->中,找到該釋出的釋出JOB,在屬性->步驟->2執行程式碼程式-》編輯->命令->在命令語句最後新增 -skiperrors xxxx(xxxx是分發時報的錯誤號) , 指的是忽略該錯誤的意思。
    b、然後重新啟動分發引擎.

2.如何輸出出錯的資訊
   在待輸出出錯資訊的JOB命令最後加入 -Output c:\temp\error.txt, -Output是命令,後面是待輸出的檔案路徑和資料夾名

12)伺服器不能互相訪問

1、如果能ping通 ip地址,但ping不通伺服器名稱,可以修改

winnt\system32\drivers\etc\hosts (WIN2000)
windows\system32\drivers\etc\hosts (WIN2003)

  2、ping通的情況下如果在企業管理器中不能註冊上。

     有可能是sqlserver的埠發生變化看看是不是1433

     防火牆是否開放1433埠。

     可以用telnet ip 1433 ,看是否1433埠放開

  3、win2003安裝sqlserver2000標準版,需要打補丁3


相關推薦

SQL Server訂閱釋出 [程序無法連線Distributor]

1.      SQL Server資料複製需要重點注意的事項: 1)      服務的啟動帳戶 MSSQLserver和Sqlserveragent服務是否是以域使用者身份啟動並執行的(.\administrator使用者也是可以的,不是sqlserver使用者,是win

Sql Server 2005 中Analysis Services無法連線

今天又吐血,用Sql Server Management Studio無法連線Sql Server 2005 中Analysis Services。 出現“重疊I/O操作在進行中”。 原來是與校園網連線的DrCOM有衝突。設了DrCOM開機登陸,所以重灌N次Sql Serve

SQL Server 2008 使用篇】無法連線到伺服器

我們在使用SQL Server 2008 的時候可能會出現各種各樣的問題,本文是我在使用過程中遇到的一些問題,和大家分享一下。 1:無法連線到伺服器:在使用Windows 身份驗證登陸的時候 出現 錯

SQL連線問題:在 SQL Server 建立連線時出現網路相關的或特定於例項的錯誤。未找到或無法訪問伺服器。請驗證例項名稱是否正確並且 SQL Server 已配置為允許遠端連線

在與 SQL Server 建立連線時出現與網路相關的或特定於例項的錯誤。未找到或無法訪問伺服器。請驗證例項名稱是否正確並且 SQL Server 已配置為允許遠端連線。 (provider: 命名管道

SQL Server 建立連線時出現網路相關的或特定於例項的錯誤。未找到或無法訪問伺服器。請驗證例項名稱是否正確並且 SQL Server 已配置為允許遠端連線。 (provider: 命名管

今早開機發現,開啟SQL Server 2008 的 SQL Server Management Studio,輸入sa的密碼發現,無法登陸資料庫?提示以下錯誤: “在與 SQL Server 建立連線時出現與網路相關的或特定於例項的錯誤。未找到或無法訪問伺服器。請驗證

SQL Server 複製 訂閱釋出

     接觸 SQL Server 很長時間了,做了很多專案,但是對sql Server的訂閱和釋出知之不多,現在把訂閱與釋出的相關知識總結起來,以供大家拍磚。以下內容參考webcast   SQL Server 的複製技術 包括 訂閱和釋出   複製的組成部分:釋

SQL SERVER資料庫之釋出訂閱

1.新建windows使用者admin,賦予其管理員許可權,釋出伺服器和訂閱伺服器均設定,其使用者名稱密碼相同。 2.設定共享資料夾,並共享給新建的使用者,用於存放快照。 3.sql server代理選擇剛才設定的使用者登陸,釋出伺服器和訂閱伺服器均設定。 4.別名設定SQL Native C

SQL SERVER 2008 利用釋出訂閱方式實現資料庫同步

資料庫同步方式有很多種,這裡以SQL Server 2008 為例利用資料庫釋出和訂閱的方式來演示資料庫的同步技術。由於就有一臺計算機,只能在同一個伺服器下兩個不同的資料庫之間進行資料同步進行演示。 首先我們在SQL Server 中建立兩資料庫 Lx_Data1 和 Lx

超詳細!! sql server 同步資料庫 釋出 訂閱 跨網段 無公網ip 常見問題

問題描述 主機1:釋出端 阿里雲伺服器--有公網ip   主機2:訂閱端 筆記本--無公網ip   資料量很小,主要是熟悉釋出訂閱的操作流程。 主機2僅僅作為主機1的本地備份,要求修改雲伺服器上資料後,能通過sql server的釋出訂閱功能將本地資料同步。 底下沒有一步一步介紹,一步一步

sql server 訂閱發布的配置

下一步 相同 設置 很多 賬號 同步 http size 註意 網上sql server 的發布訂閱功能的教程很多,但是很多東西寫的不是很詳細,常常給人誤解,現在根據自己的情況從新整理一下: 1、服務器端 然後一路下一步, 2、訂閱端(重點) 給服務器在本地

【SqlServer系列】淺談SQL Server事務鎖(上篇)

架構 tab 要求 允許 ble 1.2 定義 由於 數據庫引擎 一 概述 在數據庫方面,對於非DBA的程序員來說,事務與鎖是一大難點,針對該難點,本篇文章試圖采用圖文的方式來與大家一起探討。 “淺談SQL Server 事務與鎖”這個專題共分

SQL Server 事務

表鎖 沖突 png 使用 庫鎖 實現 有一種 圖片 div 事務就是作為一個邏輯工作單元的SQL語句,如果任何一個語句操作失敗那麽整個操作就被失敗,以後操作就會回滾到操作前狀態,或者是上個節點。為了確保要麽執行,要麽不執行,就可以使用事務。而鎖是實現事務的關鍵,鎖可以保證事

Lync Server 命令行管理程序無法打開

Lync PowerShell 管理命令 Lync Server 2013 PowerShell在第一次打開時,有的時候等待很長時間都不能加載Lync模塊。我們可以使用Windows PowerShell 記載Lync Server模塊的方式。 使用管理員身份打開Windows PowerShe

sql server 備份恢復系列四 大容量模式下的備份還原

日誌備份 mas 正在 .com 基準 數據庫 說明 bubuko ren 一. 概述   在sql server 備份與恢復系列的第一篇裏,有講到大容量模式下備份與還原的相關知識。這篇重點來演示在大容量模式下常用的備份與還原模式“完整備份+差異備份+日誌備份”。 在大容量

SQL SERVER 查詢整理索引碎片

des locate begin declare unit percent pre arch lte 重建索引 1 use DATABASE_NAME; 2 3 DECLARE @TableName VARCHAR(255) 4 DECLARE @sql NVA

關於SQL Server 2005 windows登陸模式無法登陸伺服器(錯誤:18456)的解決辦法

由於系統經常重灌,每次安裝MS SqlServer2005也積累了不少經驗。 之前幾次無法連線資料庫往往是因為: 1.SQLSERVER的協議配置不正確,需要Named Pipes和TCP/IP 協議啟用並禁用VIA 2.外圍應用配置器中未啟用database服務 3.SqlServ

Redis訂閱釋出原理

記錄下來以後方便回憶,需要時隨時翻閱 Redis 訂閱與釋出 原理 client->pubsub_channels 是客戶端維護的一個以dict結構的維護的訂閱頻道雜湊表,VAL是NULL,不需要值。 server->pubsub_channels 是服務端維護的一

SQL server 2008 開啟資料庫的遠端連線

                SQL Server 2008 R2開啟資料庫的遠端連線 SQL Server 2008預設是不允許遠端連線的,如果想要在本地用SSMS連線遠端伺服器上的SQL Ser

《RabbitMQ官方文件》訂閱釋出

之前的教程中,我們建立了一個工作佇列。在一個工作佇列背後的假設是將每個任務都準確地交付給一個工作人員。在這個環節我們要做些完全不同的事情—我們將要把一個訊息傳遞給多個消費者。這種模式被稱為“釋出/訂閱”。 為了闡述這種模式,我們打算構建一個簡單的日誌系統。它由兩個程式組成—第一個發出日誌訊息

SQL ServerIO相關的等待型別:IO_COMPLETION和PAGEIOLATCH_*

一個大的SQL語句操作,執行計劃中包含了一個merge join操作,觀察到SQL長時間處於IO_COMPLETION等待狀態,如果是讀取相關的表的資料,伺服器應該全力為其服務,但是伺服器的物理IO又遠遠沒有達到瓶頸。這個IO_COMPLETION到底是在做什麼?是表的資料頁IO請求還在其他操作?如果是,跟P