Gblog

おもにTips

alter index rebuild

全くしらなかった。 記憶が消されてるのかも。 SQL> ALTER INDEX IND1_TAB1 REBUILD ONLINE;ALTER INDEX IND1_TAB1 REBUILD ONLINE *ERROR at line 1:ORA-14086: a partitioned index may not be rebuilt as a whole SQL>SQL> ALTER INDEX IND1_TAB1 REBUILD…

インストール時に指定した OSグループの話

絶対わすれるやつ。 $ORACLE_HOME/rdbms/lib/config.c.

RMAN のジョブ状況

とりあえず、以下を見ておけばよいと思う。 alter session set nls_date_Format = 'YYYY/MM/DD HH24:MI:SS';select * from v$session_longops where opname like '%RMAN%' and start_time > sysdate -24/24 order by start_time;select * from v$rman_backup…

オンライン再定義がオンラインでない件

オンライン再定義をテストしていたのですが、どうも5秒ほど TM enque 待ちが発生するので、基本のケースでテストしてみた。 こちらのブログを参考にしています。

SYS.AUD$ のパージ

SYS.AUD$ のパージ方法について確認していたところ。 標準監査と統合監査は一度に消せるのか? コマンドはこちら。 BEGIN DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL( AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, USE_LAST_ARCH_TIMESTAMP => FALSE,…

Throttle:絞り弁、スロットル

Backup Restore Throttle sleep という待機イベントの待機時間が結構長かったので調べてみたが、ドキュメントが全くない。 こちらのサイトがそれっぽい。 docs.dbmarlin.com 他にも、DBMS_BACKUP_RESTORE.SLEEP なるものがあったので少し触ってみた。

日時リテラル?

変な SQL を見つけたので、気になって調べてみた。 select ...... where UPDATE_DATE BETWEEN DATE'2024-10-21' ... こんな書き方、初めて見た。いつも TO_DATE つかってる。 マニュアルはこちら。 普通に使えるみたい。 SQL> select DATE'2024-10-21' from …

PGA を確認する SQL(あんちょこ用)

適当ですが、username で検索することが多いので。

同じ列に索引を作成できるらしい

全く知らなかったのですが、VISIBLE / INVISIBLE を使えば、同じ列に複数の索引をはれるらしいです。19c で確認。

INDEXが使用されているかどうかを確認するSQL

最近、INDEX を削除することが多い。 プランに影響あるかもなので、事前に使用されているかどうかチェックする SQL を使う。わりと使う。メモ用... set pages 1000 select sql_id,plan_hash_value from gv$sql_plan where object_name = 'INDEX_NAME'; selec…

ksq のトレース

ksq のトレース。 ALTER SESSION SET events='trace[ksq] disk medium'; これでとれるらしい。 www.dbi-services.com

pivot

WITH 句でベースのSELECT文を書いて、PIVOT 句でPIVOT するのがよいと思う。 ベースのSELECT は、キー+値な感じ。

リスナーログの読み方

100回ぐらい調べたので。 Timestamp * Connect Data [* Protocol Info] * Event [* SID | Service] * Return Code これ、レコードによって項目の数が違うのが、ほんとめんどくさい。 どうかと思うよ。

リテラルSQLの洗い出し

hard parse が多く、"% SQL with executions>1" が低かったので、リテラルSQLを調査した。(できればアプリ側で確認しろって思ってますが) FORCE_MATCHING_SIGNATURE を使えば、よしなにできる。

定義者権限の確認

プロシージャは定義者権限で動作する。 なので、別ユーザに Execute 権限を付与しても、実行するときはプロシージャのスキーマユーザで実行される。

STA ってDML かけても大丈夫だよね、の確認

こんな心配するのは自分だけかも。

ファイルが多すぎて ls が動かない

ファイルが多すぎると、ls が応答なくなるので対応方法について調べた。 ls | less -N

DDLの取得

最近DDLが長くてツライので、オプション設定をよくする。

ちょっと ASH を確認する SQL

なんかおきてるときに、確認するSQL set term offset markup csv onalter session set nls_date_format='YYYY/MM/DD HH24:MI:SS';spool a.logselect * from gv$active_session_history where SAMPLE_TIME >= cast(sysdate - 1/1440 as timestamp);spool off

V$ASM_DISKGROUP のはなし

たぶん、こんな感じの式 TOTAL_MB = COLD_USED_MB + HOT_USED_MB + FREE_MB USABLE_FILE_MB = (FREE_MB - REQUIRED_MIRROR_FREE_MB) / redundancy

V$SESSION_WAIT と V$SESSION_WAIT_CLASS

超似てるので注意。 V$SESSIONカレント・セッションごとのセッション情報 V$SESSION_WAIT各セッションについて現行または前回の待機 V$SESSION_WAIT_CLASS各セッションについて様々な待機イベント操作に要した時間 ここら辺も似てる。 V$SESSION_EVENTセッシ…

INTERVAL DAY TO SECOND 型と INTERVAL YEAR TO MONTH 型

しらなかった。 INTERVAL DAY TO SECOND はこんな感じ。 SQL> desc test1 Name Null? Type ----------------------------------------- -------- ---------------------------- ID NUMBER DAY1 DATE INT INTERVAL DAY(2) TO SECOND(6) SQL> select day1, int…

DUAL は権限なくても読める

へぇー SQL> grant create session to c identified by c; Grant succeeded. SQL> conn c/c Connected. SQL> select * from dual; DUM --- X SQL> exit

OS認証ってつかったことない

まずは OS ユーザを作成。適当に。 # useradd tiger

UNUSABLE な索引は、セグメントが開放されている。

しらなかった。。。 SQL> create table tab1 as select * from v$parameter; Table created. SQL> create index tab1i1 on tab1 (num); Index created. SQL> col OWNER for a10 SQL> col SEGMENT_NAME for a10 SQL> select OWNER,SEGMENT_NAME,EXTENTS from …

UNION と UNION ALL と MINUS と INTERSECT

4つの集合演算子。 複数の問合せを組み合せることができる。 優先順位はすべて同じ。括弧によって順序の指定がない限り上から(左から)順に評価する。 イメージはこんな。

SYSDATE と CURRENT_DATE

CURRENT_DATE ってあまり使ったことない。 SYSDATEDBサーバのシステム日付。DATE型 CURRENT_DATEDBサーバのシステム日付を、セッションのタイムゾーンに合わせて返す。DATE型 元のデータは同じはず。

UNDOブロックの使用量を監視する

以下のシェルで毎秒の UNDO BLOCK を確認できる。 #!/bin/sh ( echo "set lin 120 pages 1000 feed on" echo "conn / as sysdba" while [ 1 ] do echo "select used_ublk from v\$transaction t, v\$session s where t.addr = s.taddr and s.username='XXX';…

oradebug で 10046

oradebug のコマンドも忘れるので。 select spid,pid,sid,s.username,s.program from v$session s,v$process p where s.paddr = p.addr;oradebug setospid <spidを指定>oradebug unlimit oradebug event 10046 trace name context forever,level 10oradebug event 10046 </spidを指定>…

inactive account time job なるジョブ

inactive account time job なる内部ジョブがあるらしい。 どうやら、プロファイルの INACTIVE_ACCOUNT_TIME に関連して動くジョブのようです。 CREATE PROFILE INACTIVE_ACCOUNT_TIMEユーザー・アカウントがロックされるまでの連続非ログイン日数の許容値を…