LoginSignup
0
0

【Oracleデータベース】入門者の孤独演習1:表領域

Posted at

つまづき

表領域を削除するときにデータファイルも一緒に削除するのを忘れてしまった

解決方法
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;

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0