应用alwayson后收拢数据信息库系统日志方式编码分析

难题叙述: 在应用了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方式开启 使用alwayson后收缩数据库日志方法代码解析 开启后,你可以见到SQLCMD指令是深灰色的。 使用alwayson后收缩数据库日志方法代码解析

相关阅读