Info2softは、ウェブサイトでより快適で適切な閲覧体験を提供するためにCookieを使用しています。 プライバシーポリシー
Loading...
DROP DATABASE は、サーバー上からデータベースとそれに関連するすべてのデータを完全に削除するSQLコマンドです。
DROP コマンドを実行しても、単なるレコードの削除やテーブルの初期化だけではありません。スキーマ、全テーブル、ストアドプロシージャ、インデックス、データを含むデータベース全体がサーバーから永久的に消去されます。
開発者やDBAがデータベースを削除する理由:
ほとんどのリレーショナルデータベースで、データベースを削除するコマンドの基本構文は共通です。
DROP DATABASE database_name;
database_name 部分を削除対象の実際のデータベース名に置き換えてください。
多くのSQLシステムには安全性を高めるオプション構文が用意されています。
IF EXISTS:対象のデータベースが存在しない場合のエラーを回避RESTRICT または CASCADE:依存オブジェクトに対するシステムの処理方法を制御各DBMS固有のオプションについては次のセクションで詳しく解説します。
基本コマンドは共通ですが、MySQL、PostgreSQL、SQL Serverにはそれぞれ固有の制約と構文オプションが存在します。
MySQLの操作はシンプルです。データベースが既に削除済みの場合のエラーを防ぐにはIF EXISTS句を使用します。
DROP DATABASE IF EXISTS school_db;
DROP SCHEMA を実行すると DROP DATABASE と同じ動作になります。PostgreSQLはアクティブな接続に対して厳しい制限があります。自身のセッションを含め、他ユーザーがデータベースに接続している状態では削除できません。
標準コマンド:
DROP DATABASE my_app_db;
強制切断(PostgreSQL 13以降):
利用中のユーザーが存在するデータベースを削除する必要がある場合は、WITH (FORCE) パラメータで全ユーザーを強制切断できます。
DROP DATABASE my_app_db WITH (FORCE);
SQL Serverを使用する際は、セッションをmasterデータベースに接続しておく必要があります。削除対象のDBに接続したままでは実行できません。
標準コマンド:
USE master;
GO
DROP DATABASE [CompanyData];
GO
拡張構文:
アクティブな接続が存在するデータベースの場合は、ALTER DATABASE で SINGLE_USER モードに切り替えてから削除します。
ALTER DATABASE [CompanyData] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DROP DATABASE [CompanyData];
各SQLコマンドのデータ削除範囲は異なります。一部は行のみ削除し、一部は構造全体を消去します。誤ったコマンドを使用すると、バックアップからの復旧に時間を費やしたり、不要なオブジェクトがサーバーに残留したりする恐れがあります。
簡易比較表:
| コマンド | 削除範囲 | 復旧可能か |
|---|---|---|
| DROP DATABASE | データベース全体 | 不可 |
| DROP TABLE | 単一テーブル | 不可 |
| TRUNCATE | テーブル内データのみ | 不可 |
| DELETE | 条件に合致する特定行 | トランザクション内のみ可 |
データベース全体ではなく単一テーブルの行だけ削除したい場合は、SQL Serverのテーブルバックアップ方法の記事を参照してください。完全なDB復旧を行わず、個別テーブルのみ復元する手順も記載されています。
各コマンドの使用場面:
DELETE以外は取り消せません。TRUNCATE と DROP 系コマンドはバックアップがなければ完全に不可逆な操作です。実務例:
自社で test_app_db というテスト用DBを運用し、users、orders、logs、cacheのテーブルが存在するとします。古いログレコードだけ消したい場合は DELETE、logsテーブルの中身だけ空にしたい場合は TRUNCATE、logsテーブル自体を削除したい場合は DROP TABLE、テストDB全体を完全に消去したい場合は DROP DATABASE を使用します。
構文が正しくても、データベース削除時にエラーが発生するケースが多く存在します。代表的な問題を紹介します。
データの完全性を守るため、アクティブな接続が存在する状態でのDB削除は各SQLエンジンによってブロックされます。
DROP DATABASE ... WITH (FORCE) を使用してください。誰でもデータベースを削除できるわけではありません。通常、以下のロールのみ削除操作を実行可能です。
DROP ANY DATABASE 権限を付与されたユーザー大半のDBMSは master、msdb、information_schema といったシステムデータベースの削除を明示的に禁止しています。これらのDBはSQLインスタンスの動作に不可欠なメタデータと設定情報を保管しており、削除を実行すると保護エラーが発生し失敗します。
DROP 操作は全ファイルとスキーマを永久削除するため、事前のバックアップ作成は必須です。大規模企業では単純な手動エクスポートではセキュリティ・コンプライアンス要件を満たせないケースが多いです。
i2Backup は一元的な自動運用によりSQL環境のデータ保護課題を解決するソリューションです。
堅牢なバックアップ体制があれば、DROP DATABASEのような不可逆なSQL操作後もデータを復旧できます。i2Backupは自動実行、細粒度復旧、スマートなバックアップ管理機能を備え、重要なデータベースを運用するチームが安心してメンテナンス作業を実施するための信頼性を提供します。
Q1:データベースを削除するにはどうすれば良いですか?
DROP DATABASEの後にデータベース名を記述したコマンドを実行します。管理者権限が必要で、削除対象のDBに接続した状態では実行できません。
Q2:TRUNCATEとDROPはどちらを使うべきですか?
テーブル構造を残したまま全行削除したい場合はTRUNCATE、オブジェクト自体を完全にサーバーから消去したい場合はDROPを使用します。
Q3:DROP DATABASEの操作を取り消せますか?
できません。DROP DATABASEは不可逆な操作で取り消し機能が存在しないため、削除前に作成したバックアップからのみ復旧可能です。
Q4:「データベースは使用中です」というエラーが発生する理由は?
自身のセッション、他ユーザー、バックグラウンドサービスを含めDBにアクティブな接続が存在する場合、SQLエンジンが削除をブロックします。対処法として、masterなど別のDBに接続を切り替えるか、アクティブなセッションを切断してください。
データベースの削除は不可逆な操作ですが、基礎ルールを守れば安全に実施可能です。各DBMSの構文を把握し、権限を確認し、必ず事前にバックアップを作成してください。
操作に伴うリスクは存在しますが、解決策は単純です。バックアップを自動化し、DBのアクセス状況を監視し、i2Backupのようなツールを活用すれば、人的ミスが発生した際に迅速な復旧が可能です。
適切な事前準備とツールを活用すれば、DROP DATABASE は責任あるデータベース管理の一環として安全に実行できます。