none
sql server 2008 数据库镜像-主体,挂起,无法同步 RRS feed

答案

  • 问题解决了,大概步骤:备份主库,压缩日志,删掉备库,然后重建。

    自行替换库名和ip

    Mirror模式部署的TCM数据库log过大问题处理方法

    问题处理方法:

    1、 拆除mirror关系,缩减主数据库log

    登录主用DB所在VM(以数据库实例的主用状态为准,,打开查询分析器,(操作方法Start-->All program-->Microsoft SQL server complete-->Microsoft SQL server 2008 R2-->SQL server management studio在弹出的对话框中,server name输入一个点号即可,认证方式建议选择SQL,以sa登录 

    选择“New Query”,在空白对话框中输入以下命令:(TCM的数据库名称为ctms_terminal) 

    (以下所有的命令都是一次输入,执行之后需清空再执行下一条命令,按F5执行命令,任何步骤执行失败,第一时间联系研发 USE master

    select mirroring_state_desc, mirroring_role_desc, mirroring_witness_state_desc from sys.database_mirroring where database_id in(select dbid from master..sysdatabases where name = 'ctms_terminal') 

    这只是一个查询,看ctms_terminal数据库是否OK。此时下方执行结果显示应该是主用(Synchronized),已连接connected

     

    执行下面命令查询DBwitness服务器的地址

    use master

    select * from sys.database_mirroring

     

    执行后下方列表可查询到备DBwitness服务器的地址

    TCP://DBIP:5022,    TCP://WITNESSIP:5022

    再执行命令(保持在master界面下):

    Use master

    alter database ctms_terminal set partner off 

    执行成功,此时将拆除ctms_terminal数据库的mirror关系  选择左侧目录树的database 选择刷新,看到的现象就是ctms_terminal数据库没有后面那个Principal, synchronized 接下来执行: 

    Use master

    ALTER DATABASE ctms_terminal SET RECOVERY SIMPLE WITH NO_WAIT  ALTER DATABASE ctms_terminal SET RECOVERY SIMPLE  再执行:  USE ctms_terminal  DBCC SHRINKFILE (N'ctms_terminal_Log' , 11, TRUNCATEONLY)  执行成功,此时数据库日志文件将变小 进入D:\VDS_Database_PATH\VDS_DB_SAVE_PATH\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\ 下查看ctms_terminal_log大小,本案例由47.5G变为11.5M(数值据供参考)  USE master  ALTER DATABASE ctms_terminal SET RECOVERY FULL WITH NO_WAIT  ALTER DATABASE ctms_terminal SET RECOVERY FULL  最后三条命令的效果是恢复此前的DB模式  在主DB中输入以下语句查询TCM的连接程序

    use master

    exec sp_who

     

    执行之后在下面列表框中查找是否有连接 ctms_terminal 的后台程序,如果有,需要将其全部关闭才能进行下一步配置mirror关系的操作(实际操作中出现两个连接提示,但是无法知道是那个程序行为,关闭所有TC终端,连接依然存在,尝试跳过不理会后台连接程序,执行下一步重建主备用mirror关系操作成功。如果重建mirror失败,请联系研发

    备注:上述操作只需主用DB上执行,不用在备用DB上执行。

    2、 重建备用DB数据库和log

    登陆备用DB,同样的方法打开查询分析器以数据库实例的主用状态为准,)。

    直接将左侧目录的 ctms_terminal(restoring…….)右键删除,弹出窗口按照默认选择确定即可。

    进入D:\VDS_Database_PATH\VDS_DB_SAVE_PATH\

    MSSQL10_50.MSSQLSERVER\MSSQL\DATA\下查看ctms_terminalctms_terminal_log是否消失,磁盘占用率从原来的100%下降到3%左右。

     

    登陆主用DB 查询分析器

    确认主DB路径:D:\VDS_Database_PATH下面没有ctms_terminal.bakctms_terminallog.bak,文件如果存在,需要改名备份或者删除掉

     

    回到DB,在查询分析器里执行创建文件操作

     

    use master

    BACKUP DATABASE [ctms_terminal] TO DISK = N'D:\VDS_Database_PATH\ctms_terminal.bak' WITH NOFORMAT, NOINIT,  NAME = N'ctms_terminal-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

    GO

     

    D:\VDS_Database_PATH生成ctms_terminal.bak 文件。

     

    use master

    backup LOG ctms_terminal to Disk = 'D:\VDS_Database_PATH\ctms_terminallog.bak'

    GO

     

    D:\VDS_Database_PATH生成ctms_terminallog.bak 文件。

     

    将生成的两个文件拷贝到备用服务器。

    (运行输入\\172.17.251.182\d$可拷贝到备服务器同样路径下

     

     

    回到备DB,在查询分析器里执行恢复数据库操作:

    use master

    RESTORE DATABASE [ctms_terminal] FROM  DISK = N'D:\VDS_Database_PATH\ctms_terminal.bak' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  REPLACE,  STATS = 10

    GO

     

    再执行

    use master

    RESTORE LOG [ctms_terminal] FROM  DISK = N'D:\VDS_Database_PATH\ctms_terminallog.bak' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10

    GO

     

    重建备DB数据库选择备用服务器databases刷新一下状态,出现ctms_terminalRestoring….

     

     

    3配置mirror关系

     

    登陆备用DB加主DBPARTNER

    use master

    ALTER DATABASE ctms_terminal SET PARTNER = 'TCP://主用数据库服务器的IP地址:5022';

     

    登陆主用DB加备DBLICENSE服务器为PARTNER

    use master

    ALTER DATABASE ctms_terminal SET PARTNER = 'TCP://备用数据库服务器的IP地址:5022';

     

    再执行

    use master

    ALTER DATABASE ctms_terminal SET WITNESS = N'TCP://见证服务器的IP地址:5022';

     

    选择主用服务器databases刷新一下状态,现在恢复主用状态

    Ctms_terminalPrincipal/synchronized

    选择备用服务器databases刷新一下状态,现在恢复备用状态

    Ctms_terminalmirrorsynchronized/Restoring……

     

    问题处理完毕。

    检查桌面云业务运行是否正常。

    • 已标记为答案 jianbo.wang 2020年1月31日 11:52
    2020年1月31日 11:52

全部回复

  • Did you see any error in sql log on primary? Even db XenDesktop01 is in suspect status, should check sql log and windows event logs on primary. By the way, better to install sql2k8r2 sp4 on both.
    2019年4月17日 13:50
  • 检查 SQL Server 日志
    2019年4月18日 1:16
  • Hi,

    你可以展示主体服务器和镜像服务器上的error log中的错误信息嘛?

    Best regards,

    Dedmon Dai



    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com

    2019年4月18日 7:48
  • 大神,问题解决没有,我们也是,相同的环境Citrix xendesktop,镜像数据库同步挂起。重新做了一个镜像数据库也出现的相同的情况。
    2019年6月27日 3:09
  • 抱歉,怎么看日志?
    2020年1月23日 8:40
  • 没有解决啊,倒是能用,就是单节点,不稳定,时不时的就断一次业务。
    2020年1月23日 8:41
  • 抱歉,怎么看日志?
    2020年1月23日 8:42
  • sorry , where is the log ? 
    2020年1月23日 8:42
  • You can look at sql log in SSMS.
    2020年1月23日 18:28
  • thanks
    2020年1月31日 11:10
  • 问题解决了,大概步骤:备份主库,压缩日志,删掉备库,然后重建。

    自行替换库名和ip

    Mirror模式部署的TCM数据库log过大问题处理方法

    问题处理方法:

    1、 拆除mirror关系,缩减主数据库log

    登录主用DB所在VM(以数据库实例的主用状态为准,,打开查询分析器,(操作方法Start-->All program-->Microsoft SQL server complete-->Microsoft SQL server 2008 R2-->SQL server management studio在弹出的对话框中,server name输入一个点号即可,认证方式建议选择SQL,以sa登录 

    选择“New Query”,在空白对话框中输入以下命令:(TCM的数据库名称为ctms_terminal) 

    (以下所有的命令都是一次输入,执行之后需清空再执行下一条命令,按F5执行命令,任何步骤执行失败,第一时间联系研发 USE master

    select mirroring_state_desc, mirroring_role_desc, mirroring_witness_state_desc from sys.database_mirroring where database_id in(select dbid from master..sysdatabases where name = 'ctms_terminal') 

    这只是一个查询,看ctms_terminal数据库是否OK。此时下方执行结果显示应该是主用(Synchronized),已连接connected

     

    执行下面命令查询DBwitness服务器的地址

    use master

    select * from sys.database_mirroring

     

    执行后下方列表可查询到备DBwitness服务器的地址

    TCP://DBIP:5022,    TCP://WITNESSIP:5022

    再执行命令(保持在master界面下):

    Use master

    alter database ctms_terminal set partner off 

    执行成功,此时将拆除ctms_terminal数据库的mirror关系  选择左侧目录树的database 选择刷新,看到的现象就是ctms_terminal数据库没有后面那个Principal, synchronized 接下来执行: 

    Use master

    ALTER DATABASE ctms_terminal SET RECOVERY SIMPLE WITH NO_WAIT  ALTER DATABASE ctms_terminal SET RECOVERY SIMPLE  再执行:  USE ctms_terminal  DBCC SHRINKFILE (N'ctms_terminal_Log' , 11, TRUNCATEONLY)  执行成功,此时数据库日志文件将变小 进入D:\VDS_Database_PATH\VDS_DB_SAVE_PATH\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\ 下查看ctms_terminal_log大小,本案例由47.5G变为11.5M(数值据供参考)  USE master  ALTER DATABASE ctms_terminal SET RECOVERY FULL WITH NO_WAIT  ALTER DATABASE ctms_terminal SET RECOVERY FULL  最后三条命令的效果是恢复此前的DB模式  在主DB中输入以下语句查询TCM的连接程序

    use master

    exec sp_who

     

    执行之后在下面列表框中查找是否有连接 ctms_terminal 的后台程序,如果有,需要将其全部关闭才能进行下一步配置mirror关系的操作(实际操作中出现两个连接提示,但是无法知道是那个程序行为,关闭所有TC终端,连接依然存在,尝试跳过不理会后台连接程序,执行下一步重建主备用mirror关系操作成功。如果重建mirror失败,请联系研发

    备注:上述操作只需主用DB上执行,不用在备用DB上执行。

    2、 重建备用DB数据库和log

    登陆备用DB,同样的方法打开查询分析器以数据库实例的主用状态为准,)。

    直接将左侧目录的 ctms_terminal(restoring…….)右键删除,弹出窗口按照默认选择确定即可。

    进入D:\VDS_Database_PATH\VDS_DB_SAVE_PATH\

    MSSQL10_50.MSSQLSERVER\MSSQL\DATA\下查看ctms_terminalctms_terminal_log是否消失,磁盘占用率从原来的100%下降到3%左右。

     

    登陆主用DB 查询分析器

    确认主DB路径:D:\VDS_Database_PATH下面没有ctms_terminal.bakctms_terminallog.bak,文件如果存在,需要改名备份或者删除掉

     

    回到DB,在查询分析器里执行创建文件操作

     

    use master

    BACKUP DATABASE [ctms_terminal] TO DISK = N'D:\VDS_Database_PATH\ctms_terminal.bak' WITH NOFORMAT, NOINIT,  NAME = N'ctms_terminal-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

    GO

     

    D:\VDS_Database_PATH生成ctms_terminal.bak 文件。

     

    use master

    backup LOG ctms_terminal to Disk = 'D:\VDS_Database_PATH\ctms_terminallog.bak'

    GO

     

    D:\VDS_Database_PATH生成ctms_terminallog.bak 文件。

     

    将生成的两个文件拷贝到备用服务器。

    (运行输入\\172.17.251.182\d$可拷贝到备服务器同样路径下

     

     

    回到备DB,在查询分析器里执行恢复数据库操作:

    use master

    RESTORE DATABASE [ctms_terminal] FROM  DISK = N'D:\VDS_Database_PATH\ctms_terminal.bak' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  REPLACE,  STATS = 10

    GO

     

    再执行

    use master

    RESTORE LOG [ctms_terminal] FROM  DISK = N'D:\VDS_Database_PATH\ctms_terminallog.bak' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10

    GO

     

    重建备DB数据库选择备用服务器databases刷新一下状态,出现ctms_terminalRestoring….

     

     

    3配置mirror关系

     

    登陆备用DB加主DBPARTNER

    use master

    ALTER DATABASE ctms_terminal SET PARTNER = 'TCP://主用数据库服务器的IP地址:5022';

     

    登陆主用DB加备DBLICENSE服务器为PARTNER

    use master

    ALTER DATABASE ctms_terminal SET PARTNER = 'TCP://备用数据库服务器的IP地址:5022';

     

    再执行

    use master

    ALTER DATABASE ctms_terminal SET WITNESS = N'TCP://见证服务器的IP地址:5022';

     

    选择主用服务器databases刷新一下状态,现在恢复主用状态

    Ctms_terminalPrincipal/synchronized

    选择备用服务器databases刷新一下状态,现在恢复备用状态

    Ctms_terminalmirrorsynchronized/Restoring……

     

    问题处理完毕。

    检查桌面云业务运行是否正常。

    • 已标记为答案 jianbo.wang 2020年1月31日 11:52
    2020年1月31日 11:52