Oracle UNDO表領域 設定変更
自動UNDO ---> ロールバックセグメント
ざっくり流れ
- ロールバックセグメント用の表領域を作成
CREATE TABLESPACE 表領域名 DATAFILE '表領域パス.dbf' size xxM;
- ロールバックセグメントを表領域上に指定
CREATE ROLLBACK SEGMENT rbs_1 TABLESPACE 表領域名;
- 手動UNDO管理に変更
ALTER SYSTEM SET UNDO_MANAGEMENT = 'MANUAL' scope=spfile;
- DB再起動
# 保存先作成
sudo mkdir -p /database/orcl/UNDO
sudo chown -R oracle.oinstall /database/
# orclデータベースにアクセス
export ORACLE_SID=orcl
sqlplus / as sysdba
-- 現在の UNDO_NAMAGEMENT を確認 AUTOなら自動UNDO, MANUALなら ロールバックセグメント
show parameter undo_management;
-- NAME TYPE VALUE
-- ------------------------------------ ----------- ------------------------------
-- undo_management string AUTO ★ 自動UNDO
SHOW PARAMETER UNDO
-- 作業前の表領域の一覧を取得 (どれが過不足ない?)
COLUMN FILE_NAME FORMAT a100;
SELECT * FROM DBA_DATA_FILES;
SELECT FILE_NAME, TABLESPACE_NAME, AUTOEXTENSIBLE FROM DBA_DATA_FILES;
SELECT * FROM dba_tablespaces;
SELECT TABLESPACE_NAME, CONTENTS FROM dba_tablespaces;
SELECT TABLESPACE_NAME, CONTENTS FROM dba_tablespaces WHERE CONTENTS='UNDO';
-- ロールバックセグメント用の表領域を作成
CREATE TABLESPACE rbs_test DATAFILE '/database/orcl/UNDO/rbs01.dbf' size 10M;
-- 作成されたか確認
COLUMN FILE_NAME FORMAT a100;
SELECT FILE_NAME, TABLESPACE_NAME, AUTOEXTENSIBLE FROM DBA_DATA_FILES;
SELECT TABLESPACE_NAME, CONTENTS FROM dba_tablespaces;
-- ロールバック状況確認
SELECT SEGMENT_NAME, TABLESPACE_NAME, STATUS FROM DBA_ROLLBACK_SEGS;
-- ロールバックセグメントを表領域上に作成
CREATE ROLLBACK SEGMENT rbs_1 TABLESPACE rbs_test;
-- 手動UNDO管理にするため、UNDO_MANAGEMENT を MANUAL に変更
alter system set UNDO_MANAGEMENT = 'MANUAL' scope=spfile;
-- 変更を反映するため再起動
shutdown immediate
startup
-- 現在の UNDO_NAMAGEMENT を確認 AUTOなら自動UNDO, MANUALなら ロールバックセグメント
show parameter undo_management;
-- NAME TYPE VALUE
-- ------------------------------------ ----------- ------------------------------
-- undo_management string MANUAL ★ ロールバックセグメントになっている
SELECT SEGMENT_NAME, TABLESPACE_NAME, STATUS FROM DBA_ROLLBACK_SEGS;
-- 元のUNDO表領域を削除
COLUMN FILE_NAME FORMAT a100;
SELECT FILE_NAME, TABLESPACE_NAME, AUTOEXTENSIBLE FROM DBA_DATA_FILES;
SELECT TABLESPACE_NAME, CONTENTS FROM dba_tablespaces;
drop tablespace undotbs1 including contents and datafiles cascade constraints;
SELECT FILE_NAME, TABLESPACE_NAME, AUTOEXTENSIBLE FROM DBA_DATA_FILES;
SELECT TABLESPACE_NAME, CONTENTS FROM dba_tablespaces;
ロールバックセグメント ---> 自動UNDO
流れ
- UNDO用の表領域の作成
CREATE TABLESPACE 表領域名 DATAFILE '表領域パス.dbf' SIZE xxG AUTOEXTEND ON;
- UNDO 表領域を切り替え
alter system set undo_tablespace=<新規UNDO表領域名> scope=both;
- 手動UNDO管理に変更
ALTER SYSTEM SET UNDO_MANAGEMENT = 'AUTO' scope=spfile;
- DB再起動
# 保存先ディレクトリを作成(必要に応じて)
mkdir -p /database/orcl/UNDO
# orclデータベースにアクセス
export ORACLE_SID=orcl
sqlplus / as sysdba
------------------------------------------------------------
-- 事前確認
------------------------------------------------------------
-- 現在の UNDO_NAMAGEMENT を確認 AUTOなら自動UNDO, MANUALなら ロールバックセグメント
show parameter undo
-- NAME TYPE VALUE
-- ------------------------------------ ----------- ------------------------------
-- temp_undo_enabled boolean FALSE
-- undo_management string MANUAL ★
-- undo_retention integer 900
-- undo_tablespace string
------------------------------------------------------------
-- UNDO用の表領域の作成
------------------------------------------------------------
-- 事前確認
COLUMN FILE_NAME FORMAT a100;
SELECT FILE_NAME, TABLESPACE_NAME, AUTOEXTENSIBLE FROM DBA_DATA_FILES;
-- FILE_NAME TABLESPACE_NAME AUT
-- ---------------------------------------------------------------------------------------------------- ------------------------------ ---
-- /u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_k8o1286d_.dbf SYSTEM YES
-- /u01/app/oracle/oradata/ORCL/datafile/o1_mf_sysaux_k8o15osf_.dbf SYSAUX YES
-- /database/orcl/UNDO/rbs01.dbf RBS_TEST NO
-- /u01/app/oracle/oradata/ORCL/datafile/o1_mf_users_k8o165yp_.dbf USERS YES
SELECT TABLESPACE_NAME, CONTENTS FROM dba_tablespaces;
-- TABLESPACE_NAME CONTENTS
-- ------------------------------ ---------------------
-- SYSTEM PERMANENT
-- SYSAUX PERMANENT
-- TEMP TEMPORARY
-- USERS PERMANENT
-- RBS_TEST PERMANENT
-- 作成 CREATE TABLESPASE <表領域名> DATAFILE <表領域パス> SIZE <初期サイズ? AUTOEXTEND ON/OFF;
CREATE UNDO TABLESPACE UNDOTBS DATAFILE '/database/orcl/UNDO/undo1.dbf' SIZE 3G AUTOEXTEND ON;
-- 作業後確認
COLUMN FILE_NAME FORMAT a100;
SELECT FILE_NAME, TABLESPACE_NAME, AUTOEXTENSIBLE FROM DBA_DATA_FILES;
-- FILE_NAME TABLESPACE_NAME AUT
-- ---------------------------------------------------------------------------------------------------- ------------------------------ ---
-- /u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_k8o1286d_.dbf SYSTEM YES
-- /u01/app/oracle/oradata/ORCL/datafile/o1_mf_sysaux_k8o15osf_.dbf SYSAUX YES
-- /database/orcl/UNDO/rbs01.dbf RBS_TEST NO
-- /u01/app/oracle/oradata/ORCL/datafile/o1_mf_users_k8o165yp_.dbf USERS YES
-- /database/orcl/UNDO/undo1.dbf ★追加されている UNDOTBS YES
SELECT TABLESPACE_NAME, CONTENTS FROM dba_tablespaces;
-- TABLESPACE_NAME CONTENTS
-- ------------------------------ ---------------------
-- SYSTEM PERMANENT
-- SYSAUX PERMANENT
-- TEMP TEMPORARY
-- USERS PERMANENT
-- RBS_TEST PERMANENT
-- UNDOTBS UNDO ★ 追加されている
------------------------------------------------------------
-- UNDO_MANAGEMENT = 'AUTO' を設定 など
------------------------------------------------------------
-- AUTOを指定
ALTER SYSTEM SET UNDO_MANAGEMENT = 'AUTO' scope=spfile;
-- UNDO表領域に 作成した表領域(UNDOTBS) を指定
ALTER SYSTEM SET UNDO_TABLESPACE = 'UNDOTBS' SCOPE=spfile;
-- この時点では変更されていない?
show parameters dest undo
-- -- undo_tablespace 確認
-- COLUMN VALUE FORMAT a40;
-- COLUMN DISPLAY_VALUE FORMAT a40;
-- SELECT NAME, VALUE, DISPLAY_VALUE FROM v$parameter WHERE NAME = 'undo_tablespace';
------------------------------------------------------------
-- 再起動 ---> 起動後確認
------------------------------------------------------------
shutdown immediate
startup nomount
-- 現在の UNDO_NAMAGEMENT を確認 AUTOなら自動UNDO, MANUALなら ロールバックセグメント
show parameter undo
-- NAME TYPE VALUE
-- ------------------------------------ ----------- ------------------------------
-- temp_undo_enabled boolean FALSE
-- undo_management string AUTO ★ UNDOになっている
-- undo_retention integer 900
-- undo_tablespace string UNDOTBS ★ 作成した表領域になっている
------------------------------------------------------------
-- 元の表領域を削除
------------------------------------------------------------
-- 実施前 確認
COLUMN FILE_NAME FORMAT a100;
SELECT FILE_NAME, TABLESPACE_NAME, AUTOEXTENSIBLE FROM DBA_DATA_FILES;
SELECT TABLESPACE_NAME, CONTENTS FROM dba_tablespaces;
-- 削除 DROP TABLESPACE <TABLESPACE_NAME> INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
DROP TABLESPACE RBS_TEST INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
-- 実施後 確認
SELECT FILE_NAME, TABLESPACE_NAME, AUTOEXTENSIBLE FROM DBA_DATA_FILES;
SELECT TABLESPACE_NAME, CONTENTS FROM dba_tablespaces;