アサーションエラー

データベースに対して、SELECTやUPDATE、DELETEなどのコマンドを使用すると、以下のようなエラーがでることがあります。

Error: System.Data.SqlClient.SqlError: Location: p:\sql\ntdbms\storeng\drs\include\record.inl:1447
Expression: m_SizeRec > 0 && m_SizeRec <= MAXDATAROW
SPID: 56
Process ID: 3980

意味はわかりませんが、アサーションエラーというそうです。
データベースに何らかの不整合が発生しているようです。
これは、MSDE2000の場合、SP4で改善されているそうです。
しかし、MSDEのアップデートをしたくない場合もあります。
一番簡単に解決するのは、こうなる前のデータと入れ替えることです。
または、データを消します。
DELETEだとエラーになりますが、TRUNCATEなら多分大丈夫です。

データベースを修復することもできます。

osql -S [コンピュータ名] -E -n という感じにコマンドプロンプトでログインして、
DBCC CHECKDBコマンドを実行します。
3つのオプション、REPAIR_ALLOW_DATA_LOSS、REPAIR_FAST、EPAIR_REBUILDがありますが、
結局、REPAIR_ALLOW_DATA_LOSSじゃないと解決しないことが多いです。
ただ、データが消える可能性があるので注意してください。

DBCC CHECKDBコマンドはシングルユーザーモード以外では使用できません。

そのため、

シングルユーザーモードにする。
ALTER DATABASE [データベース名] SET SINGLE_USER
GO

データベースを修復
DBCC CHECKDB('[データベース名]',REPAIR_ALLOW_DATA_LOSS)
GO

マルチユーザーモードに戻す
ALTER DATABASE [データベース名] SET MULTI_USER
GO

という流れで修復します。

posted by VB.NET+MSDE+ActiveReports at 15:51 | Comment(0) | TrackBack(0) | SQL Server
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのTrackBack URL
http://blog.sakura.ne.jp/tb/20831717