背景・目的
Oracleのコマンドについて、目的別にまとめていきます。(随時更新します。)
まとめ
| 分類 | 目的 |
|---|---|
| ユーザー | ユーザーの作成 |
| ユーザーの確認1 | |
| ユーザーの確認2 | |
| パスワード変更 | |
| 権限 | セッション権限の確認 |
| セッション権限を付与 | |
| アーカイブログ | アーカイブログの確認 |
| アーカイブログの保持期間を確認 | |
| アーカイブログの保持期間を変更 | |
| サプリメンタルロギング | サプリメンタルロギングの確認 |
| プライマリキーロギングを有効化 | |
| ユニークインデックスロギングを有効化 | |
| Statspack | Statspackのパラメータを確認 |
| 手動スナップショットを取得 | |
| 自動スナップショットの設定を有効化 | |
| スケジュールジョブの確認 | |
| 自動スナップショットの設定を一時停止する | |
| 自動スナップショットの設定を再開する | |
| 自動スナップショットの設定を完全に削除 | |
| スナップショットを確認 | |
| スナップショットを削除 | |
| 表領域 | 表領域の作成 |
| 表領域の確認 | |
| リソース | CPU使用率 |
| メモリ | |
| ディスク | |
| データベース | 現在のデータベースを確認 |
実践
ユーザ
ユーザの作成
CREATE USER dms_user IDENTIFIED BY "XXXXXXXXXX";
ユーザーの確認1
SQL> SELECT username, account_status, created
FROM dba_users
WHERE username = 'DMS_USER'; 2 3
USERNAME ACCOUNT_STATUS CREATED
-------------------------------------------------------------------------------------------------------------------------------- -------------------------------- ---------
DMS_USER OPEN 21-DEC-25
SQL>
ユーザーの確認2
SQL> SELECT username
2 FROM all_users
3 WHERE username='XXXX';
USERNAME
--------------------------------------------------------------------------------
XXXX
SQL>
権限
セッション権限の確認
SQL> SELECT grantee, privilege
FROM dba_sys_privs
WHERE grantee = 'DMS_USER'
AND privilege = 'CREATE SESSION'; 2 3 4
no rows selected
SQL>
パスワード変更
ALTER USER XXXXXX IDENTIFIED BY XXXXXX;
現在のユーザ確認
SHOW USER;
セッション権限を付与
SQL> GRANT CREATE SESSION TO dms_user;
Grant succeeded.
SQL>
セッション権限を付与後の確認
SQL> SELECT grantee, privilege
FROM dba_sys_privs
WHERE grantee = 'DMS_USER'
AND privilege = 'CREATE SESSION'; 2 3 4
GRANTEE PRIVILEGE
-------- --------------
DMS_USER CREATE SESSION
SQL>
テーブル読み取り権限の付与
SQL> GRANT SELECT ANY TABLE TO dms_user;
Grant succeeded.
SQL>
システムビュー権限
アーカイブログファイルの情報
SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVED_LOG', 'DMS_USER', 'SELECT');
オンラインREDOログの状態
EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$LOG', 'DMS_USER', 'SELECT');
REDOログファイルの物理的な場所
EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGFILE', 'DMS_USER', 'SELECT');
データベース全体の情報
EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE', 'DMS_USER', 'SELECT');
データベースインスタンスのスレッド情報
EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$THREAD', 'DMS_USER', 'SELECT');
データベースの初期化パラメータ
EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$PARAMETER', 'DMS_USER', 'SELECT');grant SELECT on SYS."V_$ARCHIVED_LOG" to "DMS_USER"
LogMiner権限の付与
LogMiner(ログマイナー)で使用可能なログファイルの一覧を表示
SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_LOGS', 'DMS_USER', 'SELECT');
grant SELECT on SYS."V_$LOGMNR_LOGS" to "DMS_USER"
PL/SQL procedure successfully completed.
SQL>
LogMinerで解析された実際の変更データの内容を表示
SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_CONTENTS', 'DMS_USER', 'SELECT');
grant SELECT on SYS."V_$LOGMNR_CONTENTS" to "DMS_USER"
PL/SQL procedure successfully completed.
SQL>
LogMinerパッケージの実行権限
SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR', 'DMS_USER', 'EXECUTE');
grant EXECUTE on SYS."DBMS_LOGMNR" to "DMS_USER"
PL/SQL procedure successfully completed.
SQL>
メタデータアクセス権限の付与
すべてのインデックス情報を取得
SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('ALL_INDEXES', 'DMS_USER', 'SELECT');
grant SELECT on SYS."ALL_INDEXES" to "DMS_USER"
PL/SQL procedure successfully completed.
SQL>
データベース内のすべてのオブジェクト一覧
SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('ALL_OBJECTS', 'DMS_USER', 'SELECT');
grant SELECT on SYS."ALL_OBJECTS" to "DMS_USER"
PL/SQL procedure successfully completed.
SQL>
すべてのテーブル情報を取得
SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('ALL_TABLES', 'DMS_USER', 'SELECT');
grant SELECT on SYS."ALL_TABLES" to "DMS_USER"
PL/SQL procedure successfully completed.
SQL>
データベースユーザー情報を取得
EXEC rdsadmin.rdsadmin_util.grant_sys_object('ALL_USERS', 'DMS_USER', 'SELECT');
grant SELECT on SYS."ALL_USERS" to "DMS_USER"
PL/SQL procedure successfully completed.
SQL>
データベースインスタンスの基本情報を取得
SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$INSTANCE', 'DMS_USER', 'SELECT');
grant SELECT on SYS."V_$INSTANCE" to "DMS_USER"
PL/SQL procedure successfully completed.
SQL>
Oracleデータベースのバージョン情報を取得
SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$VERSION', 'DMS_USER', 'SELECT');
grant SELECT on SYS."V_$VERSION" to "DMS_USER"
PL/SQL procedure successfully completed.
SQL>
データベース内の全ユーザー情報を取得
SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('DBA_USERS', 'DMS_USER', 'SELECT');
grant SELECT on SYS."DBA_USERS" to "DMS_USER"
PL/SQL procedure successfully completed.
SQL>
データベースディレクトリオブジェクトの情報を取得
SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('DBA_DIRECTORIES', 'DMS_USER', 'SELECT');
grant SELECT on SYS."DBA_DIRECTORIES" to "DMS_USER"
PL/SQL procedure successfully completed.
SQL>
XMLデータ生成パッケージの実行権限
SQL> GRANT EXECUTE ON SYS.DBMS_XMLGEN TO dms_user;
Grant succeeded.
SQL>
現在実行中のトランザクション情報を取得
SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$TRANSACTION', 'DMS_USER', 'SELECT');
grant SELECT on SYS."V_$TRANSACTION" to "DMS_USER"
PL/SQL procedure successfully completed.
SQL>
マルチテナント環境のコンテナ情報を取得
SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$CONTAINERS', 'DMS_USER', 'SELECT');
grant SELECT on SYS."V_$CONTAINERS" to "DMS_USER"
PL/SQL procedure successfully completed.
SQL>
国際化・地域化設定を取得
SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$NLS_PARAMETERS', 'DMS_USER', 'SELECT');
grant SELECT on SYS."V_$NLS_PARAMETERS" to "DMS_USER"
PL/SQL procedure successfully completed.
SQL>
タイムゾーン名の一覧を取得
SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('V_$TIMEZONE_NAMES', 'DMS_USER', 'SELECT');
grant SELECT on SYS."V_$TIMEZONE_NAMES" to "DMS_USER"
PL/SQL procedure successfully completed.
SQL>
テーブルの全カラム情報を取得
SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('ALL_TAB_COLS', 'DMS_USER', 'SELECT');
grant SELECT on SYS."ALL_TAB_COLS" to "DMS_USER"
PL/SQL procedure successfully completed.
SQL>
制約に関連するカラム情報を取得
SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('ALL_CONS_COLUMNS', 'DMS_USER', 'SELECT');
grant SELECT on SYS."ALL_CONS_COLUMNS" to "DMS_USER"
PL/SQL procedure successfully completed.
SQL>
インデックスを構成するカラム情報を取得
SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('ALL_IND_COLUMNS', 'DMS_USER', 'SELECT');
grant SELECT on SYS."ALL_IND_COLUMNS" to "DMS_USER"
PL/SQL procedure successfully completed.
SQL>
データベースオブジェクトのカタログ情報を取得
SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('ALL_CATALOG', 'DMS_USER', 'SELECT');
grant SELECT on SYS."ALL_CATALOG" to "DMS_USER"
PL/SQL procedure successfully completed.
SQL>
テーブル制約の詳細情報を取得
SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('ALL_CONS_COLUMNS', 'DMS_USER', 'SELECT');
grant SELECT on SYS."ALL_CONS_COLUMNS" to "DMS_USER"
PL/SQL procedure successfully completed.
SQL>
データベース内のすべての制約情報を取得
SQL> EXEC rdsadmin.rdsadmin_util.grant_sys_object('ALL_CONSTRAINTS', 'DMS_USER', 'SELECT');
grant SELECT on SYS."ALL_CONSTRAINTS" to "DMS_USER"
PL/SQL procedure successfully completed.
SQL>
アーカイブログ
アーカイブログモードの確認
SQL> SELECT log_mode FROM v$database;
LOG_MODE
------------
ARCHIVELOG
SQL>
アーカイブログの保持期間を確認
下記のコマンドで、NAME:archivelog retention hours VALUE:0から、アーカイブログの保持期間が0になっていることがわかった。
SQL> SET SERVEROUTPUT ON
EXEC rdsadmin.rdsadmin_util.show_configuration;
SQL> NAME:tracefile retention
VALUE:10080
DESCRIPTION:tracefile expiration specifies the duration in minutes before
tracefiles in bdump are automatically deleted.
NAME:archivelog retention hours
VALUE:0
DESCRIPTION:ArchiveLog expiration specifies the duration in hours before
archive/redo log files are automatically deleted.
PL/SQL procedure successfully completed.
SQL>
SQL>
アーカイブログの保持期間を変更
下記は、24時間に設定。
SQL> EXEC rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours', 24);
1 rows updated
PL/SQL procedure successfully completed.
SQL> COMMIT;
Commit complete.
SQL>
変更後の確認
変更されました。NAME:archivelog retention hours VALUE:24になっています。
SQL> SET SERVEROUTPUT ON
EXEC rdsadmin.rdsadmin_util.show_configuration;SQL>
NAME:tracefile retention
VALUE:10080
DESCRIPTION:tracefile expiration specifies the duration in minutes before
tracefiles in bdump are automatically deleted.
NAME:archivelog retention hours
VALUE:24
DESCRIPTION:ArchiveLog expiration specifies the duration in hours before
archive/redo log files are automatically deleted.
PL/SQL procedure successfully completed.
SQL>
サプリメンタルロギング
サプリメンタルロギングの確認
下記を見ると、
- SUPPLEMENTAL_LOG_DATA_MIN: NO(最小サプリメンタルロギング:無効)
- SUPPLEMENTAL_LOG_DATA_PK: NO(プライマリキーロギング:無効)
- SUPPLEMENTAL_LOG_DATA_UI: NO(ユニークインデックスロギング:無効)
SQL> SELECT supplemental_log_data_min, supplemental_log_data_pk, supplemental_log_data_ui
FROM v$database; 2
SUPPLEME SUP SUP
-------- --- ---
NO NO NO
SQL>
プライマリキーロギングを有効化
SQL> EXEC rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','PRIMARY KEY');
PL/SQL procedure successfully completed.
SQL>
プライマリーキーロギングの変更後、サプリメンタルロギングの確認
SQL> SELECT supplemental_log_data_min, supplemental_log_data_pk, supplemental_log_data_ui
FROM v$database; 2
SUPPLEME SUP SUP
-------- --- ---
IMPLICIT YES NO
SQL>
ユニークインデックスロギングを有効化
SQL> EXEC rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','UNIQUE');
PL/SQL procedure successfully completed.
SQL>
ユニークインデックスロギングの変更後、サプリメンタルロギングの確認
SQL> SELECT supplemental_log_data_min, supplemental_log_data_pk, supplemental_log_data_ui
FROM v$database; 2
SUPPLEME SUP SUP
-------- --- ---
IMPLICIT YES YES
SQL>
Statspack
Statspackのパラメータを確認
SQL> select * from stats$statspack_parameter;
DBID INSTANCE_NUMBER SESSION_ID SNAP_LEVEL NUM_SQL EXECUTIONS_TH PARSE_CALLS_TH DISK_READS_TH BUFFER_GETS_TH SHARABLE_MEM_TH VERSION_COUNT_TH PIN_STATSP ALL_I LAST_MODI UCOMMENT JOB SEG_PHY_READS_TH SEG_LOG_READS_TH SEG_BUFF_BUSY_TH SEG_ROWLOCK_W_TH SEG_ITL_WAITS_TH SEG_CR_BKS_RC_TH SEG_CU_BKS_RC_TH OLD_SQL_CA
---------- --------------- ---------- ---------- ---------- ------------- -------------- ------------- -------------- --------------- ---------------- ---------- ----- --------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ----------
1750295065 1 0 5 20 100 1000 1000 10000 20971520 20 FALSE FALSE 1000 10000 100 100 100 100 100 FALSE
SQL>
手動スナップショットを有効化
SQL> EXEC statspack.snap;
PL/SQL procedure successfully completed.
SQL>
自動スナップショットを有効化
SQL> @$ORACLE_HOME/rdbms/admin/spauto.sql
PL/SQL procedure successfully completed.
Job number for automated statistics collection for this instance
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Note that this job number is needed when modifying or removing
the job:
JOBNO
----------
4
Job queue process
~~~~~~~~~~~~~~~~~
Below is the current setting of the job_queue_processes init.ora
parameter - the value for this parameter must be greater
than 0 to use automatic statistics gathering:
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes integer 1000
Next scheduled run
~~~~~~~~~~~~~~~~~~
The next scheduled run for this job is:
JOB NEXT_DATE NEXT_SEC
---------- --------- --------------------------------
4 21-JAN-26 16:00:00
SQL>
スケジュールジョブの確認
SQL> SELECT job, next_date, interval, broken
FROM dba_jobs
WHERE what LIKE '%statspack%'
ORDER BY job; 2 3 4
JOB NEXT_DATE INTERVAL B
---------- --------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -
4 21-JAN-26 trunc(SYSDATE+1/24,'HH') N
SQL>
自動スナップショットを一時停止する
BROKENがYになっている。
SQL> EXEC DBMS_JOB.BROKEN(4, TRUE);
PL/SQL procedure successfully completed.
SQL>
--- 確認
SQL> SELECT job, next_date, interval, broken
FROM dba_jobs
WHERE what LIKE '%statspack%'
ORDER BY job; 2 3 4
JOB NEXT_DATE INTERVAL B
---------- --------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -
4 01-JAN-00 trunc(SYSDATE+1/24,'HH') Y
SQL>
自動スナップショットを再開する
brokenが、Nに変わりました。
SQL> EXEC DBMS_JOB.BROKEN(4, FALSE);
PL/SQL procedure successfully completed.
SQL>
--- 確認
SQL> SELECT job, next_date, interval, broken
FROM dba_jobs
WHERE what LIKE '%statspack%'
ORDER BY job; 2 3 4
JOB NEXT_DATE INTERVAL B
---------- --------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -
4 21-JAN-26 trunc(SYSDATE+1/24,'HH') N
SQL>
自動スナップショットを完全に削除
dba_jobsから完全に消えました
SQL> EXEC DBMS_JOB.REMOVE(4);
PL/SQL procedure successfully completed.
SQL>
--- 確認
SQL> SELECT job, next_date, interval, broken
FROM dba_jobs
WHERE what LIKE '%statspack%'
ORDER BY job; 2 3 4
no rows selected
SQL>
スナップショットを確認
SQL> select SNAP_ID, TO_CHAR(snap_time, 'YYYY-MM-DD HH24:MI:SS') as snap_time , snap_level
2 FROM stats$snapshot
3 ORDER BY snap_id DESC;
SNAP_ID SNAP_TIME SNAP_LEVEL
---------- ------------------- ----------
8 2026-01-21 15:03:33 5
7 2026-01-21 15:03:32 5
6 2026-01-21 14:00:02 5
5 2026-01-21 13:18:36 5
4 2026-01-14 14:00:04 5
3 2026-01-14 13:00:00 5
2 2026-01-14 12:40:15 5
1 2026-01-14 12:32:24 5
8 rows selected.
SQL>
スナップショットを自動で削除
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'STATSPACK_PURGE_JOB',
job_type => 'PLSQL_BLOCK',
job_action => 'DECLARE
v_min_snap NUMBER;
v_max_snap NUMBER;
BEGIN
SELECT MIN(snap_id), MAX(snap_id)
INTO v_min_snap, v_max_snap
FROM stats$snapshot
WHERE snap_time < SYSDATE - 14;
IF v_min_snap IS NOT NULL THEN
statspack.purge(v_min_snap, v_max_snap);
END IF;
END;',
start_date => TRUNC(SYSDATE, 'HH') + 1/24, -- 次の毎時00分
repeat_interval => 'FREQ=HOURLY; BYMINUTE=0', -- 毎時00分
enabled => TRUE
);
END;
/
スナップショットを削除
SQL> select SNAP_ID, TO_CHAR(snap_time, 'YYYY-MM-DD HH24:MI:SS') as snap_time , snap_level
2 FROM stats$snapshot
3 ORDER BY snap_id DESC;
SNAP_ID SNAP_TIME SNAP_LEVEL
---------- ------------------- ----------
9 2026-01-21 16:03:25 5
8 2026-01-21 15:03:33 5
7 2026-01-21 15:03:32 5
6 2026-01-21 14:00:02 5
5 2026-01-21 13:18:36 5
4 2026-01-14 14:00:04 5
3 2026-01-14 13:00:00 5
2 2026-01-14 12:40:15 5
1 2026-01-14 12:32:24 5
EXEC statspack.purge(1, 4);
SQL> select SNAP_ID, TO_CHAR(snap_time, 'YYYY-MM-DD HH24:MI:SS') as snap_time , snap_level
2 FROM stats$snapshot
3 ORDER BY snap_id DESC
4 /
SNAP_ID SNAP_TIME SNAP_LEVEL
---------- ------------------- ----------
9 2026-01-21 16:03:25 5
8 2026-01-21 15:03:33 5
7 2026-01-21 15:03:32 5
6 2026-01-21 14:00:02 5
5 2026-01-21 13:18:36 5
SQL>
表領域
表領域の作成
SQL> CREATE TABLESPACE statspack_ts
2 DATAFILE '/u01/app/oracle/oradata/ORCL/statspack01.dbf'
3 SIZE 2G
4 AUTOEXTEND OFF
5 EXTENT MANAGEMENT LOCAL
6 SEGMENT SPACE MANAGEMENT AUTO;
Tablespace created.
SQL >
表領域の確認
SQL> SELECT tablespace_name FROM dba_tablespaces where tablespace_name='STATSPACK_TS';
TABLESPACE_NAME
------------------------------
STATSPACK_TS
SQL>
リソース
CPU使用率の確認
-- CPU使用率
SELECT
TO_CHAR(SYSDATE, 'HH24:MI:SS') as time,
ROUND((busy.value / (busy.value + idle.value)) * 100, 2) as cpu_usage_pct
FROM
(SELECT value FROM v$osstat WHERE stat_name = 'BUSY_TIME') busy,
(SELECT value FROM v$osstat WHERE stat_name = 'IDLE_TIME') idle;
メモリ使用率の確認
SQL> SELECT
name,
ROUND(value/1024/1024, 2) as value_mb
FROM v$pgastat
WHERE name = 'total PGA allocated';
2 3 4 5
NAME VALUE_MB
---------------------------------------------------------------- ----------
total PGA allocated 64.07
1 row selected.
ディスク使用率の確認
SQL> SELECT
2 ROUND(SUM(bytes)/1024/1024, 2) as size_mb
3 FROM dba_segments
4 WHERE owner = 'PERFSTAT';
SIZE_MB
----------
151.75
1 row selected.
Elapsed: 00:00:00.14
SQL>
データベース
現在のデータベースを確認
SQL> SELECT name FROM v$database;
NAME
---------
XXXX
SQL>
参考