2007年6月7日木曜日

sqlserver 823 i/oエラーの処置

sqlserver2000
症状
更新処理時にエラー、ピボットのサーバーの参照がエラーできない

修復方法
修復コマンド サーバーが動いているPCで
osql -S サーバー名 -U username
Use master
go
sp_dboption dbname, single, true
Use dbname
go
DBCC CHECKDB(DBname,REPAIR_ALLOW_DATA_LOSS )
go
sp_dboption dbname, single, false
go

ロックがかかっていたらエンタープライズマネージャーで調べ片っぱしから強制終了

他の修復方法  -シングルモードにせずに修復するには
*エラーテーブルを他のテーブルに件数を限定してコピー
1.エラーテーブルを damyテーブルにコピー
2.ダミーテーブルをクリア、テーブル構成だけが残る
3.ダミーテーブルに、エラーテーブルを年月を指定してコピー(データ件数を絞る、サイズが大きすぎてエラーになっていると推測、テーブルをクリアした意味がある?)
4.エラーテーブルをリネイム
5.ダミーテーブルをエラーのあったテーブルに名前変更

第3の方法
データベースの復元
dbcc checkdbや checktableが失敗するとデータベースが消失するので仕方なく、エラー前のデータから復元するわけですが。とりあえずそれでうまく更新できるようになったりします。。
今回の場合14/10/8、chkdskでもブルースクリーンが出たので、hddレベルのエラーかもしれないというか、イベントログにftdiskとかntfsのエラーが出まくってたのでhdd要因。
---イベントログ----------------
chkdisk時に出ました。


イベントの種類:    警告
イベント ソース:    Ftdisk
イベント カテゴリ:    ディスク
イベント ID:    57
日付:        2014/10/07
時刻:        18:42:42
説明:
データをトランザクション ログにフラッシュできませんでした。障害が発生する可能性があります。
イベントの種類:    警告
イベント ソース:    Ntfs
イベント カテゴリ:    なし
イベント ID:    50
日付:        2014/10/07
時刻:        18:42:37
説明:
{遅延書き込みデータの紛失} ファイル  のためのデータを一部保存できませんでした。データを損失しました。 このエラーは、コンピュータのハードウェアまたはネットワーク接続の障害によって発生した可能性があります。このファイルをどこか別の所に保存してください。
--------------------------------------

処置
ユーザーデータベースをデタッチして別のドライブにコピーしてアタッチ
*デタッチしないとコピー不可だった。
システムデータベースはどうしたものか
どうしたものかじゃなくて、移さないとやばいのだが。。休みにでも移すか

参考)SQL Server のデタッチとアタッチ機能を使用して SQL Server データベースを新しい場所に移動する方法 
------------------------------------
原因不明
原因の推測
システムがおかしい
再起動後823エラーがよく出る
HDD LIFEを常駐させたらエラー頻発
特定のDBでエラーが出る
勘定奉行の翌月更新がかからなかった マウスはきく、NUM LOCKは反応するが他のメニューが固まる。他のサーバーに移行したらすんなり更新できた
テーブルがでかすぎるのか? 46万件
月で一括DELETE 一括追加しているがたまに数字フィールドに文字が入ることがありそのせいでインデックスが壊れるのか?
普通は文字型が違うエラーで止まるはずだが。。。

4 件のコメント:

  1. あまりにも頻繁にエラーが起こるので
    スクリプト化した

    0dbcc.bat
    osql -S servername -U sa -P xxx -i "C:\My Documents\0dbcc.sql"

    0dbcc.sql
    Use master
    go
    sp_dboption dbname, single, true
    Use dbname
    go
    DBCC CHECKDB(dbname,REPAIR_ALLOW_DATA_LOSS )
    go
    sp_dboption dbname, single, false
    go
    quit

    返信削除
  2. bコマンドプロンプトに
    osql -S servername -U sa -P xxx -i "C:\My Documents\0dbcc.sql"
    を貼り付けて使った方がいいかも
    db使用中だと一瞬で終わってエラーが見れないため

    返信削除
  3. x206 823エラーが解消したので報告する
    USB外付けHDDをはずしてネットワーク経由で別のHDDにバックアップするようにしたら、823エラーが嘘のように出なくなった。hddを横に寝かせて異常に熱を持っていたのでそのせいか。。詳細不明
    sqlserverのバックアップエージェントか整合性の処理で異常があってその影響で823エラーが出ていたのか。。。異常のログは出ていない

    返信削除
  4. 一週間ほどSQLSERVERがエラーなしだったが、WINDOWS UPDATEで自動更新、再起動後エラーが再発した

    返信削除