天天看点

数据库容灾软件测试计划

  • 测试目的
  1. 验证Beedup对SQL Server2008及以上版本的数据库实时复制、数据容灾功能。
  2. 了解Beedup技术实现方式,依赖的运行环境,为制定容灾方案提供参考。
  • 测试目标
  1. Beedup全量初始化复制、实时增量复制功能
  2. DDL复制支持,支持角色、用户、架构、登录用户、表 (列定义 主外键 索引)、视图、存储过程、函数、触发器等对象复制
  3. Beedup对主库的无侵入部署运行,不影响生产库的正常运行
  4. 直观简洁的配置操作,最小化维护成本
  • 测试环境
  1. 系统环境
  1. 主服务器:
  • 操作系统 Win Server 2008
  • 数据库版本Microsoft SQL Server 2008 R2 Microsoft Corporation  Enterprise Edition (64-bit)
  • 准备测试样本数据库,库中包含测试表及测试数据
  1. 从服务器:
  • 操作系统 Win Server 2008
  • 数据库版本Microsoft SQL Server 2008 R2 Microsoft Corporation  Enterprise Edition (64-bit)
  • 创建测试数据库,无需建表及其它对象
  1. Beedup服务器
  • 操作系统 Win Server 2008
  1. 复制条件
  1. 主库恢复模式必需为完整,并在设置为完整模式后做过整库备份
  2. 主库登录用户具有读取数据库字典信息及事务日志的权限,建议用SA
  3. 从库登录用户具有读取数据库字典信息及执行DDL(创建或删除角色、用户、架构、表、视图、存储过程、函数、触发器等对象)的权限,建议用SA
  4. Beedup服务器可以通过IP地址、端口、数据库名、用户、密码等连接信息登录主从数据库
  5. 主数据库关闭发布复制功能
  6. 主数据库关闭CDC功能
  • 测试步骤
  1. 在主库准备测试表及数据

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')

  1. 在Beedup中创建复制任务,配置复制的主从库连接参数,勾选【全量复制】。
  2. 启动复制任务,开始初始化全量复制。
  3. 全量复制完毕,随机抽样数据表,利用Beedup数据比对功能,效验全量复制数据一致性。
  4. 打开主库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

  1. 在主库创建表,并插入、修改、删除、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

  1. 主库创建主从外键依赖表,测试事务复制完整性

创建主表

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

  1. 在主库创建索引、视图、函数、过程、触发器等对象,查看对象是否可以正常复制到从库。

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

  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

继续阅读