sqlserver複製環境幾種常見錯誤的修復方法

2021-07-31 17:08:37 字數 3609 閱讀 4928

場景1:應用複製的刪除命令時在訂閱伺服器上找不到該行。

這種情況一般是發布庫存到分發庫丟包導致了訂閱伺服器上的記錄缺少,正好刪除缺少的記錄時觸發的故障。

解決方案

1 先檢視是哪個表哪條記錄缺少所致

usedistribution go

sp_browsereplcmds

'0x00000030000000ea000600000000'

,'0x00000030000000ea000600000000'

command 列內容 :   表示呼叫儲存過程sp_msdel_dbosn(555)時出錯,這是乙個刪除操作的儲存過程,刪除sn 表主鍵為555的記錄

2 消除故障

對於這種刪除訂閱伺服器上記錄而找不到此記錄的場景的解決方法是直接修改儲存過程sp_msdel_dbosn ,注釋儲存過程的報錯**

場景2:應用複製的更新命令時在訂閱伺服器上找不到該行。

這種情況一般是發布庫存到分發庫丟包導致了訂閱伺服器上的記錄缺少,正好更新缺少的記錄時觸發的故障。

解決方案

1 先檢視是哪個表哪條記錄缺少所致

usedistribution go

sp_browsereplcmds

'0x00000030000000f1000400000000'

,' 0x00000030000000f1000400000000'

command 列內容 :    表示呼叫儲存過程 [sp_msupd_dbosn](,n'12312     ',,111,0x02) 時出錯,這是乙個修改記錄操作的儲存過程,修改sn 表主鍵為111的記錄

2 消除故障

將發布伺服器上的記錄手動插入到訂閱伺服器上

insert

intosn(

字段,字段)

select欄位,

欄位from

[192.168.8.54]

.ss3000v3

.dbo.sn

wheresn.

id=111

場景3:主鍵衝突。

這種情況是訂閱庫中已經存在了主鍵為111的記錄,然後再向訂閱庫里插入主鍵111的記錄。

解決方法 刪除訂閱庫中主鍵為111的記錄。

場景 4

1 訊息

15466

,級別16

,狀態2

,過程sp_addlinkedsrvlogin

,第91 行

解密過程中出錯。 訊息

15185

,級別16

,狀態1

,過程sp_addlinkedsrvlogin

,第98 行

沒有從遠端伺服器

'repl_distributor'

對映到本地使用者

'(null)'

的遠端使用者

'distributor_admin'。

解決:use tempdb 

alter service master key force regenerate

場景 5

訊息18483,級別14,狀態1,第1 行

由於沒有在伺服器'mangotv'上將'distributor_admin'定義為遠端登入名,所以無法連線到該伺服器。請確保指定的登入名正確無誤

解決:

usemaster go

select

@@servername --資料庫當前機器名

select

serverproperty

('servername'

)  --查詢實際的機器名

ifserverproperty

('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'

endelse

print

'例項名與主機名一致,無需修改!'

場景6  刪除分發時

錯誤

:訊息21122

,級別16

,狀態1

,過程sp_dropdistributiondb

,第124 行

由於分發資料庫

'distribution'

當前正在使用中,因此無法將其刪除。

解決:檢視占用

distribution

的程序,kill

掉,再執行刪除

select

*from

sys.

sysdatabases

select

*from

sysprocesses

where

dbid

=8kill 65

use[master]

exec

sp_dropdistributor

@no_checks

= 1go

場景7 

訂閱初始化後,訂閱未初始化,檢視分發**的日誌,排查問題,一般是許可權不對

錯誤:

2014-03-18 03:02:20.022 狀態: 4096,**: 20024,文字: '初始化'。

2014-03-18 03:02:20.022 **正在執行。請使用複製監視器檢視此**會話的詳細資訊。

狀態: 0,**: 20011,文字: '程序無法在「win-ep8j9bj70mh」上執行「sp_replcmds」。'。

2014-03-18 03:02:20.022 程序無法在「win-ep8j9bj70mh」上執行「sp_replcmds」。

狀態: 0,**: 15517,文字: '無法作為資料庫主體執行,因為主體 "dbo" 不存在、無法模擬這種型別的主體,或您沒有所需的許可權。'。

2014-03-18 03:02:20.022 狀態: 0,**: 22037,文字: '程序無法在「win-ep8j9bj70mh」上執行「sp_replcmds」。'。

解決

主要是許可權不對

alter authorization on database::[

資料庫名

] to [sa]

use

資料庫名 go

sp_changedbowner sa

sql server複製程式設計

unit unit1 inte ce uses windows,messages,sysutils,variants,classes,graphics,controls,forms,dialogs,olectrls,sqlmergxlib tlb,stdctrls,buttons type tfor...

複製(1) SQLServer 複製簡介

sqlserver的複製技術最少從sqlserver2000時代已經出現,當初是為了分布式計算,不是為了高可用。但是到了今天,複製也成為了一種高可用技術,並且被廣泛使用。很多問題都通過複製得以解決。複製說白了就是一種發布 訂閱模式,但是這種模式並不容易理解。下面介紹一下複製技術的一些概念。提醒一下,...

SqlServer複製與建立

一,從sqlserver2000備份資料庫到sql2005時,需要新建乙個與原備份資料庫相同名稱的資料庫。如果需要恢復在原sql2000中資料庫關係圖時,需要執行以下操作 解決方法如下 1 設定相容級別為90 2005為90 2000為80 use master go exec dbo.sp dbc...