Kaspersky Security Centerを実行しているSQL Server 2008 R2 Expressデータベースがあり、どのような状況でインストールが行われたのかわかりませんが、データベースは複製されていると考えているようで、トランザクションログから領域を解放しません。例えば。:
USE master;
SELECT
name, log_reuse_wait, log_reuse_wait_desc, is_cdc_enabled
FROM
sys.databases
WHERE
name = 'KAV';
SELECT DATABASEPROPERTYEX('KAV', 'IsPublished');
戻り値:
name | log_reuse_wait | log_reuse_wait_desc | is_cdc_enabled
-----|----------------|---------------------|---------------
KAV | 6 | REPLICATION | 0
DATABASEPROPERTYEX('KAV', 'IsPublished')
----------------------------------------
0 [not published]
また、SSMSのReplication
セクションには何もリストされていません。
これまでのところ、Googleの結果から収集したいくつかのステートメントを試してみました。
USE KAV;
EXEC sp_repldone null, null, 0,0,1;
EXEC sp_removedbreplication KAV;
しかし、私は、このDBが複製されていると思わないようにするための運がありませんでした。
完全sys.databases
情報:
+-----------------------------------+------------------------------------------------------------+
| name | KAV |
| database_id | 5 |
| source_database_id | NULL |
| owner_sid | 0x0105000000000005150000004EB006B0C3554AB049CEA01BE8030000 |
| create_date | 2013-07-04 10:31:28.947 |
| compatibility_level | 90 |
| collation_name | Latin1_General_CI_AS |
| user_access | 0 |
| user_access_desc | MULTI_USER |
| is_read_only | 0 |
| is_auto_close_on | 0 |
| is_auto_shrink_on | 0 |
| state state_desc | ONLINE |
| is_in_standby | 0 |
| is_cleanly_shutdown | 0 |
| is_supplemental_logging_enabled | 0 |
| snapshot_isolation_state | 1 |
| snapshot_isolation_state_desc | ON |
| is_read_committed_snapshot_on | 1 |
| recovery_model | 1 |
| recovery_model_desc | FULL |
| page_verify_option | 2 |
| page_verify_option_desc | CHECKSUM |
| is_auto_create_stats_on | 1 |
| is_auto_update_stats_on | 1 |
| is_auto_update_stats_async_on | 0 |
| is_ansi_null_default_on | 1 |
| is_ansi_nulls_on | 1 |
| is_ansi_padding_on | 1 |
| is_ansi_warnings_on | 1 |
| is_arithabort_on | 1 |
| is_concat_null_yields_null_on | 1 |
| is_numeric_roundabort_on | 0 |
| is_quoted_identifier_on | 1 |
| is_recursive_triggers_on | 0 |
| is_cursor_close_on_commit_on | 0 |
| is_local_cursor_default | 1 |
| is_fulltext_enabled | 1 |
| is_trustworthy_on | 0 |
| is_db_chaining_on | 0 |
| is_parameterization_forced | 0 |
| is_master_key_encrypted_by_server | 0 |
| is_published | 0 |
| is_subscribed | 0 |
| is_merge_published | 0 |
| is_distributor | 0 |
| is_sync_with_backup | 0 |
| service_broker_guid | 19C05AF5-8686-4C27-BF7E-93E240DA953B |
| is_broker_enabled | 0 |
| log_reuse_wait | 6 |
| log_reuse_wait_desc | REPLICATION |
| is_date_correlation_on | 0 |
| is_cdc_enabled | 0 |
| is_encrypted | 0 |
| is_honor_broker_priority_on | 0 |
+-----------------------------------+------------------------------------------------------------+
また:
DBCC OPENTRAN;
No active open transactions.
DBCC SQLPERF(LOGSPACE);
KAV 171066 99.55339 0
EXEC sp_replcounters;
KAV 0 0 0 0x00000000000000000000 0x00000000000000000000
完全なデータとログのバックアップも実行しました。
veryの同様の状況でいくつかの投稿に出くわしましたが、与えられた解決策は、レプリケーションのパブリッシングとディストリビューションをセットアップしてから、もう一度削除することでした。ただし、これはExpress Editionなので、これらのオプションは表示されません。
私たちは主にLinuxショップであり、これが唯一のSQL Serverインスタンスです。他のすべてが失敗して実際のライセンスを取得できない場合は、Express以外のインスタンスにバックアップを復元し、パブリケーションをセットアップして削除してから、最後にExpressに復元してください。
同様の問題に直面しました。公開されたデータベースがServer1に保存されています。このデータベースは毎日Server2にバックアップおよび復元されます。
REPLICATIONのためログがいっぱいです
log_reuse_wait_desc
はREPLICATION
に設定されました。データベースを復元した後、パブリケーションを有効にして削除します。
USE MyDatabase
GO
-- 1.) enable publication for MyDatabase
EXEC sp_replicationdboption
@dbname = 'MyDatabase',
@optname = N'publish',
@value = N'true';
GO
-- 2.) remove publication from database. Use the PUBLICATION-name (not database name)
sp_removedbreplication 'Publ_MyDatabase','both'
-- 3.) disable publication for MyDatabase
EXEC sp_replicationdboption
@dbname = 'MyDatabase',
@optname = N'publish',
@value = N'false';
GO
-- Verify: log_reuse_wait_desc should have changed from REPLICATION to NOTHING
SELECT name, log_reuse_wait_desc, * FROM sys.databases WHERE name = 'MyDatabase'
このデータベースでダウンタイムが発生しても問題ありませんか?これはおそらく、レプリケートされたデータベースから復元されたか、サブスクライバーである可能性は低いですが、不適切に削除された可能性があります。エクスプレスからバックアップを作成し、スタンダードエディション以上に復元してから、レプリケーションを再度セットアップして削除することもできます。その後、標準からバックアップし、復元して表現することができます。上位エディションでデータベースの機能を有効にしない限り、ダウングレードの問題は発生しません。実際の停止の前にこれをテストして、ステータスが削除されることを確認し、スクリプトを作成してダウンタイムを最小限に抑えることができます。使用できる別のサーバーがない場合は、評価版を入手して、ローカルマシン、VM、元のマシン(可能な場合)、または見つけられる場所にインストールします。あなたが観察したように、あなたはエクスプレスで限られたオプションを持っています。
私はまったく同じ問題を抱えていました。 SQL Express DBがレプリケーションの一部になることはありませんでした。以前は、いくつかのDBCC checkdbコマンドで修復されていました。そして、いつか私たちはそれを発見しました
SELECT name, log_reuse_wait_desc
FROM sys.databases
理由として「REPLICATION」が示され、ログファイルが増加しています。
このtsqlを使用してレプリケーションを削除しました。
declare @db as varchar(100) = 'dbname'
exec sp_removedbreplication @db
これで解決し、ログを縮小できました。
データベースを公開しないように設定してみましたか?
use master
exec sp_replicationdboption @dbname = N'<DATABASENAME>', @optname = N'publish', @value = N'false'
GO
次に、ログをバックアップして何が起こるかを確認しますか?
編集1:次のt-sqlは何を返しますか?
-- Run on publisher database for Pub, subscriber information
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT sa.name AS ArticleName,
sp.name AS PublicationName,
d.datasource AS Distributor,
s.dest_db AS Destination_DB,
srv.srvname AS SubscriptionServer
FROM dbo.syspublications sp
LEFT JOIN
dbo.sysarticles sa
on sp.pubid = sa.pubid
LEFT JOIN
dbo.syssubscriptions s
on sa.artid = s.artid
LEFT JOIN
master.dbo.sysservers srv
on s.srvid = srv.srvid
OUTER APPLY
(
SELECT datasource
FROM master.dbo.sysservers
WHERE srvstatus & 8 <> 0
) d
私は以下を試します:
USE <database_name_here>
GO
EXEC sp_repldone
@xactid = NULL, @xact_segno = NULL, @numtrans = 0, @time = 0, @reset = 1
その後、後の投稿で提案されているように、データベースの個々のテーブルのレプリケーションの追加と削除を試すことができます。
SQL Serverで配布とレプリケーションがセットアップされていなくても、データベースが一時的にレプリケーションモードに切り替わっていました。
問題に使用した元のスクリプトが見つからなかったので、検索を実行して、MSDNで次のエントリを見つけました。
log_reuse_wait_desc =レプリケーション、トランザクションログは成長を停止しません
この問題には根本的な原因がいくつかあり、世界中で発生しています。
いい狩り!