操作使用的一些技巧(事務複製類型): 1.如何修改一個已經發布的表的屬性? 將發布所有訂閱刪除,(發布不用刪除),就可以在發布屬性的項目中取消表,然後就 可以修改該表了,修改後,再將表加入發布內就可以了. 2.常用的操作介面: (1)一般都在監視器--發布項目,可以看到快照 分發和訂閱的即時資訊. (2)另外一個操作地方是發布的屬性,(在屬性--狀態裡可以啟動代理) (3)還有一個是工具--複製--配置發布、訂閱伺服器和分發,需要訂閱的伺服器必 須在這裡指定授權後訂閱才能成功. ============ 問題: 資料庫無法登陸的老問題:資料庫屬性-安全裡面,不要選僅windows登陸,換另外一 個模式. 0.訂閱一個快照發布(不是事務複製)出錯,"21776 名稱xxx在TransPublication集 合上沒有找到",在企業管理器中,將發行集資料庫和訂閱資料庫都停止或者斷開,再 啟動,重新串連就可以訂閱快照發布了.真是奇怪,有莫名其妙的問題可以嘗試重啟 伺服器試試,有時後一台機器上可以正常控制訂閱操作,而另外一台機器上卻訂閱 操作出錯,也重新串連伺服器試試. 1.一開始遇到的問題是,註冊的local伺服器不能用,刪除後重新命名搞定, 2.sql server代理正在使用系統帳戶,它會導致複製失敗,. 這個提示點確定後, 本賬戶的選項為灰色, 原來是配置發布的伺服器不是本機,到本機上操作發布,就可以選"本賬戶"了. 3.又遇到不能署名訂閱,"不允許請求的署名訂閱",明明發布和訂閱伺服器雙方都
註冊了,也雙方都建立了 訂閱的使用者帳號,原因:在這步,點註冊伺服器,然後不能選預設的類比sql登陸,而 是要選"使用sql 身分識別驗證",然後輸入名稱和密碼. 如果始終彈出"不允許請求的署名訂閱",不能進到選擇登陸模式的介面,退出訂閱 嚮導,在企業管理器中,進入發行伺服器,複製-右鍵-"配置發布、訂閱伺服器和分 發"-訂閱伺服器-添加訂閱伺服器機器名和帳號,如果已經有了,直接確定下.再在 進訂閱伺服器訂閱就不會顯示不能署名訂閱了. 以上過程可能發現明明訂閱伺服器名字已經在發行伺服器添加了,還是出現這個問 題,就一定要在訂閱伺服器進入發行伺服器,然後添加訂閱伺服器的名字,為什麼會 這樣,可能是在發行伺服器指定了改訂閱伺服器的名字後,但訂閱伺服器沒有重新整理, 可以斷開一次訂閱伺服器和發行伺服器,再來訂閱,也可以解決. 4.提取訂閱已經建立好了,但訂閱狀態顯示"正在重試", 上次動作"進程未能串連
到subscriber SHD-SHD", 原因是我安裝sql後,曾經改過電腦的名字,改回SHD-SHD.(有的人是因為sql伺服器 連接埠修改過造成).還有可能是MSSQLserver和Sqlserveragent服務沒有用域使用者身 份啟動並運行, (於是我把B加到A所在的域,並且把A的管理使用者加到B的SQLServerAgent服務的 登陸使用者中,) 5.但訂閱狀態顯示"請求共用代理程式失敗", "進程未能串連到distributor ...",懷疑是訂閱設定時,串連 發行集資料庫的帳號有問題,在訂閱(右鍵)的記錄中查看具體的錯誤原因.帳號 正確後,記錄又說 訂閱端機器沒有配置,於是全部刪除訂閱和發布來試,結果發布確無法刪除發布,出 現20015錯誤,原來是訂閱 的機器通過區域網路,開啟了快照的共用目錄沒有關閉,關閉後,成功刪除發布. 如果還無法刪,乾脆把共用的快照目錄不共用,再刪,然後重新設定快照目錄共用 . 6.訂閱伺服器上的訂閱又無法刪除了,提示"無法更新或刪除從 MSX 伺服器上 發起的作業", 這是因為:電腦更換名之後就出現這種錯誤,自己不能修改自己建立的作業。 解決辦法: 在msdb的sysjobs表中把originating-server中的值全部改為更改後的電腦名稱
update msdb..sysjobs set originating_server = '現伺服器名'
有時可以到管理-sql server代理--作業,查看更多情況和操作. 7.全部重新建立發布和訂閱成功,執行卻又出現"發布內容 null"的提示,是因為訂 閱伺服器沒有串連到散發者,(1)SQLSERVERAGENT沒啟動.(2)MSSQLserver和 Sqlserveragent服務必須以域使用者身份啟動並運行, 以上問題檢查中隨時注意SQLSERVERAGENT(控制台-管理-服務)服務是否已經啟 動, 8.訂閱伺服器已經登陸上發行伺服器,但在建立訂閱時看不見該伺服器的發布,是 因為沒有配置分發 伺服器,工具-複製-"配置發布、訂閱伺服器和分發",再檢查SQLSERVERAGENT是否 運行. 然後再在發布屬性-發行集存取清單,添加訂閱伺服器登陸的登陸名,訂閱端終於看見 發布了. 9.發布 'xxx' 的初始快照集尚不可用。 保證SQLSERVERAGENT已經運行, 複製=》發布內容=》發布項目mytab=》右擊右側的訂閱=》重新初始化 如果還不行, 複製監視器--發行伺服器--xxx--發布的項目--快照,看到 進程未能建立檔案“\\XXZ\SQLPUB\unc”,到該檔案夾重新設定sql的帳號對該文 件夾許可權為"完全". 10.訂閱端產生 "快照尚不可用 發生作業系統錯誤 53",訂閱伺服器帳號訪問快照 檔案 夾出許可權不夠,分配許可權,還有檢查防火牆,被禁止了訪問. 11.有個表無法發布,選擇框顯示紅叉,沒有主鍵的表無法發布. 12.進程未能從表“[dbo].[syncobj_0x3745373834413345]”向外大量複製。 在寫 BCP 資料檔案時發生 I/O 錯誤(源: ODBC SQL Server Driver (ODBC); 錯 誤代碼: 0) 解決方案:就是字元類型全部改為n類型的解決問題(char-nchar,varchar- nvarchar,ntext). 13、在資料發布時報如下錯誤資訊: 在BCP資料檔案中遇到意外的EOF(源:ODBC SQL Server Driver(ODBC):錯誤碼 :S1000) 這是因為資料庫中含有TEXT或nTExt或Image欄位引起的,只要在某項發布 屬性頁面中選擇<快照>-<快照格式>-<字元模式格式>,即可解決該問題. 14、另外,在建資料發布時,報如下錯誤: 違反了Primary Key約束'PK_@snapshot_seqnos_7fab3fda'.不能在 對象'#7EB71BA1'中插入重複鍵. (源:zzb_stockserver(資料來源);錯誤碼:2627) 這是因為在建發布時,資料庫資料正在執行插入或修改動作引起的,只要該 發布的快照重新運行一下即可。 15、對某些大型資料表無法產生快照的問題,資料庫報如下錯誤: 進程未能從表"[dbo].[syncobj_0x3436383044343035]"向外大量複製 ,在寫 BCP 資料檔案時發生 I/O 錯誤(源: ODBC SQL Server Driver (ODBC); 錯誤碼: 0) 這是因為該表有問題或表資料太大造成的,可用如下方法試著解決一下: a、用DBCC checktable 對該表檢查一下,資料表是否有問題,然後再試一 下重建資料快照。 b、如果上述問題仍無法解決,可以用資料匯出功能將資料表導到訂閱服務 器中。 c、然後重建一個針對該資料表的資料發布,選擇不產生快照功能,然後運 行下述問題4的解決方案,解決出現的問題。 16、在建立訂閱時,選擇不初始化訂閱者資料表,則在訂閱伺服器不產生相應的 複製存貯過程,運行該發布時,會報如下錯誤: 未能找到存貯過程'sp_MSupd_XXX'... 原因如下: Problem Deion : ====== 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 subion, 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_publicationcustomprocs 'pulication_name'" to create the s of those three system stored procedures. Then we run these s in the subscribing database. The problem will be resolved. 解決方案: 在發行伺服器上運行如下命令:sp_publicationcustomprocs 'xxxx', 其中 xxxx為發布名稱,該命令會產生建立上述三個存貯過程的指令碼,然後在訂閱服務 器運行產生三個存貯過程即可。 17、在訂閱資料時,發生如下錯誤: 該訂閱已標記為不活動,必須重新初始化該訂閱。需要刪除並重新建立 NoSync 訂閱。 (源: zzb_stockserver (資料來源); 錯誤碼: 21074) 解決方案: 在發行伺服器上,選擇某項發布,在屬性-》訂閱-》重新初始化。可以解決上 述問題 18、在資料發布時,發生如下錯誤: 不能在具有唯一索引 'PK_tbMeetingMemo' 的對象 'tbMeetingMemo' 中插入 重複鍵的行。 (源: ZZB-XHSTOCK (資料來源); 錯誤碼: 2601) 原因:可能是在發布該表時,在不同的發布中存在多次發布該表的情況. 解決方案: a、查明是否有多次發布該表的情況. 在發行伺服器的發行集資料庫中用運行如下SQL語句:select * from sysarticles order by dest_table 查看在dest_table列中是否出現多次該表的資訊,如是,則說明該表已被多次 發布,可以用下一步中說明的方法來查看是哪些發布發布了該表。 b、運行語句:select * from syspublications,查看pubid與上述資訊相同的 pubid的內容,則就能確定是何種發布發布了相同的資料表。 c、找到了發布後,如果是增加資料表,則不用刪除該發布下的所有訂閱,如果是 去除發布的資料表,則需刪除該發布下的所有的訂閱資訊,修改相應的發布內容 ,重新制定相應的訂閱. 19.建立發布,14294錯誤,"請提供@job_id標識作業", 是因為你刪除了以前系統自動產生的作業。方法:工具-複製--禁用發布,重新設定 發布、訂閱伺服器和分發,完成後,發布的資料庫顯示為一個手型的共用表徵圖,再創 建發布 20.訂閱和發布都刪除完了,但禁用發布不成功,提示:無法除去分發資料 庫'distribution',該資料庫正在使用.停止資料庫,再啟動資料庫,再禁止發布. 21.配置發布和分發嚮導,最後完成時錯誤18481:配置散發者:未能串連到 伺服器,因為distributor_admin未在該伺服器上定義為遠程登入 你肯定在裝完SQL SERVER以後,改了電腦名稱,雖然sql server 還可以用,但一用 複製時,SQL SERVER讀取了舊的電腦執行個體名,不信,你試試 select @@SERVERNAME 顯示出來的,肯定不是你現在的電腦名稱. 於是,你用 sp_dropserver <(用select @@SERVERNAME顯示出來的舊名)> go sp_addserver <你現在的電腦名稱>, LOCAL go 例如:sp_dropserver 'E0184D34429345F\SQL2K' go sp_addserver 'deboywang\SQL2K', LOCAL go 重啟sql server服務,問題就可以解決了 除此之外,如果要修改@@Servername還可以使用下面的方法: 1. exec sp_helpserver 檢查你的server名字 2. 如果不正確,用exec sp_setnetname修正 另外,當註冊的名字改為其他名字後,註冊登記是成功的(在用戶端工具裡添加 了匿名),發布時就會出現這個問題。 22.強制訂閱無法刪除:在發行伺服器上先後刪除訂閱和發布後,訂閱伺服器上該強
制訂閱始終存在,無法刪除,問微軟支援,得結論: sp_removedbreplication 'job' JOB為訂閱複製的資料庫名稱。 其他問題: ============= 註: 0.不要去亂刪 管理--sql server代理--作業的內容.嚴格按照先刪訂閱,再刪發布 來進行. 1、如何忽略在分發中出現的報錯 a、在發行伺服器的管理-》SQL server代理->作業->中,找到該發布的發布 JOB,在屬性->步驟->2運行代碼程式-》編輯->命令->在命令語句最後添加 - skiperrors xxxx(xxxx是分發時報的錯誤號碼) , 指的是忽略該錯誤的意思。 b、然後重新啟動分發引擎. 2.如何輸出出錯的資訊? 在待輸出出錯資訊的JOB命令最後加入 -Output c:\temp\error.txt, -Output 是命令,後面是待輸出的檔案路徑和檔案夾名. ================ 因為該發布不允許使用可更新的訂閱,當 IDENTITY 列被傳輸到訂閱伺服器時, 不會傳輸 IDENTITY 屬性。(例如,在發行伺服器上定義為 INT IDENTITY 的列 在訂閱伺服器上將定義為 INT。) 如果想將 IDENTITY 屬性傳輸到訂閱表,則必須進行如下操作: ? 使用 IDENTITY 屬性和 NOT FOR REPLICATION 選項手工建立訂閱表。您 可以通過讓 SQL Server 在應用快照之前執行自訂指令碼來執行該操作。若要指 定自訂指令碼,請先建立發布,再建立指令碼,然後在發布屬性的“快照”選項卡 上輸入該指令碼的名稱。 ? 設定名稱衝突項目屬性,以便 SQL Server 在訂閱伺服器上應用快照時不 會除去現有的表。該屬性在項目屬性的“快照”選項卡上。 下列發行表包含“標識”列: [dbo].[BookIndex] =================== SQL Server 要求發布的預存程序所引用的所有對象(如表和使用者定義函數)在訂 閱伺服器上都可用。如果引用的對象在此發布中未作為項目發布,則它們必須在 訂閱伺服器上手工建立。 在此發布中發布了下列預存程序: [dbo].[getChaNameList] [dbo].[setUpWebsite] |