Update:

For this problem, you can use following scripts to resolve it quickly.

Prot 1433, 1434: SQL Server DB replictaion requirest

Prot 4022: SSB requirest

Generately, 4022 port not enabled caused this problem occurs.

You should check you firewall role settings:

CMD-->type 'firewall.cpl'-->check 'Inbound Roles' above prots in results pane. And TCP, UDP protocol confugured.

Scripts:

 

ECHO Configure SQL Replication ports...
netsh advfirewall firewall add rule name=1433 protocol=TCP dir=in localport=1433 action=allow profile=any
netsh advfirewall firewall add rule name=1434 protocol=TCP dir=in localport=1434 action=allow profile=any
netsh advfirewall firewall add rule name=4022 protocol=TCP dir=in localport=4022 action=allow profile=any
netsh advfirewall firewall add rule name=1433 protocol=UDP dir=in localport=1433 action=allow profile=any
netsh advfirewall firewall add rule name=1434 protocol=UDP dir=in localport=1434 action=allow profile=any
netsh advfirewall firewall add rule name=4022 protocol=UDP dir=in localport=4022 action=allow profile=any

netsh advfirewall firewall add rule name=SQLServer protocol=UDP dir=in program="C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn\sqlservr.exe" action=allow profile=any
netsh advfirewall firewall add rule name=SQLServer protocol=TCP dir=in program="C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn\sqlservr.exe" action=allow profile=any
ECHO Finish

Done!

-----------------------------------------------------

 

最近工作中遇到一个问题,把安装好SCCM2012的环境做个快照还原之后发现job都没法工作了,在检查了之后(SCCM 2012 Console-> Monitoring-> Overview-> Site Hierarchy 和 Database Replication),发现是站点之间的的通信断掉了。连接正常的话是下面这样子:

如果站点之间的连接是虚线,而且带有红色的 叉号“X” 在上面,就说明连接断了。

我们也可以通过 Database repllication 里面看到详细的信息,做法是在 导航目录里选中 Database Replication, 在右侧的面板中选中你的 Primary Site, 下面就会有详细的状态信息:

问题是由于站点间的数据库数据不同步导致的。由于在SCCM 2012中使用了SQL Service Broker作为站点数据库之间复制(传送)数据,替代了上一个版本中CM 2007使用文件复制的方法。虽然 SQL Replication (SQL 复制)提高了可用性和效率,但是对用户来说,分析数据复制还是有难度的。

如何解决?

1. 使用 SCCM 2012 自带的 Replication Link Analyzer

     打开 SCCM 2012 Console-> Monitoring-> Overview-> Database Replication,找到出问题的站点,右键,选 Replication Link Analyzer,根据提示做操作,具体可以参考上面的链接。

2. 我遇到的情况,使用这个工具是解决不了的。它会告诉你关闭防火墙,尽管你把防火墙配置好了或者干脆关闭了,这个问题还是不能修复。这是为什么呢?

我们可以使用一个存储过程去查看问题到底发生在哪里?

    a. 打开CAS 数据库,执行一下查询语句   Exec spDiagDRS, 得到如下结果:

        Status 字段是Failed状态,说明同步出了问题。在这张示例图中,我的数据库之显示一个Failed, 一般情况下,红色标记的全部是 Failed。请注意图中橙色标记的地方,这些信息告诉我们,是哪些ReplicationGroup,哪个发送站点和接受站点之间出了问题。这些信息将会对你修复这个问题起到很大作用。

    b. 由上图得知,中央站点CAR 和主站点PE1 之间的数据同步问题出现在以下几个ReplicationGroup:

        Replication Configuration, Site Control Data, Configuration Data, Registration Data, CI_Comliance_Rule_Details。我们可以通过SQL 语句查询。

在 CAS db 上:

SELECT ID, ReplicationGroup, ReplicationPattern, TransportType, 0 from ReplicationData where ReplicationPattern='site'
在 Primary db 上:

SELECT ID, ReplicationGroup, ReplicationPattern, TransportType, 0 from ReplicationData where ReplicationPattern='global'

   c. 必杀技,直接初始化这两个站点之间同步出现异常的数据,使用下面的SQL语句。同样,需要在站点之间分开执行。

  -- On Primary

 EXEC spDrsSendSubscriptionInvalid 'CAR',
'PE1', 'Replication Configuration'

 EXEC spDrsSendSubscriptionInvalid 'CAR',
'PE1', 'Site Control Data'

 EXEC spDrsSendSubscriptionInvalid 'CAR',
'PE1', 'Configuration Data'

 EXEC spDrsSendSubscriptionInvalid 'CAR',
'PE1', 'Registration Data'

 EXEC spDrsSendSubscriptionInvalid 'CAR',
'PE1', 'CI_Compliance_Rule_Details'

 -- On CAS

 EXEC spDrsSendSubscriptionInvalid 'PE1',
'CAR', 'CI_Compliance_Rule_Details'

 EXEC spDrsSendSubscriptionInvalid 'PE1',
'CAR', 'Replication Configuration'

 EXEC spDrsSendSubscriptionInvalid 'PE1',
'CAR', 'Site Control Data'

 EXEC spDrsSendSubscriptionInvalid 'PE1',
'CAR', 'Configuration Data'

 EXEC spDrsSendSubscriptionInvalid 'PE1',
'CAR', 'Registration Data'

      d. 去看Logs里面看 rcmctrl.log, sender.log,你会发现数据开始同步了。 由于日志里有些信息不方便泄露,所以就没有截图了,你用Trace32打开之后,会看到Replication 的进程被处理,类似下面的log:

Successfully created BCP file [c:\SCCM_**\inboxes\rcm.box\6eddea14-7c0a-47af-afd4-b995f88e8e10\CI_ApplicationModelInfo.bcp] with rows [0] based on SQL query [SELECT CI_ID, NUMBEROFDEPLOYMENTTYPES, MANUFACTURER, SOFTWAREVERSION, TECHNOLOGY, FILETYPE, SOURCE_CI_UNIQUEID, SOUCE_CI_MODELNAME, HIDDENSUPERSEDEDAPP, HIDDEDBYSUPERSEDINGAPP, ISAUTOINSTALLENABLED, LASTREFERENCEDTIME, INTEND, LOGONREQUIREMENT, ROWVERSION~FROM CI_ApplicationModelInfo]

 

     e. 稍等一会,重新执行 Exec spDiagDRS语句,你会发现,Status字段已经是Active状态。当你再去查看站点层次和数据库复制的时候,它们的链接已经重新建立了起来。
 

  

 

    

 



 

    

 

 

 

 

posted on 2012-06-20 16:57  love-windbg  阅读(1430)  评论(0编辑  收藏  举报