私はDBAがいない小さな店の開発者で、SQL Server 2012を使用してログ配布を取得しようとしています。トランザクションシステムから新しいデータウェアハウスにレポートの負荷を軽減しようとしています。このデータベースをステージング領域として使用します。
ログ配布ウィザードを実行しましたが、主要なバックアップジョブとファイルコピージョブは毎回機能します。セカンダリリストアジョブがランダムに失敗するようです。
プライマリサーバーには、トランザクションログジョブが1つだけあります。差分バックアップは無効になっています(問題かどうかは不明です)が、完全バックアップは実行されます。
セカンダリサーバーは、メンテナンスプラン、バックアップ、アクティブユーザーのいないフレッシュインストールです。
バックアップを強制的に同期させる方法はありますか、または常に同期を維持することを保証しますか?
とても壊れやすいようです。お知らせ下さい。
以下の編集ログ:
*Starting transaction log copy.
Secondary ID: 'b58d7ce8-2fd7-4cec-b5bd-f3c5e5d3c0f7'
Retrieving copy settings.
Secondary ID: 'b58d7ce8-2fd7-4cec-b5bd-f3c5e5d3c0f7'
Retrieved copy settings.
Primary Server: '',
Primary Database: 'db', Backup Source Directory: '\\server\folder',
Backup Destination Directory: '\\server\folder',
Last Copied File: '\\server\folder\db_20160105070002.trn'
Starting transaction log restore.
Secondary ID: 'b58d7ce8-2fd7-4cec-b5bd-f3c5e5d3c0f7'
Retrieving restore settings.
Secondary ID: 'b58d7ce8-2fd7-4cec-b5bd-f3c5e5d3c0f7'
Copying log backup files.
Primary Server: 'server', Primary Database: 'db',
Backup Source Directory: '\\server\folder',
Backup Destination Directory: '\\server\folder'
Retrieved common restore settings.
Primary Server: 'server',
Primary Database: 'db',
Backup Destination Directory: '\\server\folder',
File Retention Period: 14400 minute(s)
Retrieved database restore settings.
Secondary Database: 'db',
Restore Delay: 10,
Restore All: True,
Restore Mode: Standby,
Disconnect Users: True,
Last Restored File: \\server\folder\db_20160105060002.trn,
Block Size: Not Specified,
Buffer Count: Not Specified,
Max Transfer Size: Not Specified
Disconnecting users.
Secondary DB: 'db'
Copying log backup file to temporary work file.
Source: '\\server\folder\db_20160105080001.trn',
Destination: '\\server\folder\db_20160105080001.wrk'
Renamed temporary work file.
Source: '\\server\folder\db_20160105080001.wrk',
Destination: '\\server\folder\db_20160105080001.trn'
Checking to see if any previously copied log backup files that are required by the restore operation are missing.
Secondary ID: 'b58d7ce8-2fd7-4cec-b5bd-f3c5e5d3c0f7'
The copy operation was successful.
Secondary ID: 'b58d7ce8-2fd7-4cec-b5bd-f3c5e5d3c0f7',
Number of log backup files copied: 1
An error occurred restoring the database access mode. (Alter failed for Database 'db'. )
The file '\\server\folder\db_20160105070002.trn' is too recent to apply to the secondary database 'db'.
(The log in this backup set begins at LSN 52498000002221000001, which is too recent to apply to the database. An earlier log backup that includes LSN 52498000002197900001 can be restored.
RESTORE LOG is terminating abnormally.)
Searching for an older log backup file.
Secondary Database: 'db'
Skipped log backup file. Secondary DB: 'EntRIS', File: '\\server\folder\db_20160105060002.trn'
Skipped log backup file. Secondary DB: 'EntRIS', File: '\\server\folder\db_20160105050001.trn'
Skipped log backup file. Secondary DB: 'EntRIS', File: '\\server\folder\db_20160105040001.trn'
Skipped log backup file. Secondary DB: 'EntRIS', File: '\\server\folder\db_20160105030001.trn'
Skipped log backup file. Secondary DB: 'EntRIS', File: '\\server\folder\db_20160105020000.trn'
Skipped log backup file. Secondary DB: 'EntRIS', File: '\\server\folder\db_20160105010001.trn'
Skipped log backup file. Secondary DB: 'EntRIS', File: '\\server\folder\db_20160105000001.trn'
Skipped log backup file. Secondary DB: 'EntRIS', File: '\\server\folder\db_20160104230001.trn'
Skipped log backup file. Secondary DB: 'EntRIS', File: '\\server\folder\db_20160104220001.trn'
Skipped log backup file. Secondary DB: 'EntRIS', File: '\\server\folder\db_20160104210001.trn'
Skipped log backup file. Secondary DB: 'EntRIS', File: '\\server\folder\db_20160104200001.trn'
Skipped log backup file. Secondary DB: 'EntRIS', File: '\\server\folder\db_20160104190004.trn'
Skipped log backup file. Secondary DB: 'EntRIS', File: '\\server\folder\db_20160104180000.trn'
Skipped log backup file. Secondary DB: 'EntRIS', File: '\\server\folder\db_20160104170002.trn'
Could not find a log backup file that could be applied to secondary database 'db'.
Deleting old log backup files. Primary Database: 'db'
The restore operation completed with errors. Secondary ID: 'b58d7ce8-2fd7-4cec-b5bd-f3c5e5d3c0f7'*
更新:クエリの下で実行すると、奇妙なトランザクションログのバックアップがあります(たぶん)
NULは表の内容です。なぜそれがNULLではないのか分かりません
これはバックアップ終了時間、デバイス、タイプです
2016-01-08 02:00:01.000 D:\ Folder\DB_20160108090001.trnログ
2016-01-08 01:00:01.000 D:\ Folder\DB_20160108080001.trnログ
2016-01-08 00:00:00.000 D:\ Folder\DB_20160108070000.trnログ
2016-01-07 23:46:41.000 NULログ
2016-01-07 23:41:07.000 {51C661F9-2DC2-4424-913F-B9CFADA69FEE} 1データベース
2016-01-07 23:00:01.000 D:\ Folder\DB_20160108060001.trnログ
とても壊れやすいようです。
ログシッピングは、SQL Server 2000(およびそれよりも古い)日以降にテストおよび証明されています。壊れにくい。
エラーを見てください...
最後に復元されたファイル:\ server\folder\db_20160105060002。trn、
ログ配布は復元を試みています
宛先: '\ server\folder\db_20160105080001。trn'
これは log sequence にギャップがあることを意味します。ログチェーンを壊しているアドホックログバックアップが発生している可能性があります。
私の回答を参照してください- ログ配布は追跡する方法を知っていますか 。
ユーザーをコピーのみのログバックアップに制限することもできます 。これにより、アドホックログバックアップがログチェーンを壊すことはありません。また、
@Spörri は、サードパーティのバックアップツールがSQLと対話できないように、SQL VSSライターサービスを無効にする有効なポイントを作成しました。 サードパーティのソフトウェアはときどき狂っている !
ログバックアップのギャップを見つけるには、 クエリの下 を使用できます。
SELECT
s.database_name,s.backup_finish_date,y.physical_device_name
FROM
msdb..backupset AS s INNER JOIN
msdb..backupfile AS f ON f.backup_set_id = s.backup_set_id INNER JOIN
msdb..backupmediaset AS m ON s.media_set_id = m.media_set_id INNER JOIN
msdb..backupmediafamily AS y ON m.media_set_id = y.media_set_id
WHERE
(s.database_name = 'databaseNamePrimaryServer')
ORDER BY
s.backup_finish_date DESC;
別の便利なクエリ:
-- http://sqlblog.com/blogs/tibor_karaszi/archive/2014/11/03/can-you-restore-from-your-backups-are-you-sure.aspx
-- modified by Kin to include backup start and finish dates
SELECT TOP(100)
database_name
,CASE bs.TYPE
WHEN 'D' THEN 'Full'
WHEN 'I' THEN 'Differential'
WHEN 'L' THEN 'Log'
WHEN 'F' THEN 'File or filegroup'
WHEN 'G' THEN 'Differential file '
WHEN 'P' THEN 'Partial'
WHEN 'Q' THEN 'Differential partial'
END AS backup_type
,bs.is_copy_only
,bs.is_snapshot
,bs.backup_start_date
,bs.backup_finish_date
,DATEDIFF(SECOND, bs.backup_start_date, bs.backup_finish_date) AS backup_time_sec
,mf.physical_device_name
,bs.database_name
FROM msdb.dbo.backupset AS bs
INNER JOIN msdb.dbo.backupmediafamily AS mf ON bs.media_set_id = mf.media_set_id
where database_name = 'master' -- change here for your database
ORDER BY backup_finish_date DESC;