Oracle Databaseでは、表を読み取り専用モードに変更することで重要なデータを保護し、表を移動することでストレージの効率を高めることができます。本記事では、初心者にもわかりやすい具体的な手順と注意点を解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
1. 表を読み取り専用モードに変更する
1.1 読み取り専用モードとは?
表を読み取り専用モードにすることで、その表への挿入、更新、削除といった書き込み操作を禁止できます。これにより、次のような状況で役立ちます:
- 重要なデータの保護: 誤操作やシステムエラーからデータを守る。
- 監査用途: データを変更せずに監査レポートを作成する。
1.2 手順
1.2.1 表の作成
まず、例としてemployees表を作成し、テスト用データを挿入します。
CREATE TABLE employees (
employee_id NUMBER PRIMARY KEY,
name VARCHAR2(50),
salary NUMBER
);
INSERT INTO employees VALUES (1, 'Alice', 5000);
INSERT INTO employees VALUES (2, 'Bob', 6000);
COMMIT;
1.2.2 表を読み取り専用に設定する
次のSQLを実行して、employees表を読み取り専用にします。
ALTER TABLE employees READ ONLY;
このコマンドを実行すると、employees表に対する以下の操作が禁止されます:
INSERTUPDATEDELETE
1.2.3 確認
現在の表の状態を確認するには、以下のSQLを使用します。
SELECT table_name, read_only
FROM user_tables
WHERE table_name = 'EMPLOYEES';
出力例:
| TABLE_NAME | READ_ONLY |
|---|---|
| EMPLOYEES | YES |
1.2.4 読み取り専用モードを解除する
必要に応じて、以下のSQLで書き込み可能な状態に戻します。
ALTER TABLE employees READ WRITE;
2. 表を移動する
2.1 表の移動とは?
表を移動する操作は、別の表領域にデータを物理的に配置し直すことを指します。これにより、以下のメリットがあります:
- ストレージの最適化: 特定の表領域の容量不足を回避。
- パフォーマンスの向上: 高速ストレージ領域への移動でクエリ性能が向上。
2.2 手順
2.2.1 表領域の作成
新しい表領域new_tablespaceを作成します。データファイルの保存先は/u01/app/oracle/oradata/V19に指定します。
CREATE TABLESPACE new_tablespace
DATAFILE '/u01/app/oracle/oradata/V19/new_tablespace.dbf'
SIZE 50M
AUTOEXTEND ON;
重要ポイント:
SIZE: 初期サイズを50MBに設定。AUTOEXTEND: 必要に応じてデータファイルを自動拡張。
2.2.2 表の移動
次に、employees表を新しい表領域に移動します。
ALTER TABLE employees MOVE TABLESPACE new_tablespace;
2.2.3 状態の確認
表が新しい表領域に移動したことを確認するには、以下を実行します。
SELECT table_name, tablespace_name
FROM user_tables
WHERE table_name = 'EMPLOYEES';
出力例:
| TABLE_NAME | TABLESPACE_NAME |
|---|---|
| EMPLOYEES | NEW_TABLESPACE |
2.2.4 インデックスの再構築
表の移動後、関連するインデックスは無効化されるため、以下を実行して再構築します。
ALTER INDEX employees_idx REBUILD TABLESPACE new_tablespace;
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
3. 図解:操作の流れ
次の図は、表を読み取り専用モードに変更し、表を移動する全体的な流れを示したものです。
+-----------------------+
| 現在の状態 |
| 表領域: USERS |
| 表: EMPLOYEES |
+-----------------------+
|
| (読み取り専用モードに変更)
v
+-----------------------+
| 状態: READ ONLY |
| 表: EMPLOYEES |
+-----------------------+
|
| (表を移動)
v
+-----------------------+
| 移動先表領域: NEW_TABLESPACE |
| 表: EMPLOYEES |
+-----------------------+
|
| (インデックス再構築)
v
+-----------------------+
| 完了 |
+-----------------------+
4. 実践例:すべての手順を一括で実行
以下は、読み取り専用モードの変更から表の移動までをまとめて行う例です。
-- ステップ1: 表を作成し、データを挿入
CREATE TABLE employees (
employee_id NUMBER PRIMARY KEY,
name VARCHAR2(50),
salary NUMBER
);
INSERT INTO employees VALUES (1, 'Alice', 5000);
INSERT INTO employees VALUES (2, 'Bob', 6000);
COMMIT;
-- ステップ2: 読み取り専用モードに変更
ALTER TABLE employees READ ONLY;
-- ステップ3: 新しい表領域を作成
CREATE TABLESPACE new_tablespace
DATAFILE '/u01/app/oracle/oradata/V19/new_tablespace.dbf'
SIZE 50M
AUTOEXTEND ON;
-- ステップ4: 表を移動
ALTER TABLE employees MOVE TABLESPACE new_tablespace;
-- ステップ5: インデックスを再構築
CREATE INDEX employees_idx ON employees (employee_id);
ALTER INDEX employees_idx REBUILD TABLESPACE new_tablespace;
5. 注意点
- 業務時間外に実施
表の移動中はロックが発生するため、稼働中のシステムに影響を与える可能性があります。 - 十分なストレージを確保
表領域のデータファイルが適切なサイズで作成されていることを確認してください。 - バックアップを取得
重大な変更の前には必ずバックアップを取得してください。
6. まとめ
本記事では、以下の手順を解説しました:
- 表を読み取り専用モードに変更し、データを保護する方法
- 表を新しい表領域に移動し、ストレージを最適化する方法
- 注意点や実践例
これらの操作を習得することで、データベース管理の効率と安全性を向上させることができます。ぜひ、実際の運用に役立ててください!
[参考]
Oracle Database SQL言語リファレンス 19c




コメント