note
2018.06.23
これはOracle Databaseの話ですね。「12GB制限」と「プラガブルデータベース(PDB)」というキーワードから、おそらく **Oracle Database Express Edition (XE)** を使っているのではないでしょうか?
---
## 原因の見立て
Oracle XEには以下のリソース制限があります:
- **ユーザーデータ合計:12GB**
- SGA+PGA:2GB
- CPUスレッド:2
「dumpファイルからインポートし直してもデータを消しても起きる」というのがポイントで、これは **データの量の問題ではなく、ディスク上のデータファイル(.dbf)の物理サイズの問題** である可能性が高いです。
Oracleのデータファイルは一度拡張されると、**データを削除しても物理サイズは縮まりません**。`DELETE`や`TRUNCATE`をしてもファイルサイズはそのままで、12GBカウントに含まれ続けます。
---
## 確認すべきこと
CDBに接続して現在のデータ使用量を確認してください:
```sql
-- CDB$ROOT に SYS で接続して実行
SELECT con_id, SUM(bytes)/1024/1024/1024 AS size_gb
FROM cdb_data_files
GROUP BY con_id;
```
あるいはXEの制限チェック用のビュー:
```sql
SELECT * FROM v$xe_session_limit;
-- または
SELECT * FROM v$con_sysmetric WHERE metric_name LIKE '%DB Size%';
```
---
## 対処法
**① データファイルを縮小する(SHRINK)**
```sql
ALTER DATABASE DATAFILE '/path/to/file.dbf' RESIZE 2G;
```
ただし実際に使用中のブロックより小さくはできないので、まず`MOVE`や`SHRINK SPACE`で断片化を解消する必要があります。
**② dumpからインポートし直す場合**
インポート前に既存のPDBを**完全に削除してから再作成**することで、古い肥大化したデータファイルを一掃できます:
```sql
ALTER PLUGGABLE DATABASE pdb名 CLOSE;
DROP PLUGGABLE DATABASE pdb名 INCLUDING DATAFILES;
-- その後PDBを新規作成してからimpdp
```
**③ TEMPファイルや REDOログも確認**
12GBカウントにはTEMPファイルは含まれませんが、念のため確認:
```sql
SELECT SUM(bytes)/1024/1024/1024 FROM cdb_temp_files;
```
---
使っているのはOracle XEで合ってますか?また、エラーメッセージ(ORA-XXXXX)があれば教えていただけると、もう少し絞り込めます。