1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Oracle コマンド & SQL メモ

1
Last updated at Posted at 2025-12-21

背景・目的

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>

参考

1
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?