oracle

Oracle Tips

undoセグメント使用状況

V$SESSIONとV$TRANSACTIONを結合し該当セッションにおける更新ブロックサイズを確認します。トランザクションが発生している間確認でき、終了とともに(commit/rollback)消えていきます。

select s.INST_ID,s.SID,s.SERIAL#,s.USERNAME,used_ublk,t.USED_UREC,t.STATUS,t.START_DATE
from gv$transaction t inner join gv$session s
on t.ADDR = s.TADDR
;

redo生成サイズ確認

v$sysstatの値を定期観測する事で、各種待機イベント発生状況が把握できる

統計情報の説明
set lin 100
COLUMN class_dec FORMAT A18
COLUMN name FORMAT A24
-- 
select s.STATISTIC# -- 統計番号
,decode(s.CLASS,1,'ユーザ',2,'REDO',4,'エンキュー',8,'キャッシュ',16,'OS',32,'RAC',64,'SQL',128,'デバッグ','???') class_dec
,s.NAME  --統計名K
,s.VALUE  -- 統計値
from v$sysstat s where name in ( 
'redo size' --生成されたREDOの合計バイト数
,'application wait time' --アプリケーションの待機クラスに属する待機の合計待機時間(100分の1秒単位)
)
;

ランダム文字列、乱数の生成

ROWIDとは

長くなったので以下に切り出しました

フルパス指定のファイル名部分を切り出す

意外と活躍します

select REGEXP_SUBSTR('/usr/oracle/app/kore.txt','[^/]*[^/]$') from dual
;
SQL> select REGEXP_SUBSTR('/usr/oracle/app/kore.txt','[^/]*[^/]$') from dual
  2  ;

REGEXP_S
--------
kore.txt

SQL>

テーブルとカラムへのコメント追加

長くなったので以下に切り出しました

よく使う環境変数

長くなったので以下に切り出しました

SQL*Plusでの見た目調整

列ヘッダー(見出し)を二段表示

COLUMN PARTITION_NAME HEADING 'PARTITION|NAME'

SQL*Plusで1行が長くなった場合(ハイフン)で

SQL*Plusでは1行が長くなった場合、”-” (ハイフン)で次の行に続ける事ができます。以下例はプロシージャをEXECで実行していますが、パラメータが多く横長になりすぎるので、ハイフンで改行しています。

exec DBMS_STATS.GATHER_TABLE_STATS(ownname => 'SOONI', -
tabname => 'TBL26', -
cascade => FALSE, -
method_opt => 'FOR COLUMNS AUTO_ID,COL5')
SQL> exec DBMS_STATS.GATHER_TABLE_STATS(ownname => 'SOONI', -
  2  tabname => 'TBL26', -
  3  cascade => FALSE, -
  4  method_opt => 'FOR COLUMNS AUTO_ID,COL5')

PL/SQLプロシージャが正常に完了しました。

SQL>

上記はexecを使ってPL/SQLステートメントを実行していましたが、以下のようにbegin/endで囲むブロック実行をするとハイフンを使う必要もなくなります。

begin
DBMS_STATS.GATHER_TABLE_STATS(ownname => 'SOONI',
tabname => 'TBL26',
cascade => FALSE,
method_opt => 'FOR COLUMNS AUTO_ID,COL5');
end;

アラートログファイルの所在を確認する

当方12cなので以下にありました。初期化パラメータ(v$parameter)にあるかと探したのですがなぜかみつからず、、
$ORACLE_BASE/diag/rdbms/<SID>/<SID>/trace/alert_<SID>.log
に存在します。

バッファキャッシュの内容を確認する

テーブルを異なる表領域へ移動

alter table SOONI.EX01 move TABLESPACE USERS
;

リソースの消費状況確認

select resource_name,
current_utilization now,
max_utilization max,
to_number(initial_allocation) init
from v$resource_limit
where limit_value != ' UNLIMITED'
and resource_name not like '\_%' escape '\'
order by resource_name;

各種ALTER TABLE

-- バッファキャッシュKEEPプールに読み込み
ALTER TABLE EX01 STORAGE(BUFFER_POOL KEEP)
;

--フルスキャンするとバッファキャッシュに保存される
ALTER TABLE EX01 cache
;

REDOログを調べる

UNUSED – オンラインREDOログが、まだ書き込まれていない
CURRENT – 現行のREDOログ。これは、REDOログがアクティブであることを意味する
ACTIVE – ログはアクティブだが、現行のログではない。クラッシュ・リカバリで必要
INACTIVE – ログがインスタンス・リカバリに不要になったことを示す。
CLEARING_CURRENT – クローズされたスレッドからカレント・ログが消去されることを示す
CLEARING – ALTER DATABASE CLEAR LOGFILE文の後、空のログとして再作成されていることを示す。ログの消去の後、状態がUNUSEDに変更される。

select
  group#     -- ロググループ番号
, thread#    -- ログスレッド番号
, sequence#  -- ログ順序番号 
, bytes/1024/1024 M_Byte     -- ログブロックサイズ
, members   
, status 
from v$log order by 1,2
;

テーブルを素早くバックアップ

ダイレクトパス(/*+ APPNED */)を記載すればさらに早くなるのでは、、と思いがちですがcreateしているので、無条件にダイレクト・パスモードが使われます。NOLOGGINGとすることで、作成するテーブルはREDOログを作成しなようになります。

create table CHECKSQL_BK nologging parallel as select * from CHECKSQL
;

本当にNOLOGGINGになっているのか確認する。

SQL> set sqlformat ansiconsole
SQL> select t.OWNER,t.TABLE_NAME,t.LOGGING from dba_tables t where t.TABLE_NAME = 'CHECKSQL';

      OWNER    TABLE_NAME    LOGGING
___________ _____________ __________
SCOTT      CHECKSQL      NO

SQL>

アーカイブログ出力モードになっているか

アーカイブログ出力モードへの切り替え

長くなったので以下に切り出しました

パッチ適用の確認

$ORACLE_HOME/OPatch/opatch lsinventory

データディクショナリに関するTips

データディクショナリ一覧を出力するSQL

データディクショナリは数が多くとても覚えられませんが以下SQLで一覧を確認する事ができます。

SELECT * FROM DICTIONARY 
;

DBリンク関するTips

DBリンク一覧を確認するSQLです。

select t.OWNER,t.DB_LINK,t.USERNAME,t.HOST,t.CREATED,t.HIDDEN from DBA_DB_LINKS t
;

マテビュ―に関するTips

テーブル情報に関するTips

各テーブルのPK一覧出力SQL
select
 c.OWNER
,c.constraint_name
,c.table_name
,e.position
,e.column_name
,c.CONSTRAINT_TYPE
,c.INDEX_NAME
 from
dba_constraints c,
dba_CONS_COLUMNS e
where 1=1
and e.OWNER = 'SCOTT'
and e.TABLE_NAME in ('EMP','ADDRESS')
and c.OWNER = e.OWNER
and c.constraint_name = e.constraint_name
and c.constraint_type = 'P'
order by c.OWNER,c.TABLE_NAME,c.constraint_name,e.column_name,e.position
;

PKを作成するSQL

alter table ex1 add constraint ex1_pk primary key (lno)
USING INDEX TABLESPACE TBS01
;

ユニークインデックスを作成するSQL

create unique index uni_idx_ex1 on ex1(c2)
;

カラムを追加するSQL

alter table ex1 add (c3 number)
;

カラムを削除するSQL

制約も含めて削除したい時は cascade constraints を最後に追加します。

alter table ex1 drop (c3)
;
スポンサーリンク
コピペで使う