Oracle 10046トレース・ファイルには、次のデータが含まれています。
*** SESSION ID:(501.50681) 2022-08-08T13:27:08.567565+02:00
*** CLIENT ID:() 2022-08-08T13:27:08.567584+02:00
...
WAIT #0: nam='SQL*Net message to client' ela= 1 driver id=1413697536 #bytes=1 p3=0 obj#=-1 tim=10287043490743
...
PARSE #140428862194944:c=204,e=203,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=422997890,tim=10287043504707
EXEC #140428862194944:c=103,e=103,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=422997890,tim=10287043504953
WAIT #140428862194944: nam='SQL*Net message to client' ela= 2 driver id=1413697536 #bytes=1 p3=0 obj#=-1 tim=10287043505039
...
私の問題がほとんど解決されたことを知っています時間をエポックミリ秒単位に変換/置換します。 しかし、私の場合は、「エポック」から始めたくなく、上記の日付から始めたいと思います。たとえば、"*** CLIENT ID:... 2022-08-08T13:27:08..." 。
したがって、「tim = 10287043490743」が8月8日13:27:08とほぼ同じであることがわかると、マイクロ秒文字列「tim = .....」が追加されたすべての項目を明確な日付と時刻の形式に変換する方法?
Oracle 10046トレース・ファイル構造の詳細については、INST2_ora_7504.trcファイルを例にします。
[oracle@machine sql]$ ls -l $tf
-rw-r----- 1 oracle asmadmin 2996974 Aug 8 13:39 /opt/.../rdbms/dbuniq_nam/INST2/trace/INST2_ora_7504.trc
ご覧のとおり、8月8日13:39に作成されました。
書き込み開始時にタイムスタンプを検索します。
[oracle@machine sql]$ grep "CLIENT ID" $tf
*** CLIENT ID:() 2022-08-08T13:27:08.567584+02:00
タイミング情報が初めて表示されます。
[oracle@machine sql]$ grep "tim=" $tf|head -1
WAIT #0: nam='SQL*Net message to client' ela= 1 driver id=1413697536 #bytes=1 p3=0 obj#=-1 tim=10287043490743
最後のもの:
[oracle@machine sql]$ grep "tim=" $tf|tail -1
CLOSE #140428862208536:c=8,e=9,dep=0,type=0,tim=10287767781596
ファイルには「tim =」を含む28756行が含まれています。 Oracleでは、SQLで必要なものを簡単に計算できます。
[oracle@machine sql]$ sqlplus / as sysdba
SQL> select to_date('2022-08-08 13:27:08','YYYY-MM-DD HH24:MI:SS')+((10287767781596/24/60/60/1000000) -
2 (10287043490743/24/60/60/1000000)) from dual;
TO_DATE('2022-08-08
-------------------
08/08/2022_13:39:12
願いより?最後の「tim =」値を取得してファイルヘッダーに含まれているタイムスタンプに追加し、その値をマイクロ秒単位で減算すると、ファイルが実際に13:39に書き込まれたことを確認できます(上記の「ls -l」に似ています)。 。
しかし、私はこれをしたいです。外部SQL / Oracleツール...
ありがとうございます。
ありがとう、
セブ
答え1
Linuxで「date」コマンドを簡単に処理できるかどうかわかりませんでした。
[oracle@machine sql]$ echo "(10287767781596/1000000)-(10287043490743/1000000)"|bc
724
[oracle@machine sql]$ date '+%Y-%m-%dT%T' --date="2022-08-08 13:27:08 CEST + 724 seconds"
2022-08-08T13:39:12
これは、上記のSQLコマンドで得られた結果と同じです。