难题叙述:
在应用了alwayson后,主从关系库即时同歩,基本原理是根据事务管理系统日志同歩的,因此导致主数据信息库的事务管理系统日志一直在应用,并且没法收拢主数据信息库的事务管理系统日志。
在主从关系库同歩时,收拢数据信息库不是起功效的。因为主数据信息库没法收拢,因此从数据信息库的系统日志也会一直跟随提高,导致硬盘室内空间一直提高。
大约的构思以下
根据脚本制作将alwayson从库,从能用性数据信息库是清除,便是撤销主从关系同歩,那样主库变为单库方式了。随后再收拢事务管理系统日志,收拢后再把主从关系数据信息库再加。
考虑到到有一点,实际操作中必须删掉从库上的数据信息库,为避免实际操作不正确,把主库的数据信息库删掉了,这一实际操作非常风险啊,因此将脚本制作分成三个。在2个设备上去回实际操作。
第一个脚本制作在db1上实行。
第二个脚本制作在db3上实行
第三个脚本制作在db1上实行
(这儿db1是主库,db3是以库。不必跟我说db2呢,由于建立时先建立的db2之后db2不太好删掉了。你依据你的具体状况更换就可以了了。)
待机会完善,或是再加分辨,能够考虑到将下列三个脚本制作生成一个脚本制作,随后一键实行,或是加到定时执行每日任务,每个月全自动实行一次。
下列脚本制作历经亲自测试能用
syncdb 为alwayson同歩的姓名,
DBSERVER1和DBSERVER3是主从关系数据信息库的名字。DBSERVER1主导库,DBSERVER3为从库。
:Connect DBSERVER1 -U sa -P ,请改动后边的登陆密码。
test为数据信息库名字。
1、撤销主从关系同歩
--- YOU MUST EXECUTE THE FOLLOWING SCRIPT IN SQLCMD MODE.
:Connect DBSERVER1 -U sa -P
USE [master]
ALTER AVAILABILITY GROUP [syncdb] REMOVE DATABASE [test];
GO
2 删掉从库上的数据信息库,在整理后,再加上上。
:Connect DBSERVER3 -U sa -P
USE [master]
DROP DATABASE [test]
GO
3.备份数据事务管理系统日志,收拢系统日志文档,加上从库数据信息库。
--- YOU MUST EXECUTE THE FOLLOWING SCRIPT IN SQLCMD MODE.
:Connect DBSERVER1 -U sa -P
USE [master]
BACKUP DATABASE [test] TO DISK = N'\\dbserver3\e$\share\test.bak' WITH COPY_ONLY, FORMAT, INIT, SKIP, REWIND, NOUNLOAD, COMPRESSION, STATS = 5
:Connect DBSERVER3 -U sa -P
RESTORE DATABASE [test] FROM DISK = N'\\dbserver3\e$\share\test.bak' WITH NORECOVERY, NOUNLOAD, STATS = 5
:Connect DBSERVER1 -U sa -P
BACKUP LOG [test] TO DISK = N'\\dbserver3\e$\share\test.trn' WITH NOFORMAT, NOINIT, NOSKIP, REWIND, NOUNLOAD, COMPRESSION, STATS = 5
:Connect DBSERVER3 -U sa -P
RESTORE LOG [test] FROM DISK = N'\\dbserver3\e$\share\test.trn' WITH NORECOVERY, NOUNLOAD, STATS = 5
:Connect DBSERVER3 -U sa -P
if (serverproperty('IsHadrEnabled') = 1)
and (isnull((select member_state from master.sys.dm_hadr_cluster_members where upper(member_name COLLATE Latin1_General_CI_AS) = upper(cast(serverproperty('ComputerNamePhysicalNetBIOS') as nvarchar(256)) COLLATE Latin1_General_CI_AS)), 0) 0)
and (isnull((select state from master.sys.database_mirroring_endpoints), 1) = 0)
begin
select @group_id = ags.group_id from master.sys.availability_groups as ags where name = N'yorkdb'
select @replica_id = replicas.replica_id from master.sys.availability_replicas as replicas where upper(replicas.replica_server_name COLLATE Latin1_General_CI_AS) = upper(@@SERVERNAME COLLATE Latin1_General_CI_AS) and group_id = @group_id
while @conn 1 and @count > 0
begin
set @conn = isnull((select connected_state from master.sys.dm_hadr_availability_replica_states as states where states.replica_id = @replica_id), 1)
if @conn = 1
begin
-- exit loop when the replica is connected, or if the query cannot find the replica status
break
waitfor delay '00:00:10'
set @count = @count - 1
end try
begin catch
-- If the wait loop fails, do not stop execution of the alter database statement
end catch
ALTER DATABASE [test] SET HADR AVAILABILITY GROUP = [syncdb];
在实行:Connect 指令前还记得把SQLCMD方式开启
开启后,你可以见到SQLCMD指令是深灰色的。
|