Задача мониторить цепочку lsn при работе лог шипинга. Скрипт смотрит в папку куда бэкапятся trn берет из них данные и сравнивает их. если есть разрыв оповещает пользователей
DECLARE @path NVARCHAR(255) DECLARE @temp NVARCHAR(255) DECLARE @trn NVARCHAR(MAX) SET @path = N'\\ho_report\h$\trn бэкап\' -- сетевой путь папки с трнками IF OBJECT_ID('tempdb..#x') IS NOT NULL DROP TABLE #x; CREATE TABLE #x ( NAME NVARCHAR(255) NOT NULL ,depth INT NOT NULL ,IsFile BIT NULL ) IF OBJECT_ID('tempdb..#y') IS NOT NULL DROP TABLE #y; ----Создаем временную таблицу для команды RESTORE HEADERONLY в курсоре. Внимание!!!! только для sql 2005, в 2012 добавленно еще одно поле и в столбце Compressed тип данных BYTE(1)------- ---Важно, какой версии инстанс выполняет запрос, а не откуда---- CREATE TABLE #y ( BackupName NVARCHAR(128) ,BackupDescription NVARCHAR(255) ,BackupType SMALLINT ,ExpirationDate DATETIME ,Compressed TINYINT ,Position SMALLINT ,DeviceType TINYINT ,UserName NVARCHAR(128) ,ServerName NVARCHAR(128) ,DatabaseName NVARCHAR(128) ,DatabaseVersion INT ,DatabaseCreationDate DATETIME ,BackupSize NUMERIC(20 ,0) ,FirstLSN NUMERIC(25 ,0) ,LastLSN NUMERIC(25 ,0) ,CheckpointLSN NUMERIC(25 ,0) ,DatabaseBackupLSN NUMERIC(25 ,0) ,BackupStartDate DATETIME ,BackupFinishDate DATETIME ,SortOrder SMALLINT ,[CodePage] SMALLINT ,UnicodeLocaleId INT ,UnicodeComparisonStyle INT ,CompatibilityLevel TINYINT ,SoftwareVendorId INT ,SoftwareVersionMajor INT ,SoftwareVersionMinor INT ,SoftwareVersionBuild INT ,MachineName NVARCHAR(128) ,Flags INT ,BindingID UNIQUEIDENTIFIER ,RecoveryForkID UNIQUEIDENTIFIER ,Collation NVARCHAR(128) ,FamilyGUID UNIQUEIDENTIFIER ,HasBulkLoggedData BIT ,IsSnapshot BIT ,IsReadOnly BIT ,IsSingleUser BIT ,HasBackupChecksums BIT ,IsDamaged BIT ,BeginsLogChain BIT ,HasIncompleteMetaData BIT ,IsForceOffline BIT ,IsCopyOnly BIT ,FirstRecoveryForkID UNIQUEIDENTIFIER ,ForkPointLSN NUMERIC(25 ,0) ,RecoveryModel NVARCHAR(60) ,DifferentialBaseLSN NUMERIC(25 ,0) ,DifferentialBaseGUID UNIQUEIDENTIFIER ,BackupTypeDescription NVARCHAR(60) ,BackupSetGUID UNIQUEIDENTIFIER ) INSERT #x EXECUTE MASTER.dbo.xp_dirtree @path ,1 ,1 DECLARE @cur_1 CURSOR SET @cur_1 = CURSOR FORWARD_ONLY FOR SELECT [NAME] FROM #x AS x ORDER BY x.Name OPEN @cur_1 FETCH NEXT FROM @cur_1 INTO @temp WHILE @@FETCH_STATUS = 0 BEGIN SET @trn = 'RESTORE HEADERONLY FROM DISK =''' + @path + @temp + ''' WITH NOUNLOAD' INSERT INTO #y EXEC (@trn) FETCH NEXT FROM @cur_1 INTO @temp END CLOSE @cur_1 DEALLOCATE @cur_1 GO DECLARE @templsn NUMERIC(25 ,0) DECLARE @lastlsn NUMERIC(25 ,0) DECLARE @firstlsn NUMERIC(25 ,0) DECLARE @cur_2 CURSOR SET @cur_2 = CURSOR FORWARD_ONLY FOR SELECT y.FirstLSN ,y.LastLSN FROM #y AS y ORDER BY y.BackupStartDate OPEN @cur_2 FETCH NEXT FROM @cur_2 INTO @firstlsn, @lastlsn WHILE @@FETCH_STATUS = 0 BEGIN SET @templsn = ( SELECT @lastlsn ) FETCH NEXT FROM @cur_2 INTO @firstlsn, @lastlsn IF @@FETCH_STATUS <> 0 BEGIN PRINT N'последняя запись' BREAK END IF @templsn != @firstlsn BEGIN PRINT N'Бляя!!!' -- сюда вставить оповещение BREAK END ELSE PRINT N'norm' END CLOSE @cur_2 DEALLOCATE @cur_2 --SELECT * FROM #y AS y --SELECT @templsn
Similar Posts:
- Проверка доступности линкованных серверов
- Сжать лог у всех баз на сервере
- Как сделать бэкап множества баз mssql на сетевое хранилище с созданием папок под бэкап. И после удалить эти базы.
- ресторинг n баз из одного бэкапа под разными именами
- Как добавить права чтения или записи на базу, сразу многим пользователям.