インスタンスメカニズム
SCN(システム変更番号)の確認
SCN:Oracleの内部時間
SELECT
CURRENT_SCN, --現在のSCN
CHECKPOINT_CHANGE# --直近のチェックポイントSCN
FROM V$DATABASE;
PL/SQL行トリガー例文
この記事はQiitaにも記載しております PL/SQL行トリガー例文 - Qiita
PL/SQL基礎中の基礎をメモとして残します。
<<行トリガーの作成>>
SQL> CREATE OR REPLACE TRIGGER 注文_在庫_TRIG
2 AFTER INSERT ON 注文 FOR EACH ROW
3 BEGIN
4 UPDATE 在庫
5 SET 在庫数 = 在庫数 - :NEW.注文数
6 WHERE 製品名 = :NEW.製品名;
7 END;
8 /
行トリガー例。
・2行目のタイミングには「BEFORE」もしくは「AFTER」を指定。
BEFOREであればDML処理の前に起動し、AFTERであればDML処理の後に起動。
・3行目のイベントには、トリガーの起動するDML文の種類、 すなわち「INSERT」「UPDATE」「DELETE」
・4行目には、このトリガーを設定する表の名前を指定
・「ON 表名」の後ろに「FOR EACH ROW」というキーワードがあれば行トリガーであり、なければ、文トリガー。
・OLDとNEW
:OLD.列名 ←DML操作前の列値
:NEW.列名 ←DML操作後の列値
参考サイト
連載 PL/SQLを使ってみよう!第38回「文トリガー、行トリガーの構文」 | 集合研修 システム・テクノロジー・アイ銀座会場
隠しパラメータ変更
試してないけれど、備忘録的に手順を残します。
隠しパラメータ変更は、oracleサポートの許可のもと変更すること
インスタンス再起動必要の可能性あり
--■変更前パラメータ確認
set linesize 130
col "parameter" for a30
col "description" for a50
col "value" for a20
SELECT
ksppinm as "parameter"
, ksppdesc as "description"
, ksppstvl as "value"
FROM x$ksppi
JOIN x$ksppcv USING (indx)
WHERE ksppinm IN ('[隠しパラメータ名]');
--■パラメータ変更
alter system set _ktb_debug_flags=8 scope = spfile;
--■変更後パラメータ確認
SELECT
ksppinm as "parameter"
, ksppdesc as "description"
, ksppstvl as "value"
FROM x$ksppi
JOIN x$ksppcv USING (indx)
WHERE ksppinm IN ('[隠しパラメータ名]');
表領域
対象表領域に存在するパーティションテーブルの構成を確認
SELECT OWNER,TABLE_NAME,PARTITIONING_TYPE,SUBPARTITIONING_TYPE,PARTITION_COUNT,DEF_SUBPARTITION_COUNT FROM ALL_PART_TABLES
WHERE OWNER='スキーマ名';
パーティションの定義の確認
SELECT
TABLE_OWNER,TABLE_NAME,
SUBPARTITION_COUNT as "サブパーティション数",
TABLESPACE_NAME,PARTITION_NAME as "パーティション名",
NUM_ROWS as "パーティション内の行数"
FROM DBA_TAB_PARTITIONS WHERE TABLE_OWNER='スキーマ名'AND TABLE_NAME='テーブル名';
V$ACTIVE_SESSION_HISTORY取得
set linesize 10000
set pagesize 1000
set trimspool on
set long 75
col sample_time for a25
col event for a60
col user_name for a20
col sql_text for a80
select
dhash.inst_id inst_id
, dhash.sample_time sample_time
, dhash.session_id
, dhash.time_waited time_waited
, dhash.event event
, dhash.user_id user_id
, (select username from dba_users where user_id = dhash.user_id) user_name
, dhash.sql_id sql_id
, (select sql_text from gv$sqltext where inst_id = dhash.inst_id and sql_id = dhash.sql_id and piece = 0 and rownum = 1) sql_text
--, dhash.p1 p1
--, dhash.p2 p2
--, dhash.p3 p3
from gv$active_session_history dhash
where to_date('yyyymmddhh24mi', 'yyyymmddhh24mi') <= sample_time
and sample_time < to_date('yyyymmddhh24mi', 'yyyymmddhh24mi')
;
Oracleマニュアル
【Oracle】ログ解析 - アラートログ
アラートログ
トラブルが起きた時、まずアラートログを参照する
アラートログは以下のような情報が出力されます。
ADR_HOME配下のDIAGNOSTIC_DEST/diag/rdbms/alert/<DBNAME>/<ORACLE_SID>/trace/alter_<ORACLE_SID>.logに出力される
- データベース起動、停止日時
- 全てのデフォルト値以外の初期化パラメータ
- バックグラウンド・プロセス起動
- ログ順序番号
- ログスイッチ情報
- 表領域の作成
- ALTER分の発行
- エラーメッセージ
トレースファイル
プロセスごとのログファイル
SMON,PMONなどのバックグラウンドプロセスがエラーを受け取った時に、それらをログとして出力する。
トレースの出力先ディレクトリを確認
SQL> select value from V$DIAG_INFO where name = 'Diag Trace';
VALUE
--------------------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/orcl/orcl/trace