つまづき
表領域を削除するときにデータファイルも一緒に削除するのを忘れてしまった
✅ 解決方法
OSからデータファイルを削除する。
(表領域のみを削除しようとすると、中にオブジェクトを持っていたならエラーになるはず。エラーが出ずに消せたのなら、OSからデータファイルを削除して問題ない。)
ALTER TABLESPACEでエラーになる(表領域を変更できない)
✅解決方法
SMALLFILE表領域に対してALTER TABLESPACEはできない。
代わりに、ALTER DATAFILE を使う。
自主演習
表領域の演習
-- PDBにログインする (※マルチテナント構成のため)
-- データベース全体のデフォルトの表領域を確認する
select * from database_properties -- ローカルユーザーでも閲覧可
where property_name = 'DEFAULT_PERMANENT_TABLESPACE';
-- 以下SYSユーザー
-- 新しい表領域を作成する
create tablespace TEST_TBS
DATAFILE 'test_tbs_datafile'
SIZE 5m -- 5MB;
-- 表領域の情報を確認する
select tablespace_name, bytes, file_name
from dba_data_files;
-- 表領域のサイズを変更する
-- alter tablespace TEST_TBS resize 6m; -- 【注意!】SMALLFILE表領域にはalter tablespaceを使えない!
alter database
datafile 'test_tbs_datafile'
resize 6m;
-- 既存のデータファイル(※表領域ではない)の情報を確認する
select * from dba_data_files;
-- 特定のユーザーのデフォルト表領域を変更する
alter user USER1 default tablespace TEST_TBS;
-- 特定のユーザーのデフォルト表領域を確認する(再)
select username, default_tablespace from dba_users
where username = 'USER1';-- ユーザー名は大文字じゃないとヒットしない
-- 以下USER1(ローカルユーザー)
-- 新しいテーブルを作成する(既存のTBL1と同じ定義のテーブルを作成)
create table TBL2
as select * from TBL1
where 1 = 2; -- 行を1行もコピーしない
-- テーブルにどの表領域が割り当てられているかを確認する
select table_name, tablespace_name from user_tables;
-- 既存のテーブルの表領域を変更する
alter table TBL1
move tablespace TEST_TBS;
-- テーブルにどの表領域が割り当てられているかを確認する(再)
select table_name, tablespace_name from user_tables;