1
スクリプトはSQL Serverデータベースのバックアップを1つずつ(カーソルを使用して)処理し、すべてのデータベースが完了したら[成功]メールを送信します。すべての値を取得せずにカーソルを完了
カーソルコード:
SELECT Name
FROM sys.databases
WHERE Name NOT IN ('Master', 'tempdb')
ORDER BY Name
結果:20のデータベース
スクリプト日常は、すべての20個のデータベースの完了に成功メールを送信します。 今日、私はわずか9データベースの完了と成功メールを持っています(しかし、私のSQL Serverにはまだ20のデータベースがあります)。
何が起こったのですか? 9個のDBだけでカーソルが完成したのはなぜですか?
スクリプトロジック:
IF (@BackupType = 'Differential' OR @BackupType = 'Trxlog')
BEGIN
DECLARE db_cursor CURSOR FOR
SELECT Name
FROM sys.databases
WHERE Name NOT IN ('Master', 'tempdb')
ORDER BY Name
END
ELSE
BEGIN
DECLARE db_cursor CURSOR FOR
SELECT Name
FROM sys.databases
WHERE Name NOT IN ('tempdb')
ORDER BY Name
END
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @DBName
WHILE @@FETCH_STATUS = 0
BEGIN
--Code for taking the backup
FETCH NEXT FROM db_cursor INTO @DBName
END
--Code for sending the [Success] mail
--
CLOSE db_cursor
DEALLOCATE db_cursor
いつでも再現できますか? ?私は次のステップだけでなく、ファイルやテーブルに各ステートメントの出力を記録すると思う場合は – TheGameiswar
成功/失敗を確認するために適切なブーレンを使用していますか? TheGameisWarのように、あなたのリストとスクリプトの実行(またはその失敗)の両方で一貫性をチェックします。 –
実際、あなたのコード例は間違っています。 IF、ELSEステートメントのコードはすべて同じです。何か不足していますか? –