- 测试目的
- 验证Beedup对SQL Server2008及以上版本的数据库实时复制、数据容灾功能。
- 了解Beedup技术实现方式,依赖的运行环境,为制定容灾方案提供参考。
- 测试目标
- Beedup全量初始化复制、实时增量复制功能
- DDL复制支持,支持角色、用户、架构、登录用户、表 (列定义 主外键 索引)、视图、存储过程、函数、触发器等对象复制
- Beedup对主库的无侵入部署运行,不影响生产库的正常运行
- 直观简洁的配置操作,最小化维护成本
- 测试环境
- 系统环境
- 主服务器:
- 操作系统 Win Server 2008
- 数据库版本Microsoft SQL Server 2008 R2 Microsoft Corporation Enterprise Edition (64-bit)
- 准备测试样本数据库,库中包含测试表及测试数据
- 从服务器:
- 操作系统 Win Server 2008
- 数据库版本Microsoft SQL Server 2008 R2 Microsoft Corporation Enterprise Edition (64-bit)
- 创建测试数据库,无需建表及其它对象
- Beedup服务器
- 操作系统 Win Server 2008
- 复制条件
- 主库恢复模式必需为完整,并在设置为完整模式后做过整库备份
- 主库登录用户具有读取数据库字典信息及事务日志的权限,建议用SA
- 从库登录用户具有读取数据库字典信息及执行DDL(创建或删除角色、用户、架构、表、视图、存储过程、函数、触发器等对象)的权限,建议用SA
- Beedup服务器可以通过IP地址、端口、数据库名、用户、密码等连接信息登录主从数据库
- 主数据库关闭发布复制功能
- 主数据库关闭CDC功能
- 测试步骤
- 在主库准备测试表及数据
create table full_test(id int not null,name varchar(20) not null,birth datetime not null,intro varchar(100))
insert into full_test(id,name,birth) values(1,'john','2017-5-20')
insert into full_test(id,name,birth) values(2,'tom','2017-6-20')
insert into full_test(id,name,birth) values(3,'mike','2017-4-20')
- 在Beedup中创建复制任务,配置复制的主从库连接参数,勾选【全量复制】。
- 启动复制任务,开始初始化全量复制。
- 全量复制完毕,随机抽样数据表,利用Beedup数据比对功能,效验全量复制数据一致性。
- 打开主库SQL Server管理器,对某一张表进行 增删改以及TRUNCATE 数据操作,查看Beedup任务计数器及日志输出,确认相应操作复制完成。打开从库SQL Server管理器,查询从表对应数据,效验增量数据复制一致性。
insert into full_test(id,name,birth) values(4,'abc','2010-4-20')
update full_test set intro = 'dsafdsafafadsf' ,birth = '2005-5-20' where id = 1
delete from full_test where id = 2
truncate table full_test
- 在主库创建表,并插入、修改、删除、truncate数据,查看Beedup日志输出,确认软件在从库复制同样的操作;更改主库表字段,确认从库对应表字段发生同样更改;删除主库表,确认从库表也被删除。
create table emploee(id int not null,name varchar(20) not null,birth datetime not null,intro varchar(100))
alter table emploee add primary key (id)
insert into emploee(id,name,birth) values(1,'john','2017-5-20')
insert into emploee(id,name,birth) values(2,'tom','2017-6-20')
insert into emploee(id,name,birth) values(3,'mike','2017-4-20')
update emploee set intro = 'dsafdsafafadsf' ,birth = '2005-5-20' where id = 1
delete from emploee where id = 2
truncate table emploee
alter table emploee add note varchar(20) null
alter table emploee alter column name varchar(40)
alter table emploee drop column intro
drop table emploee
- 主库创建主从外键依赖表,测试事务复制完整性
创建主表
create table dbo.t_master(id BIGINT IDENTITY NOT NULL,name VARCHAR(50) NULL,address VARCHAR(50) NULL)
alter table dbo.t_master add primary key (id)
创建从表
create table dbo.t_slave(id BIGINT IDENTITY NOT NULL,name VARCHAR(50) NOT NULL,address VARCHAR(50) NULL,imp_id BIGINT NULL)
alter table dbo.t_slave add primary key (id)
创建外键
ALTER TABLE dbo.t_slave WITH CHECK ADD CONSTRAINT FK_t_slave_t_master FOREIGN KEY(imp_id)REFERENCES dbo.t_master (id)
批量插入数据
declare @count2 int
set @count2 = 1
begin
while @count2<=1000
begin
begin transaction
insert into dbo.t_master(name,address)
values('m_name_'+cast( @count2 as varchar),'m_address_'+cast( @count2 as varchar))
insert into dbo.t_slave(name,address,imp_id)
values('s_name_'+cast( @count2 as varchar),'s_name_'+cast( @count2 as varchar),@count2)
commit transaction
set @count2 = @count2 + 1
end
end
批量修改数据
declare @count2 int
set @count2 = 1
begin
while @count2<=100
begin
begin transaction
update dbo.t_master set name = 'm_name_upd_测试2',address = 'm_address_upd_测试' where id = @count2
update dbo.t_slave set name = 'm_name_upd_测试2',address = 'm_address_upd_测试' where id = @count2
commit transaction
set @count2 = @count2 + 1
end
end
批量删除数据
declare @count2 int
set @count2 = 1
begin
while @count2<=1000
begin
begin transaction
delete from dbo.t_slave where id = @count2
delete from dbo.t_master where id = @count2
commit transaction
set @count2 = @count2 + 1
end
end
- 在主库创建索引、视图、函数、过程、触发器等对象,查看对象是否可以正常复制到从库。
create UNIQUE NONCLUSTERED INDEX IX_full_test_id ON full_test (id)
create view v_full_test as select id,name from full_test
create function dbo.Csj
(@m_str varchar(80))
returns varchar(80) as begin
declare @i varchar(80)
if @m_str='0' set @i='A'
if @m_str='1' set @i='B'
return (@i)
end
alter function dbo.Csj
(@m_str varchar(80))
returns varchar(80) as begin
declare @i varchar(80)
if @m_str='1' set @i='修改'
if @m_str='0' set @i='B'
return (@i)
End
create procedure cc as select * from full_test
alter procedure cc as select id from full_test
create trigger tr_full_test on full_test for update as
begin
if update (id)
raiserror('操作错误',10,1)
rollback
end
EXEC sp_help 'ccff'
update full_test set id=6 where name = 'aaa'
alter trigger tr_full_test on full_test for update as
begin
if update (name)
raiserror('无法操作',10,1)
rollback
end
update full_test set name='abcd' where id=1
- 删除第7步主库创建的对象,查看从库对象是否可以自动删除。
drop index IX_full_test_id on full_test
drop view v_full_test
drop function dbo.Csj
drop procedure cc
drop trigger tr_full_test