--首先,创建一个演示用的数据库(主数据库)
CREATE DATABASE Db_test
ON
( NAME = Db_test_DATA,
FILENAME = 'c:\Db_test.mdf' )
LOG ON
( NAME = Db_test_LOG,
FILENAME = 'c:\Db_test.ldf')
GO
--对数据库进行备份
BACKUP DATABASE Db_test TO DISK='c:\test_data.bak' WITH FORMAT
GO
--把数据库还原成备用数据库(演示主数据库与这个备用数据库之间的同步)
RESTORE DATABASE Db_test_bak FROM DISK='c:\test_data.bak'
WITH REPLACE,STANDBY='c:\db_test_bak.ldf'
,MOVE 'Db_test_DATA' TO 'c:\Db_test_data.mdf'
,MOVE 'Db_test_LOG' TO 'c:\Db_test_log.ldf'
GO
--启动 SQL Agent 服务
EXEC master..xp_cmdshell 'net start sqlserveragent',no_output
GO
--1. 如果主数据库损坏,无法备份出最新的日志,可以直接使用下面的语句使备用数据库可读写(丢失最近一次日志还原后的所有数据)。
--RESTORE LOG Db_test_bak WITH RECOVERY
--2. 如果主数据库可以备份出最新日志,则可以使用下面的语句。
--先备份主数据库的最新的事务日志
--BACKUP LOG Db_test TO DISK=''c:\test_log.bak'' WITH FORMAT
--再在备用数据库中恢复最新的事务日志,并且使备用数据库可读写(升级为主数据库)
--RESTORE LOG Db_test_bak FROM DISK='c:\test_log.bak'
当你试图删除或者变更一个table时,出现以下错误
Server: Msg 3724, Level 16, State 2, Line 1
Cannot drop the table 'object_name' because it is being used for replication.
比较典型的情况是该table曾经用于复制,但是后来又删除了复制
处理办法:
select * from sysobjects where replinfo >'0'
sp_configure 'allow updates', 1
go
reconfigure with override
go
begin transaction
update sysobjects set replinfo = '0' where replinfo >'0'
commit transaction
go
rollback transaction
go
sp_configure 'allow updates', 0
go
reconfigure with override
go
疑问:
在合并复制配置完全后,如果同步代理停止了。我要在程序中去重新启动合并复制的同步代理。请问使用什么命令或存储过程呢?
解决办法:(朱二)
sp_start_job
指示 SQL Server 代理程序立即执行作业。
示例
下例启动名为 Nightly Backup 的作业。
USE msdb
EXEC sp_start_job @job_name = 'Nightly Backup'