トップ回答者
SQLServer6.5でテーブルが削除できない

質問
-
SQLServer6.5でテーブルが削除できません。EnterpriseManagerで表示されているテーブル削除しようとするとエラーが表示されます。正確なエラーメッセージは記録しておりませんが、テーブルが認識されていないというようなメッセージでした。SQLで削除を実行しても削除できません。データベースには300弱のテーブルがあります。削除できないテーブルは1つだけです。このテーブルは削除してしまって構わないテーブルです。このテーブルがあるためにインデックスの再構築の際にエラーが表示されそれもできないようです。データベースが壊れている可能性があると思いますが、よい方法をご存じの方がおられましたらご教授願います。
回答
-
データベースが破損しているかどうかに関しては DBCC CHECKDB で確認ができると思います。
一度バックアップを取得して、検証環境等に復元をし、DBCC CHECKDBを実行してみてはいかがでしょうか。
# 本番環境でいきなり実行してしまうと業務に影響が出る可能性がありますので。正規の方法ではありませんが、Enterprise Manager のテーブルの一覧から消すのであれば以下の方法で可能だと思います。
# 事前に sysobjects を SELECT して、対象のテーブルが存在しているかを確認したほうがよいかと思いますが。- SQL Server のサービスを停止
- コマンドプロンプトから C:\MSSQL\BINN\SQLSERVER.EXE -m を実行してシングルユーザーモードで SQL Server を起動
- ISQL/W を起動して SQL Serer に接続
- 対象の DB を選択して、 DELETE FROM sysobjects WHERE name = 'テーブル名'
- コマンドプロンプトで Ctrl + C を押してコマンドラインモードでの起動を終了
- SQL Server のサービスを起動
シングルユーザーモードで起動した場合は直接システムカタログテーブルを操作できるので対象のテーブルのエントリの情報を消すことができます。
この方法で sysobjects からテーブルのエントリを削除した場合、他の情報がシステムカタログに残っているので、この場合も DBCC CHECKDB を実行して整合性を合わせたほうがよいと思います。
どちらの方法も本番に影響を与える、操作を誤って全レコードを削除してしまったりすると取り返しがつきませんのでバックアップを取得し、検証環境を使用して自己責任で実施をお願いいたします。
以上、ご参考になれば幸いです。
- 回答としてマーク 山本春海 2011年5月20日 6:39
すべての返信
-
データベースが破損しているかどうかに関しては DBCC CHECKDB で確認ができると思います。
一度バックアップを取得して、検証環境等に復元をし、DBCC CHECKDBを実行してみてはいかがでしょうか。
# 本番環境でいきなり実行してしまうと業務に影響が出る可能性がありますので。正規の方法ではありませんが、Enterprise Manager のテーブルの一覧から消すのであれば以下の方法で可能だと思います。
# 事前に sysobjects を SELECT して、対象のテーブルが存在しているかを確認したほうがよいかと思いますが。- SQL Server のサービスを停止
- コマンドプロンプトから C:\MSSQL\BINN\SQLSERVER.EXE -m を実行してシングルユーザーモードで SQL Server を起動
- ISQL/W を起動して SQL Serer に接続
- 対象の DB を選択して、 DELETE FROM sysobjects WHERE name = 'テーブル名'
- コマンドプロンプトで Ctrl + C を押してコマンドラインモードでの起動を終了
- SQL Server のサービスを起動
シングルユーザーモードで起動した場合は直接システムカタログテーブルを操作できるので対象のテーブルのエントリの情報を消すことができます。
この方法で sysobjects からテーブルのエントリを削除した場合、他の情報がシステムカタログに残っているので、この場合も DBCC CHECKDB を実行して整合性を合わせたほうがよいと思います。
どちらの方法も本番に影響を与える、操作を誤って全レコードを削除してしまったりすると取り返しがつきませんのでバックアップを取得し、検証環境を使用して自己責任で実施をお願いいたします。
以上、ご参考になれば幸いです。
- 回答としてマーク 山本春海 2011年5月20日 6:39