tshizuku03の日記

主にoracleやLinuxコマンドについての記事を載せていきたいと思っています。

隠しパラメータ変更

試してないけれど、備忘録的に手順を残します。

隠しパラメータ変更は、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='テーブル名';
 

 

Data GuardとEC2

災害が起こった時のためのOracle Databaseのレプリケーション機能

 

Oracleでオンプレミスとクラウドのハイブリッドってできないかなと考えていて

EC2のように未使用時は、コストがかからないという考え方なら

バックアップ用DBはいけるのかな?と調べてみたらありました!

 

www.nkjmkzk.net

 

しかも、たまたま見つけた記事でしたが

私が尊敬するOracleエバンジェリストさんのブログじゃないですかΣ(・□・;)

 

さすがですね〜。同じ事すでに数年前に考えてたなんて感激です。

実際に実現できるかどうかは分かりませんが、私ももう少し調べてみたいと思います。

数年後の自分のために。

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マニュアル

V$SESSION

V$ACTIVE_SESSION_HISTORY

【Oracle】ログ解析 - アラートログ

アラートログ

トラブルが起きた時、まずアラートログを参照する

アラートログは以下のような情報が出力されます。

ADR_HOME配下のDIAGNOSTIC_DEST/diag/rdbms/alert/<DBNAME>/<ORACLE_SID>/trace/alter_<ORACLE_SID>.logに出力される

  • データベース起動、停止日時
  • 全てのデフォルト値以外の初期化パラメータ
  • バックグラウンド・プロセス起動
  • ログ順序番号
  • ログスイッチ情報
  • 表領域の作成
  • ALTER分の発行
  • エラーメッセージ

 

トレースファイル

 プロセスごとのログファイル

 SMON,PMONなどのバックグラウンドプロセスがエラーを受け取った時に、それらをログとして出力する。

/u01/app/oracle/diag/rdbms/<インスタンス名>/trace/.trc 

トレースの出力先ディレクトリを確認

SQL> select value from V$DIAG_INFO where name = 'Diag Trace';

VALUE
--------------------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/orcl/orcl/trace

 

参考資料

www.atmarkit.co.jp

【Oracle】SESSION

セッションの状況を診断し、対処方法を検討する

select sid, seq#, event p1, p2, p3, wait_time, seconds_in_wait, state

from v$session;  

列名意味
sid セッション識別子
seq# このセッションにおける待機シーケンス
event 現在待機中の待機イベント名称(または前回待機していたイベントの名称)
p1,p2,p3 待機の詳細を表す追加パラメータ(待機イベントにより意味は異なる)
wait_time 前回のイベントによる待機時間(待機中にのみ秒単位で時間が更新される)
wait_time_ 待機イベントによる待機時間(待機中に1マイクロ秒単位で更新される)
WAITING 待機時間が不明※

 

Oracleマニュアル:V$SESSION

【Oracle】プロセス数

プロセス数の確認

1.現在、インスタンスじょうで起動しているプロセス数の総数を確認します。

SQL> select count(*) from v$process;

COUNT(*)
----------
31    ←バックグラウンド・プロセス及びサーバ・プロセスの合計数

 

2.アプリケーションの確認

接続数の多いアプリケーションを確認できる

SQL> col PROGRAM for A40

SQL> select program,count(*) from v$process group by program; 

PROGRAM COUNT(*)
---------------------------------------- ----------
oracle@node1.oracle11g.jp (LGWR) 1
oracle@node1.oracle11g.jp (ARC2) 1
oracle@node1.oracle11g.jp (J001) 1
oracle@node1.oracle11g.jp (PMON) 1
oracle@node1.oracle11g.jp (RECO) 1
oracle@node1.oracle11g.jp (ARC0) 1
oracle@node1.oracle11g.jp (J000) 1
PSEUDO 1
oracle@node1.oracle11g.jp (DIAG) 1
oracle@node1.oracle11g.jp (DBRM) 1
oracle@node1.oracle11g.jp (CKPT) 1

PROGRAM COUNT(*)
---------------------------------------- ----------
oracle@node1.oracle11g.jp (SMON) 1
oracle@node1.oracle11g.jp (D000) 1
oracle@node1.oracle11g.jp (ARC3) 1
oracle@node1.oracle11g.jp (DIA0) 1
oracle@node1.oracle11g.jp (MMNL) 1
oracle@node1.oracle11g.jp (CJQ0) 1
oracle@node1.oracle11g.jp (MMON) 1
oracle@node1.oracle11g.jp (S000) 1
oracle@node1.oracle11g.jp (SMCO) 1
oracle@node1.oracle11g.jp (QMNC) 1
oracle@node1.oracle11g.jp (Q002) 1

PROGRAM COUNT(*)
---------------------------------------- ----------
oracle@node1.oracle11g.jp (VKTM) 1
oracle@node1.oracle11g.jp (TNS V1-V3) 1
oracle@node1.oracle11g.jp (Q001) 1
oracle@node1.oracle11g.jp (W000) 1
oracle@node1.oracle11g.jp (GEN0) 1
oracle@node1.oracle11g.jp (PSP0) 1
oracle@node1.oracle11g.jp (MMAN) 1
oracle@node1.oracle11g.jp (DBW0) 1
oracle@node1.oracle11g.jp (ARC1) 1

31行が選択されました。

 

3.実行しているプログラムやSQL文の確認

必要に応じて、発行されているSQL文や、実行しているプログラムを確認します。

select s.sid, s.username, p.pid, p.spid, s.program, a.sql_text

from v$session s, v$process p, v$sqlarea a

where s.paddr = p.addr

and (s.sql_id=a.sql_id or s.prev_sql_addr=a.address)

and  (s.sql_hash_value=a.hash_value or s.prev_hash_value=a.hash_value)

and p.pid in (select pid from v$process where program like '%TNS V1-V3%')

and s.audsid != USERENV('SESSIONID');

 p.pid in (select pid from v$process where program like '%TNS V1-V3%')

のlikeには、2で確認したプログラムを指定する