2012-01-18 4 views
0

私たちはすべてのデータベースをフルバックアップするために毎晩スクリプトを実行するようにジョブを設定しています。最近では、最後の2つのデータベースがスキップされることがありますが、すべてではないことがあります。バックアップを実行するときに各データベースの状態を挿入するトラッキングテーブルがあります。最後の2つのデータベースがスキップされた夜には、それらのデータベースの状態はトラッキングテーブルに記録されません。これらのデータベースがスキップされている理由を把握することはできません。これは私たちが使用しているバックアップスクリプトです:フルバックアップで特定のデータベースをスキップすることがある

DECLARE @dbname VARCHAR(100), 
@dbid INT, 
@rcmodel VARCHAR(50), 
@state VARCHAR(60), 
@date VARCHAR(50), 
@time VARCHAR(50), 
@sql VARCHAR(3000), 
@dir VARCHAR(1000), 
@path VARCHAR(100), 
@type VARCHAR(10) 

SET @path = 'E:\Backups\' 
SET @type = 'Full' 

SET @date = REPLACE(CONVERT(date,GETDATE(),101),'-','_') 
SET @time = REPLACE(CONVERT(TIME(0), GETDATE()),':','_') 
SET @path = @path + CONVERT(VARCHAR(30),@@SERVERNAME) + '\' + @type + '\' 

DECLARE BackupCur CURSOR FOR 

SELECT NAME, database_id, recovery_model_desc, state_desc 
FROM sys.databases 
WHERE NAME <> 'tempdb' 

OPEN BackupCur 

FETCH NEXT FROM BackupCur INTO @dbname, @dbid, @rcmodel, @state 

WHILE @@FETCH_STATUS = 0 
BEGIN 

INSERT INTO backuptrackingtable (db, statedesc, datecreated) 
values (@dbname, @state, GETDATE()) 

IF @type = 'Full' AND @state = 'ONLINE' 
BEGIN 
SET @dir = 'EXECUTE master.dbo.xp_create_subdir N'''[email protected][email protected]+'''' 
SET @sql = 'BACKUP DATABASE '[email protected]+' TO DISK =  N'''[email protected][email protected]+'\'[email protected]+'_'[email protected]+'.bak'' WITH NOFORMAT, INIT, SKIP, REWIND, NOUNLOAD, COMPRESSION' 
PRINT 'Backing up ' + @dbname 
EXEC (@dir) 
EXEC (@sql) 
END 
IF @type = 'Log' AND @dbid > 4 AND @rcmodel = 'FULL' AND @state = 'ONLINE' 
BEGIN 
SET @dir = 'EXECUTE master.dbo.xp_create_subdir N'''[email protected][email protected]+'''' 
SET @sql = 'BACKUP LOG '[email protected]+' TO DISK = N'''[email protected][email protected]+'\'[email protected]+'_'[email protected]+'__'[email protected]+'.bak'' WITH NOFORMAT, INIT, SKIP, REWIND, NOUNLOAD, COMPRESSION' 
PRINT 'Backing up ' + @dbname 
EXEC (@dir) 
EXEC (@sql) 
END 
FETCH NEXT FROM BackupCur INTO @dbname, @dbid, @rcmodel, @state 
END 

CLOSE BackupCur 
DEALLOCATE BackupCur 
+1

はhttp://dba.stackexchange.com/に属します。 – Aaron

答えて

0

考えられる3つの説明が考えられます。

  1. が存在しないので、彼らはsys.databasesに対するクエリから返されていないか、クエリを実行しているユーザーは、それらの権限を持っていません。
  2. 未処理のエラーは、処理前にスクリプトが異常終了したことを意味します。
  3. @@FETCH_STATUSは、キーセットカーソルが開いてからデータベースが削除されたため、いつでも-2を返します。

さらに調査するには、さらにログインする必要があります。いずれにしてもホイールを再発明するのではなく、メンテナンスプラン(エディションに依存)またはOla Hallengren's DB maintenance scriptsを使用することを検討することをお勧めします。

関連する問題