SQLServer 以备份初始化订阅

原文:SQLServer 以备份初始化订阅

在创建事务复制时,如果发布数据库很大,使用快照初始化时,将等待很久,如果出现问题可能又得重新初始化。使用备份初始化会省很多时间,但是数据库在创建发布订阅期间不能访问。使用备份代替快照迁移数据,备份可以压缩或使用 FTP 传输,若在同一个机房,拷贝复制更快。

现在测试:

创建测试库(发布服务器)

--	创建测试库(发布服务器)
USE [master]
GO
CREATE DATABASE [PubDB]
ON  PRIMARY
(
	NAME = N‘PubDB‘,
	FILENAME = N‘D:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\PubDB.mdf‘ ,
	SIZE = 5120KB ,
	FILEGROWTH = 1024KB )
LOG ON
(
	NAME = N‘PubDB_log‘,
	FILENAME = N‘D:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\PubDB_log.ldf‘ ,
	SIZE = 1024KB ,
	FILEGROWTH = 10%)
GO

--	创建测试表(发布服务器)
USE [PubDB]
GO
CREATE TABLE [dbo].[PubTab](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[Name] [varchar](20) NOT NULL,
	[Value] [decimal](18, 4) NULL,
	CONSTRAINT [PK_PubTab] PRIMARY KEY CLUSTERED ([id] ASC),
) ON [PRIMARY]
GO

INSERT INTO [dbo].[PubTab]([name],[Value])
VALUES(‘aa‘,99),(‘bb‘,100)
GO

添加复制用的登录账户和数据库用户。订阅不是同一个实例的添加登录账户(发布服务器/订阅服务器)

--	添加复制用的登录账户和数据库用户。订阅不是同一个实例的添加登录账户(发布服务器/订阅服务器)
USE [master]
GO
CREATE LOGIN [ReplUser] WITH PASSWORD=N‘ReplUser‘, DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
ALTER SERVER ROLE [sysadmin] ADD MEMBER [ReplUser]
GO
USE [PubDB]
GO
CREATE USER [ReplUser] FOR LOGIN [ReplUser]
GO

创建发布(发布服务器)

创建完备份后,设置允许从备份文件初始化(发布服务器发布数据库)

--	允许从备份文件初始化(发布服务器发布数据库)
USE [PubDB]
GO
EXEC sp_changepublication
    @publication = N‘PublName‘,
    @property = N‘allow_initialize_from_backup‘,
    @value = true
GO

备份数据库(发布服务器)

USE [master]
GO
BACKUP DATABASE [PubDB]
TO  DISK = N‘D:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup\PubDB.bak‘
WITH NOFORMAT, NOINIT,  NAME = N‘PubDB-完整 数据库 备份‘, SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

还原最新的备份数据库,将作为订阅库(订阅服务器)

USE [master]
GO
RESTORE DATABASE [SubDB]
FROM  DISK = N‘D:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup\PubDB.bak‘
WITH  FILE = 1,
MOVE N‘PubDB‘ TO N‘D:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\SubDB.mdf‘,
MOVE N‘PubDB_log‘ TO N‘D:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\SubDB_log.ldf‘,
NOUNLOAD,  STATS = 5
GO

添加订阅,指定备份文件(发布服务器发布数据库)

USE [PubDB]
GO
EXEC sp_addsubscription
@publication = N‘PublName‘,
@subscriber = N‘HZC‘,
@destination_db = N‘SubDB‘,
@subscription_type = N‘Push‘,
@sync_type = N‘initialize with backup‘,
@backupdevicetype=‘disk‘,
@backupdevicename=‘D:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup\PubDB.bak‘

创建订阅后,更改订阅服务器连接账号

至此,发布订阅据配置完成了,现在看看表中的数据。

SELECT *  FROM [PubDB].[dbo].[PubTab]
SELECT *  FROM [SubDB].[dbo].[PubTab]

增加一行记录再查看,复制正常!

INSERT INTO [PubDB].[dbo].[PubTab]([name],[Value]) VALUES(‘cc‘,0)
GO

SELECT *  FROM [PubDB].[dbo].[PubTab]
SELECT *  FROM [SubDB].[dbo].[PubTab]

但是,当添加新表发布时,不能使用快照发布来同步了!~

创建测试表(发布服务器发布数据库),新表 identity 字段需要增加 NOT FOR REPLICATION

--	创建测试表(发布服务器发布数据库)
USE [PubDB]
GO
CREATE TABLE [dbo].[PubTab02](
	[ID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
	[Name] [varchar](20) NOT NULL,
	[Value] [decimal](18, 4) NULL,
	CONSTRAINT [PK_PubTab02] PRIMARY KEY CLUSTERED ([id] ASC),
) ON [PRIMARY]
GO

正常的添加发布(发布服务器发布数据库)

这时不能启用快照同步了,快照没有用。

右键发布的表查看创建表的结构(发布服务器发布数据库),接着到订阅服务器数据库执行。

USE [SubDB]
GO
CREATE TABLE [dbo].[PubTab02](
	[ID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
	[Name] [varchar](20) NOT NULL,
	[Value] [decimal](18, 4) NULL,
 CONSTRAINT [PK_PubTab02] PRIMARY KEY CLUSTERED
(
	[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

好了,添加算是完成了,现在测试添加数据(发布服务器发布数据库)

USE [PubDB]
GO
INSERT INTO [dbo].[PubTab02]([name],[Value]) VALUES(‘aa‘,99)
GO

SELECT *  FROM [PubDB].[dbo].[PubTab02]
SELECT *  FROM [SubDB].[dbo].[PubTab02]

若是添加 / 删除 字段,按正常添加 / 删除即可,直接在发布服务器数据库执行,如。

USE [PubDB]
GO
ALTER TABLE [dbo].[PubTab02] ADD InsertDate DATETIME NULL
GO

INSERT INTO [dbo].[PubTab02]([name],[Value],[InsertDate]) VALUES(‘aa‘,99,GETDATE())
GO

SELECT *  FROM [PubDB].[dbo].[PubTab02]
SELECT *  FROM [SubDB].[dbo].[PubTab02]

参考:

初始化事务订阅(不使用快照)

SQL Server 通过备份文件初始化复制

原文地址:https://www.cnblogs.com/lonelyxmas/p/8360748.html

时间: 2024-11-10 01:42:35

SQLServer 以备份初始化订阅的相关文章

通过备份初始化合并复制时的报错的解决

    由于关系数据库的机制要求合并复制数据同步时需要有良好的自治性,SQL Server的合并复制的应用场景相对比较少.一些典型的应用场景比如异地数据同步,跨洋的数据同步等.由于网络延时以及该种业务有相对比较大的数据独立性,因此在合并复制在某些场景会比较合适.     在一些情况下,合并复制如果由于某些原因坏掉,需要重新初始化,而由于网络带宽的限制,用快照重新初始化稍微大一点的库基本不现实,因此需要考虑使用通过备份初始化,在初始化过程中,我遇到了如下错误:   {call sp_MSsetco

SqlServer定时备份数据库和定时杀死数据库死锁解决

PS:Sqlserver 2008 R2,windows 8 64位 1.备份数据库 因为要备份,我们就要用到Sqlserver的代理,默认数据库的代理是不开启的.需要我们手动开启的. 执行备份数据库脚本,现在将脚本公布,其实将这一段代码中需要保存的文件路径和数据库名称替换一下就可以实现备份了.但是还没有达到定时备份的目的 ? 1 2 3 4 5 6 7 8 9 10 11 --自动备份并保存最近5天的SQL数据库作业脚本 宋彪 20130310 DECLARE @filename VARCHA

SQLServer 2008 R2 发布订阅配置指南

原以为配置SQLServer 2008 R2的发布订阅很简单,实际配置后才发现过程中有问题地方一直都没搞明白,最后经过几天的查找问题和实践,终于搞定了.现将过程记录如下. 一.发布服务器配置第一步:设置SQLAgent服务登录帐户为Administrators用户,设置后重新启动服务 第二步:在配置管理器里设置订阅服务器别名,设置后重起服务 注意32位和64位两处都要设置 第三步:右键点击本地发布,进入发布流程(保证sql服务器名称和系统服务器名称相同) 为发布的表单独建一个帐号 二.订阅服务器

SQLSERVER 差异备份、全备份

--exec BackUPDatabase_LeeHG语句参数说明: -- 示例:exec BackUPDatabase_LeeHG '参数一','参数二','参数三','参数四','参数五',' 参数六' -- 参数一:需要备份数据库的名称 -- 参数二:备份文件存放路径,可以是网络路径 -- 参数三:全备份时间 -- 参数四:全备份时间误差范围(小时) -- 参数五:参数三为网络路径时,访问网络路径的用户名,参数三为本地路径时可输入任意字符. -- 参数六:参数三为网络路径时,访问网络路径的

SqlServer & Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC)

原文:SqlServer & Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC) 在可更新订阅中,在订阅设置更新方法,将 "排队更新" 设置为 "立即更新" 接着在订阅数据库更新表数据,出错: 消息 21079,级别 16,状态 1,过程 sp_getpublisherlink,第 52 行 没有发布服务器的 RPC 安全信息,或该信息无效.请用 sp_link_publication 指定该信息. 消息 20512,级别 16,状态 1,

mysql 和 sqlserver中备份一张表的区别

sqlserver中备份一张表 SELECT * into qa_buglist_bak FROM qa_buglist 不管表的数据有多大,速度很快: mysql中上述语句就无效了,须得新建一张表,然后让此长表中新增数据 create table qa_buglist_bak like qa_buglist;insert qa_buglist_bak select * from qa_buglist; 如果原表中数据量大,就特别慢,很吃硬盘和CPU 刚刚看了下,也就800万行的数据.. 我应该

SqlServer 2008r2备份到共享磁盘

背景: 今天备份一个SQLServer库,本机空间不足:我就想着要备份到共享磁盘上.记录一下备忘. 环境:SQLServer2008R2_x64 步骤如下: 1. 启用xp_cmdshell 如果没有启用xp_cmdshell,请执行以下启用: EXEC sp_configure 'show advanced options', 1; RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;   2.创建映射 exec master

SqlServer自动备份、自动压缩、自动删除旧备份

准备工具: SqlServer2008 WinRar 1.给SqlServer设置维护计划定时备份 这个操作比较简单,按向导新增维护计划即可. 2.自动压缩脚本 c:\Progra~2\WinRar\winRar.exe a D:\bak\database_buckup_%date:~0,4%_%date:~5,2%_%date:~8,2% d:\bak\database_*%date:~0,4%_%date:~5,2%_%date:~8,2%_*.bak 备份文件的格式是:database_b

sqlserver 2008 备份恢复实战

一 内容说明 sqlserver数据库中最重要的是数据库备份和还原,当数据库出现灾难性破坏的时候,需要有最佳的恢复计划,恢复数据和恢复方案.对于已经实施完数据库备份的数据库,需要定期组织恢复演练,以便在灾难故障来临时,可以快速的恢复. 下面介绍了备份策略制定,恢复计划,还原计划. 还原主要有以下几种组合(根据自己实际情况选择): 完整恢复 完整恢复+差异恢复 完整恢复+差异恢复+日志事务恢复 二 策略制定 2.1 没有事务日志的情况 由于数据库数据量不是很大,数据库全备每天执行一次 数据库每各半