scriptコマンドメモ
scriptコマンドについてメモ
LANG環境変数は下記
[oracle@oracledev ~]$ printenv | grep LANG LANG=ja_JP.UTF-8
scriptコマンドで作業ログを取る際に制御コードが入ってしまうという話を聞いて 試してみた。
script を実行して、一連の作業を記録した際の標準出力(ターミナルの出力を手動でコピーしてテキストに貼り付けたもの)
[oracle@oracledev ~]$ script operation.log スクリプトを開始しました、ファイルは operation.log です [oracle@oracledev ~]$ ls -l 合計 92 -rw-r-----. 1 oracle oinstall 26593 11月 3 14:06 2019 dbca.rsp drwxrwxrwx. 5 oracle oinstall 4096 5月 9 15:51 2021 examples -rw-r--r--. 1 oracle oinstall 0 3月 13 15:56 2022 operation.log -rwxr-xr-x. 1 oracle oinstall 281 6月 2 21:02 2021 ora12201.env drwxr-xr-x. 4 oracle oinstall 4096 6月 27 16:52 2021 project drwxr-xr-x. 3 oracle oinstall 4096 11月 28 15:20 2021 work drwxr-xr-x. 2 oracle oinstall 4096 11月 2 22:21 2019 ダウンロード drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 テンプレート drwxr-xr-x. 2 oracle oinstall 4096 11月 3 13:39 2019 デスクトップ drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 ドキュメント drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 ビデオ drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 音楽 drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 画像 drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 公開 [oracle@oracledev ~]$ cat ora12201.env export ORACLE_SID=orcl export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH export NLS_LANG=Japanese_Japan.AL32UTF8 #export NLS_LANG=American_America.US8PC437 export ORACLE_UNQNAME=orcl export JAVA_HOME=$ORACLE_HOME/jdk [oracle@oracledev ~]$ [oracle@oracledev ~]$ cd /u01/app/ [oracle@oracledev app]$ ll 合計 8 drwxrwx---. 5 oracle oinstall 4096 11月 2 22:55 2019 oraInventory drwxrwxr-x. 10 oracle oinstall 4096 11月 3 14:06 2019 oracle [oracle@oracledev app]$ cd oracle/ [oracle@oracledev oracle]$ ll 合計 32 drwxr-x---. 3 oracle oinstall 4096 11月 3 14:06 2019 admin drwxr-x---. 3 oracle oinstall 4096 11月 3 14:24 2019 audit drwxr-x---. 5 oracle oinstall 4096 11月 3 15:07 2019 cfgtoollogs drwxr-xr-x. 2 oracle oinstall 4096 11月 2 23:50 2019 checkpoints drwxrwxr-x. 21 oracle oinstall 4096 11月 2 22:55 2019 diag drwxr-x---. 3 oracle oinstall 4096 11月 3 14:06 2019 fast_recovery_area drwxr-x---. 3 oracle oinstall 4096 11月 3 14:06 2019 oradata drwxr-xr-x. 3 oracle oinstall 4096 11月 2 22:51 2019 product [oracle@oracledev oracle]$ cd diag/rdbms/orcl/orcl/trace/ [oracle@oracledev trace]$ ls -l alert_orcl.log -rw-r-----. 1 oracle oinstall 581609 3月 13 15:55 2022 alert_orcl.log [oracle@oracledev trace]$ tail -n 20 alert_orcl.log Closing scheduler window Closing Resource Manager plan via scheduler window Clearing Resource Manager plan via parameter 2021-12-29T07:00:13.653893+09:00 Thread 1 advanced to log sequence 47 (LGWR switch) Current log# 2 seq# 47 mem# 0: /u01/app/oracle/oradata/orcl/redo02.log 2021-12-29T13:46:47.889999+09:00 Warning: VKTM detected a forward time drift. Time drifts can result in unexpected behavior such as time-outs. Please see the VKTM trace file for more details: /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_vktm_3111.trc 2022-03-13T15:55:01.398383+09:00 Warning: VKTM detected a forward time drift. Time drifts can result in unexpected behavior such as time-outs. Please see the VKTM trace file for more details: /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_vktm_3111.trc 2022-03-13T15:55:32.468230+09:00 TABLE SYS.WRP$_REPORTS: ADDED INTERVAL PARTITION SYS_P1046 (4455) VALUES LESS THAN (TO_DATE(' 2022-03-14 01:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) TABLE SYS.WRP$_REPORTS_DETAILS: ADDED INTERVAL PARTITION SYS_P1047 (4455) VALUES LESS THAN (TO_DATE(' 2022-03-14 01:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) TABLE SYS.WRP$_REPORTS_TIME_BANDS: ADDED INTERVAL PARTITION SYS_P1050 (4454) VALUES LESS THAN (TO_DATE(' 2022-03-13 01:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) [oracle@oracledev trace]$ [oracle@oracledev trace]$ [oracle@oracledev trace]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_oracledev-lv_root 26G 21G 4.6G 82% / tmpfs 2.0G 72K 2.0G 1% /dev/shm /dev/sda1 477M 79M 370M 18% /boot 01_shared 238G 186G 52G 79% /media/sf_01_shared [oracle@oracledev trace]$ exit exit スクリプトを終了しました、ファイルは operation.log です
catで作業ログoperation.logを表示
[oracle@oracledev ~]$ pwd /home/oracle [oracle@oracledev ~]$ ls -l 合計 100 -rw-r-----. 1 oracle oinstall 26593 11月 3 14:06 2019 dbca.rsp drwxrwxrwx. 5 oracle oinstall 4096 5月 9 15:51 2021 examples -rwxr-xr-x. 1 oracle oinstall 15364 10月 14 22:56 2019 hacker.png -rw-r--r--. 1 oracle oinstall 5421 3月 13 15:58 2022 operation.log -rwxr-xr-x. 1 oracle oinstall 281 6月 2 21:02 2021 ora12201.env drwxr-xr-x. 4 oracle oinstall 4096 6月 27 16:52 2021 project drwxr-xr-x. 3 oracle oinstall 4096 11月 28 15:20 2021 work drwxr-xr-x. 2 oracle oinstall 4096 11月 2 22:21 2019 ダウンロード drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 テンプレート drwxr-xr-x. 2 oracle oinstall 4096 11月 3 13:39 2019 デスクトップ drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 ドキュメント drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 ビデオ drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 音楽 drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 画像 drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 公開 [oracle@oracledev ~]$ cat operation.log スクリプトは 2022年03月13日 15時56分24秒 に開始しました[oracle@oracledev ~]$ ls -l 合計 92 -rw-r-----. 1 oracle oinstall 26593 11月 3 14:06 2019 dbca.rsp drwxrwxrwx. 5 oracle oinstall 4096 5月 9 15:51 2021 examples -rwxr-xr-x. 1 oracle oinstall 15364 10月 14 22:56 2019 hacker.png -rw-r--r--. 1 oracle oinstall 0 3月 13 15:56 2022 operation.log -rwxr-xr-x. 1 oracle oinstall 281 6月 2 21:02 2021 ora12201.env drwxr-xr-x. 4 oracle oinstall 4096 6月 27 16:52 2021 project drwxr-xr-x. 3 oracle oinstall 4096 11月 28 15:20 2021 work drwxr-xr-x. 2 oracle oinstall 4096 11月 2 22:21 2019 ダウンロード drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 テンプレート drwxr-xr-x. 2 oracle oinstall 4096 11月 3 13:39 2019 デスクトップ drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 ドキュメント drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 ビデオ drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 音楽 drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 画像 drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 公開 [oracle@oracledev ~]$ cat ora12201.env export ORACLE_SID=orcl export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH export NLS_LANG=Japanese_Japan.AL32UTF8 #export NLS_LANG=American_America.US8PC437 export ORACLE_UNQNAME=orcl export JAVA_HOME=$ORACLE_HOME/jdk [oracle@oracledev ~]$ [oracle@oracledev ~]$ cd /u01/app/ [oracle@oracledev app]$ ll 合計 8 drwxrwx---. 5 oracle oinstall 4096 11月 2 22:55 2019 oraInventory drwxrwxr-x. 10 oracle oinstall 4096 11月 3 14:06 2019 oracle [oracle@oracledev app]$ cd oracle/ [oracle@oracledev oracle]$ ll 合計 32 drwxr-x---. 3 oracle oinstall 4096 11月 3 14:06 2019 admin drwxr-x---. 3 oracle oinstall 4096 11月 3 14:24 2019 audit drwxr-x---. 5 oracle oinstall 4096 11月 3 15:07 2019 cfgtoollogs drwxr-xr-x. 2 oracle oinstall 4096 11月 2 23:50 2019 checkpoints drwxrwxr-x. 21 oracle oinstall 4096 11月 2 22:55 2019 diag drwxr-x---. 3 oracle oinstall 4096 11月 3 14:06 2019 fast_recovery_area drwxr-x---. 3 oracle oinstall 4096 11月 3 14:06 2019 oradata drwxr-xr-x. 3 oracle oinstall 4096 11月 2 22:51 2019 product [oracle@oracledev oracle]$ cd diag/rdbms/orcl/orcl/trace/ [oracle@oracledev trace]$ ls -l alert_orcl.log -rw-r-----. 1 oracle oinstall 581609 3月 13 15:55 2022 alert_orcl.log [oracle@oracledev trace]$ tail -n 20 alert_orcl.log Closing scheduler window Closing Resource Manager plan via scheduler window Clearing Resource Manager plan via parameter 2021-12-29T07:00:13.653893+09:00 Thread 1 advanced to log sequence 47 (LGWR switch) Current log# 2 seq# 47 mem# 0: /u01/app/oracle/oradata/orcl/redo02.log 2021-12-29T13:46:47.889999+09:00 Warning: VKTM detected a forward time drift. Time drifts can result in unexpected behavior such as time-outs. Please see the VKTM trace file for more details: /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_vktm_3111.trc 2022-03-13T15:55:01.398383+09:00 Warning: VKTM detected a forward time drift. Time drifts can result in unexpected behavior such as time-outs. Please see the VKTM trace file for more details: /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_vktm_3111.trc 2022-03-13T15:55:32.468230+09:00 TABLE SYS.WRP$_REPORTS: ADDED INTERVAL PARTITION SYS_P1046 (4455) VALUES LESS THAN (TO_DATE(' 2022-03-14 01:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) TABLE SYS.WRP$_REPORTS_DETAILS: ADDED INTERVAL PARTITION SYS_P1047 (4455) VALUES LESS THAN (TO_DATE(' 2022-03-14 01:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) TABLE SYS.WRP$_REPORTS_TIME_BANDS: ADDED INTERVAL PARTITION SYS_P1050 (4454) VALUES LESS THAN (TO_DATE(' 2022-03-13 01:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) [oracle@oracledev trace]$ [oracle@oracledev trace]$ [oracle@oracledev trace]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_oracledev-lv_root 26G 21G 4.6G 82% / tmpfs 2.0G 72K 2.0G 1% /dev/shm /dev/sda1 477M 79M 370M 18% /boot 01_shared 238G 186G 52G 79% /media/sf_01_shared [oracle@oracledev trace]$ exit exit スクリプトは 2022年03月13日 15時58分00秒 に終了しました[oracle@oracledev ~]$
lessでoperation.log を表示
スクリプトは 2022年03月13日 15時56分24秒 に開始しましたESC]0;oracle@oracledev:~^GESC[?1034h[oracle@oracledev ~]$ ls -l 合計 92 -rw-r-----. 1 oracle oinstall 26593 11月 3 14:06 2019 dbca.rsp drwxrwxrwx. 5 oracle oinstall 4096 5月 9 15:51 2021 ESC[0mESC[34;42mexamplesESC[0m -rwxr-xr-x. 1 oracle oinstall 15364 10月 14 22:56 2019 ESC[01;32mhacker.pngESC[0m -rw-r--r--. 1 oracle oinstall 0 3月 13 15:56 2022 operation.log -rwxr-xr-x. 1 oracle oinstall 281 6月 2 21:02 2021 ESC[01;32mora12201.envESC[0m drwxr-xr-x. 4 oracle oinstall 4096 6月 27 16:52 2021 ESC[01;34mprojectESC[0m drwxr-xr-x. 3 oracle oinstall 4096 11月 28 15:20 2021 ESC[01;34mworkESC[0m drwxr-xr-x. 2 oracle oinstall 4096 11月 2 22:21 2019 ESC[01;34mダウンロードESC[0m drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 ESC[01;34mテンプレートESC[0m drwxr-xr-x. 2 oracle oinstall 4096 11月 3 13:39 2019 ESC[01;34mデスクトップESC[0m drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 ESC[01;34mドキュメントESC[0m drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 ESC[01;34mビデオESC[0m drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 ESC[01;34m音楽ESC[0m drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 ESC[01;34m画像ESC[0m drwxr-xr-x. 2 oracle oinstall 4096 10月 14 22:47 2019 ESC[01;34m公開ESC[0m ESC[mESC]0;oracle@oracledev:~^G[oracle@oracledev ~]$ cat ora12201.env export ORACLE_SID=orcl export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH export NLS_LANG=Japanese_Japan.AL32UTF8 #export NLS_LANG=American_America.US8PC437 export ORACLE_UNQNAME=orcl export JAVA_HOME=$ORACLE_HOME/jdk ESC]0;oracle@oracledev:~^G[oracle@oracledev ~]$ ESC]0;oracle@oracledev:~^G[oracle@oracledev ~]$ cd ESC[K/u01/app/ora^G^HESC[ESC[ESC[K ESC]0;oracle@oracledev:/u01/app^G[oracle@oracledev app]$ ll 合計 8 drwxrwx---. 5 oracle oinstall 4096 11月 2 22:55 2019 ESC[0mESC[01;34moraInventoryESC[0m drwxrwxr-x. 10 oracle oinstall 4096 11月 3 14:06 2019 ESC[01;34moracleESC[0m ESC[mESC]0;oracle@oracledev:/u01/app^G[oracle@oracledev app]$ cd ora^Gcle/ ESC]0;oracle@oracledev:/u01/app/oracle^G[oracle@oracledev oracle]$ ll 合計 32 drwxr-x---. 3 oracle oinstall 4096 11月 3 14:06 2019 ESC[0mESC[01;34madminESC[0m drwxr-x---. 3 oracle oinstall 4096 11月 3 14:24 2019 ESC[01;34mauditESC[0m drwxr-x---. 5 oracle oinstall 4096 11月 3 15:07 2019 ESC[01;34mcfgtoollogsESC[0m drwxr-xr-x. 2 oracle oinstall 4096 11月 2 23:50 2019 ESC[01;34mcheckpointsESC[0m drwxrwxr-x. 21 oracle oinstall 4096 11月 2 22:55 2019 ESC[01;34mdiagESC[0m drwxr-x---. 3 oracle oinstall 4096 11月 3 14:06 2019 ESC[01;34mfast_recovery_areaESC[0m drwxr-x---. 3 oracle oinstall 4096 11月 3 14:06 2019 ESC[01;34moradataESC[0m drwxr-xr-x. 3 oracle oinstall 4096 11月 2 22:51 2019 ESC[01;34mproductESC[0m ESC[mESC]0;oracle@oracledev:/u01/app/oracle^G[oracle@oracledev oracle]$ cd diag/rdbms/tra^G^HESC[ESC[ESC[K12^G^HESC[ESC[Korcl/orcl/12^G^HESC[ESC[Ktrace/ ESC]0;oracle@oracledev:/u01/app/oracle/diag/rdbms/orcl/orcl/trace^G[oracle@oracledev trace]$ ls -l alert_orcl.log -rw-r-----. 1 oracle oinstall 581609 3月 13 15:55 2022 alert_orcl.log ESC]0;oracle@oracledev:/u01/app/oracle/diag/rdbms/orcl/orcl/trace^G[oracle@oracledev trace]$ tail -3ESC[ESC[Kn ESC[K20 alert_orcl.log Closing scheduler window Closing Resource Manager plan via scheduler window Clearing Resource Manager plan via parameter 2021-12-29T07:00:13.653893+09:00 Thread 1 advanced to log sequence 47 (LGWR switch) Current log# 2 seq# 47 mem# 0: /u01/app/oracle/oradata/orcl/redo02.log 2021-12-29T13:46:47.889999+09:00 Warning: VKTM detected a forward time drift. Time drifts can result in unexpected behavior such as time-outs. Please see the VKTM trace file for more details: /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_vktm_3111.trc 2022-03-13T15:55:01.398383+09:00 Warning: VKTM detected a forward time drift. Time drifts can result in unexpected behavior such as time-outs. Please see the VKTM trace file for more details: /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_vktm_3111.trc 2022-03-13T15:55:32.468230+09:00 TABLE SYS.WRP$_REPORTS: ADDED INTERVAL PARTITION SYS_P1046 (4455) VALUES LESS THAN (TO_DATE(' 2022-03-14 01:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) TABLE SYS.WRP$_REPORTS_DETAILS: ADDED INTERVAL PARTITION SYS_P1047 (4455) VALUES LESS THAN (TO_DATE(' 2022-03-14 01:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) TABLE SYS.WRP$_REPORTS_TIME_BANDS: ADDED INTERVAL PARTITION SYS_P1050 (4454) VALUES LESS THAN (TO_DATE(' 2022-03-13 01:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) ESC]0;oracle@oracledev:/u01/app/oracle/diag/rdbms/orcl/orcl/trace^G[oracle@oracledev trace]$ ESC]0;oracle@oracledev:/u01/app/oracle/diag/rdbms/orcl/orcl/trace^G[oracle@oracledev trace]$ ESC]0;oracle@oracledev:/u01/app/oracle/diag/rdbms/orcl/orcl/trace^G[oracle@oracledev trace]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_oracledev-lv_root 26G 21G 4.6G 82% / tmpfs 2.0G 72K 2.0G 1% /dev/shm /dev/sda1 477M 79M 370M 18% /boot 01_shared 238G 186G 52G 79% /media/sf_01_shared ESC]0;oracle@oracledev:/u01/app/oracle/diag/rdbms/orcl/orcl/trace^G[oracle@oracledev trace]$ exit exit スクリプトは 2022年03月13日 15時58分00秒 に終了しました (END)
確認結果
cat だと制御コードは表示されないが、lessでは制御コードが表示される。 (LANGの設定で変化しそう)
Oracle Database の高度な行圧縮機能を覗いてみた / JPOUG Advent Calendar Day 25
この記事は JPOUG Advent Calendar 2021 25日目の記事です。
24日目はみやくる(@miyacle0R)さんの記事「Azure SQL Database Ledger (Ledger/台帳)と Oracle Blockchain Table を比較してみた話」でした。
25日目は Oracle Advanced Compression の機能のひとつである、高度な行圧縮機能について、実際にブロックレベルでどのように圧縮されているかを確認します。理由はやってみたかったからです。
高度な行圧縮とは
Oracle Advanced Compression の機能のひとつで、OracleDatabase 12c から導入されました。
データ・ブロック内に格納された行データの重複値を排除することで圧縮を実現します。
データ・ブロックの先頭にシンボル表というものがあり、そこにはブロック内の行および列の重複値のコピーが格納されます。そして、ブロック内に存在する重複値はシンボル表を参照する短い値に置き換えられます。
また、挿入や更新の際、即時に圧縮が実行されるわけではなく、ブロック内のデータがデータ・ブロック内部で制御された閾値に達したタイミングで圧縮が実施されます。
参考情報
https://www.oracle.com/technetwork/jp/database/performance/acofaqotn-3861046-ja.pdf https://docs.oracle.com/cd/F19136_01/cncpt/tables-and-table-clusters.html#GUID-54EE5325-0894-4869-B3AD-8912D9B4A329 https://docs.oracle.com/cd/F19136_01/cncpt/logical-storage-structures.html#GUID-B248DC2A-3F65-42CF-ACA5-0B096CFCFC46
非圧縮表のデータ・ブロックを確認してみる
検証用に圧縮設定が有効でない表を作成後、テストデータを挿入し
それが含まれるデータ・ブロック を Block Dump として出力します。
SQL> -- テストユーザー作成 create user test identified by oracle default tablespace users;SQL> 2 3 ユーザーが作成されました。 SQL> grant connect, resource to test; 権限付与が成功しました。 SQL> alter user test quota 256m on users; ユーザーが変更されました。 SQL> -- テストテーブル作成(非圧縮) create table test.disable_compress_tbl ( col1 char(4) , col2 varchar2(15) );SQL> 2 3 4 5 表が作成されました。 SQL> -- 圧縮が有効か確認 col owner format a10 col table_name format a20 col compression format a10 col compress_for format a10 select owner, table_name, compression, compress_for from dba_tables where owner = 'TEST' and table_name = 'DISABLE_COMPRESS_TBL'; SQL> SQL> SQL> SQL> SQL> 2 3 4 5 6 7 8 OWNER TABLE_NAME COMPRESSIO COMPRESS_F ---------- -------------------- ---------- ---------- TEST DISABLE_COMPRESS_TBL DISABLED SQL> -- データ挿入(1000行) begin for i in 1..1000 loop insert into test.disable_compress_tbl(col1, col2) values(i,'MerryChristmas'); end loop; end; / SQL> 2 3 4 5 6 PL/SQLプロシージャが正常に完了しました。 / SQL> -- 統計情報収集 execute DBMS_STATS.GATHER_TABLE_STATS('TEST','DISABLE_COMPRESS_TBL');SQL> PL/SQLプロシージャが正常に完了しました。 SQL> -- テーブルのブロック数を確認 select table_name, avg_space, blocks from dba_tables where owner = 'TEST' and table_name = 'DISABLE_COMPRESS_TBL'; SQL> 2 3 4 5 6 7 TABLE_NAME AVG_SPACE BLOCKS -------------------- ---------- ---------- DISABLE_COMPRESS_TBL 0 5 SQL> -- file_id, block_id を確認 select dbms_rowid.rowid_to_absolute_fno(rowid, 'TEST', 'DISABLE_COMPRESS_TBL') file_id, dbms_rowid.rowid_block_number(rowid) block_id from test.disable_compress_tbl where col1 = 1; SQL> 2 3 4 5 FILE_ID BLOCK_ID ---------- ---------- 4 134 SQL> -- block dump を出力 alter system dump datafile 4 block 134; SQL> システムが変更されました。 [oracle@oracledev trace]$ ls -lrt 合計 11588 : -rw-r-----. 1 oracle oinstall 555487 12月 25 11:06 2021 alert_orcl.log -rw-r-----. 1 oracle oinstall 1073 12月 25 11:07 2021 orcl_ora_3117.trm -rw-r-----. 1 oracle oinstall 83280 12月 25 11:07 2021 orcl_ora_3117.trc <--★Block Dump :
上記で出力した、非圧縮表の Block Dump の内容を確認します。 (1行目~3行目の格納データを抜粋)
▼orcl_ora_3117.trc : block_row_dump: tab 0, row 0, @0x1f81 ★(1) tl: 23 fb: --H-FL-- lb: 0x1 cc: 2 col 0: [ 4] 31 20 20 20 col 1: [14] 4d 65 72 72 79 43 68 72 69 73 74 6d 61 73 ★(2) tab 0, row 1, @0x1f6a tl: 23 fb: --H-FL-- lb: 0x1 cc: 2 col 0: [ 4] 32 20 20 20 col 1: [14] 4d 65 72 72 79 43 68 72 69 73 74 6d 61 73 tab 0, row 2, @0x1f53 tl: 23 fb: --H-FL-- lb: 0x1 cc: 2 col 0: [ 4] 33 20 20 20 col 1: [14] 4d 65 72 72 79 43 68 72 69 73 74 6d 61 73 :
★(1)~★(2)の4行が、ひとつの行の情報です。
それぞれの項目は下記です。(確認できた項目のみ記載しています)
・tab 0 : テーブル番号
・row : 行番号
・tl : メタデータを含む行の長さ
・cc : カラムの数
たとえば★(2)行のデータであれば、
col 1(2番目のカラム)のカラム長は 14 byte で
格納されているデータはASCIIで "4d 65 72 72 79 43 68 72 69 73 74 6d 61 73" です。
変換すると "MerryChristmas" となります。
今回検証で使用するデータ・ブロック内の col 1 のデータはすべて同じのため
★(2)行と同値のデータが2行目、3行目...と続いています。
高度な行圧縮が有効な表のデータ・ブロックを確認してみる
非圧縮表と同様に、検証用の表を作成後 Block Dump を出力し、中身を確認します。
-- テストテーブル作成(高度な行圧縮が有効) SQL> create table test.enable_compress_tbl ( col1 char(4) , col2 varchar2(15) )row store compress advanced; 2 3 4 5 表が作成されました。 SQL> -- 圧縮が有効か確認 col owner format a10 col table_name format a20 col compression format a10 col compress_for format a10 select owner, table_name, compression, compress_for from dba_tables where owner = 'TEST' and table_name = 'ENABLE_COMPRESS_TBL';SQL> SQL> SQL> SQL> SQL> 2 3 4 5 6 7 8 OWNER TABLE_NAME COMPRESSIO COMPRESS_F ---------- -------------------- ---------- ---------- TEST ENABLE_COMPRESS_TBL ENABLED ADVANCED SQL> -- データ挿入(1000行) begin for i in 1..1000 loop insert into test.enable_compress_tbl(col1, col2) values(i,'MerryChristmas'); end loop; end; /SQL> 2 3 4 5 6 PL/SQLプロシージャが正常に完了しました。 SQL> -- 統計情報収集 execute DBMS_STATS.GATHER_TABLE_STATS('TEST','ENABLE_COMPRESS_TBL');SQL> PL/SQLプロシージャが正常に完了しました。 SQL> -- テーブルのブロック数を確認 select table_name, avg_space, blocks from dba_tables where owner = 'TEST' and table_name = 'ENABLE_COMPRESS_TBL';SQL> 2 3 4 5 6 7 TABLE_NAME AVG_SPACE BLOCKS -------------------- ---------- ---------- ENABLE_COMPRESS_TBL 0 5 SQL> -- file_id, block_id を確認 select dbms_rowid.rowid_to_absolute_fno(rowid, 'TEST', 'ENABLE_COMPRESS_TBL') file_id, dbms_rowid.rowid_block_number(rowid) block_id from test.enable_compress_tbl where col1 = 1; SQL> 2 3 4 5 FILE_ID BLOCK_ID ---------- ---------- 4 142 SQL> -- block dump を出力 alter system dump datafile 4 block 142;SQL> システムが変更されました。 [oracle@oracledev ~]$ ls -lrt /u01/app/oracle/diag/rdbms/orcl/orcl/trace/ : -rw-r-----. 1 oracle oinstall 1051 12月 25 15:47 2021 orcl_ora_3610.trm -rw-r-----. 1 oracle oinstall 163759 12月 25 15:47 2021 orcl_ora_3610.trc ★ -rw-r-----. 1 oracle oinstall 4692 12月 25 15:48 2021 orcl_mmon_3163.trm -rw-r-----. 1 oracle oinstall 26219 12月 25 15:48 2021 orcl_mmon_3163.trc -rw-r-----. 1 oracle oinstall 4668 12月 25 15:48 2021 orcl_gen0_3115.trm -rw-r-----. 1 oracle oinstall 26009 12月 25 15:48 2021 orcl_gen0_3115.trc
上記で出力した Block Dump の内容を確認します。(1行目~3行目の格納データを抜粋)
▼orcl_ora_3610.trc : block_row_dump: tab 0, row 0, @0x1f87 tl: 17 fb: --H-FL-- lb: 0x0 cc: 1 col 0: [14] 4d 65 72 72 79 43 68 72 69 73 74 6d 61 73 ★(3) bindmp: 02 4c d6 4d 65 72 72 79 43 68 72 69 73 74 6d 61 73 tab 1, row 0, @0x1f7e tl: 9 fb: --H-FL-- lb: 0x1 cc: 2 col 0: [ 4] 31 20 20 20 col 1: [14] 4d 65 72 72 79 43 68 72 69 73 74 6d 61 73 ★(4) bindmp: 2c 01 02 cc 31 20 20 20 00 tab 1, row 1, @0x1f75 tl: 9 fb: --H-FL-- lb: 0x1 cc: 2 col 0: [ 4] 32 20 20 20 col 1: [14] 4d 65 72 72 79 43 68 72 69 73 74 6d 61 73 bindmp: 2c 01 02 cc 32 20 20 20 00 :
※非圧縮表確認時に説明した項目については割愛します。
まず、★(3)の行で tab 0 のテーブルが、ひとつの列値(col 0)だけデータを持っていることが確認できます。 この tab 0 はシンボル表です。この中に、ブロック内の行および列の重複値のコピーが格納されます。 また、非圧縮表と異なり、bindmp という項目があります。これは圧縮された行データを示します。
なお、tab 1, row 0 以降から、シンボル表ではない、挿入した行データの情報となります。
下記に、今回出力された★(4)の bindmp の値と位置を記載します。
※4~8に格納された値の意味についてはわかりませんでした。
値の位置: 1 2 3 4 5 6 7 8 9 ──────────────────────────────────── bindmp: 2c 01 02 cc 32 20 20 20 00
- 1~3: 行のヘッダー情報
- 4~8: 不明(5番目の値は1ずつ増加しているので行番号?)
- 9 : シンボル表への参照を示します。(00 は tab 0, row 0 を参照している。)
なお、参照先 tab 0, row 0 は "4d 65 72 72 79 43 68 72 69 73 74 6d 61 73" となっており、 "MerryChristmas" が格納されています。
追加で確認
非圧縮表、高度な行圧縮が有効な表にて検証で挿入したデータが少なかったためか
使用ブロック数に差が出ませんでした。
なので、両方に9000行ほど追加して、使用するブロック数に差が出るか確認しました。
SQL> begin for i in 1001..9999 loop insert into test.disable_compress_tbl(col1, col2) values(i,'MerryChristmas'); end loop; end; / 2 3 4 5 6 PL/SQLプロシージャが正常に完了しました。 SQL> begin for i in 1001..9999 loop insert into test.enable_compress_tbl(col1, col2) values(i,'MerryChristmas'); end loop; end; / 2 3 4 5 6 PL/SQLプロシージャが正常に完了しました。 SQL> -- 統計情報収集 execute DBMS_STATS.GATHER_TABLE_STATS('TEST','DISABLE_COMPRESS_TBL');SQL> PL/SQLプロシージャが正常に完了しました。 SQL> -- 統計情報収集 execute DBMS_STATS.GATHER_TABLE_STATS('TEST','ENABLE_COMPRESS_TBL');SQL> PL/SQLプロシージャが正常に完了しました。 SQL> -- テーブルのブロック数を確認 select table_name, avg_space, blocks from dba_tables where owner = 'TEST' and table_name = 'DISABLE_COMPRESS_TBL';SQL> 2 3 4 5 6 7 TABLE_NAME AVG_SPACE BLOCKS ----------------------------------- ---------- ---------- DISABLE_COMPRESS_TBL 0 35 ★非圧縮表 SQL> -- テーブルのブロック数を確認 select table_name, avg_space, blocks from dba_tables where owner = 'TEST' and table_name = 'ENABLE_COMPRESS_TBL';SQL> 2 3 4 5 6 7 TABLE_NAME AVG_SPACE BLOCKS ----------------------------------- ---------- ---------- ENABLE_COMPRESS_TBL 0 20 ★高度な行圧縮が有効な表
高度な行圧縮が有効な表では、使用ブロック数が少ない事を確認できました。
まとめ
高度な行圧縮について、データ・ブロック内で行データの重複値のコピーをシンボル表に格納している事が確認できました。
また、データ・ブロック内に存在する圧縮された行データについて、シンボル表を参照する短い値に置き換わる事を確認できました。
高度な行圧縮を有効にした場合、使用するブロック数が少なく済む事が確認できました。
主な参考情報
Block Dump の出力や内容の確認方法については、下記エントリを参考にしました。
Oracle Database のデータ・ブロックのダンプとその解析 - ぱと隊長日誌
また、シンボル表や bindmp の確認については、下記エントリを参考にしました。
Oracle 11g検証 Advanced Compression その4 - InsightTechnology 旧ブログ
Oracle 11g検証 Advanced Compression その5 - InsightTechnology 旧ブログ
Oracle 11g検証 Advanced Compression その6 - InsightTechnology 旧ブログ
最後に
ノリと勢いで登録してしまった人生で初めての Advent Calendar でしたが
適度なプレッシャーがあり、書いていて楽しかったです。
もうクリスマスは終わりそうですが(現在 12/25 22:44)
みなさま、よいクリスマス&よいお年を!
(また来年も書きたーい!)
OracleDatabaseの制御ファイルを覗いてみた
目的
OracleDatabase の制御ファイルはバイナリファイルである。 このバイナリファイルの中に、どのような情報が記述されているのか実際に確認してみたい。
検討
以下3つの方法で確認してみる。
・cat
・strings
・od --strings
catコマンドで確認
[oracle@oracledev check_ctlfile]$ ll 合計 20704 -rw-r--r--. 1 oracle oinstall 10600448 11月 28 15:22 2021 cat_ctlfile.log -rw-r-----. 1 oracle oinstall 10600448 11月 28 15:21 2021 control01.ctl [oracle@oracledev check_ctlfile]$ cat control01.ctl �����@�}|{z���+� <�t\ORCL})�@G`�l�<�[�����$����������'��[��@�l�<c��@G`'���,����,����,����,���,��� �,��� �,��� �� ��������|)���B`|)�{)��}�B{)�|)����l�<ORC@@@�l�< �\��^ �l�<i<'u\�+<� H ddj �Ydd8[ddT\228`$&$&&�a��Hc `d�� e���o��Lr���s��,|ss(}��~22���|�����8�$$��� ���t��8�99��(@X��P�� � h@ @\�� 7 H8��,=�>qql?��|)�{)����l�<ORC@@@�l�< �\��^ �l�<i<'u\�+<� H ddj �Ydd8[ddT\228`$&$&&�a��Hc `d�� e���o��Lr���s��,|ss(}��~22���|�����8�$$��� ���t��8�99��(@X��P�� � h@ @\�� 7 H8��,=�>qql?��{)�z)��~8�\���@'8�'�l�<&orcl��@z)�j)���}V�a �@'�'�l�<&orcl��@j)�Z)��l=@%G����X@�@���@�@&� �@���@}V�a �@�@'���}V�a �@���������@�Z)�z)��V�@%G����X@�@���@�@&� �@���@}V�a �@�@'8}V�a �@���������@�z)�z)���n^ ��l�<�\���@H�\���@�� f ��l�<l?�\���@H�\���@��� &@��l�<�#�\���@G�\����z)�j)���n^ ��l�<}V�a �@G����������Y@�� f ��l�<2}V�a ��l�<l?}V�a@G����������Y@��d q �@G����������Y@��� &@��l�<�#}V�a �@F������������j)������������<���K/u01/app/oracle/oradata/orcl/redo01.log/u01/app/oracle/oradata/orcl/redo02.log/u01/app/oracle/oradata/orcl/redo03.log/u01/app/oracle/oradata/orcl/system01.dbf/u01/app/oracle/oradata/orcl/sysaux01.dbf/u01/app/oracle/oradata/orcl/undotbs01.dbf/u01/app/oracle/oradata/orcl/temp01.dbf/u01/app/oracle/oradata/orcl/users01.dbf<� C)���K/u01/app/oracle/oradata/orcl/redo01.log/u01/app/oracle/oradata/orcl/redo02.log/u01/app/oracle/oradata/orcl/redo03.log/u01/app/oracle/oradata/orcl/system01.dbf/u01/app/oracle/oradata/orcl/sysaux01.dbf/u01/app/oracle/oradata/orcl/undotbs01.dbf/u01/app/oracle/oradata/orcl/temp01.dbf/u01/app/oracle/oradata/orcl/users01.dbfC)�!!��""��##��$$��%%��&&��''��((��))��**��++��,,��--��..��//��00��11��22��33��44��55��66��77��88��99��::��;;��<<��==��>>��??��@@��AA��BB��CC��DD��EE��FF��GG��HH��II��JJ��KK��LL��MM��NN��OO��PP��QQ��RR��SS��TT��UU��VV��WW��XX��YY��ZZ��[[��\\��]]��^^��__��``��aa��bb��cc��dd��ee��ff��gg��hh��ii��jj��kk��ll��mm��nn��oo��pp��qq��rr��ss��tt��uu��vv��ww��xx��yy��zz��{{��||��}}��~~�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������*�� JSYSTEMSYSAUUNDOTBS1TEMPUSERS*��)��JSYSTEMSYSAUUNDOTBS1TEMPUSERS)����������&��$ $�l�<��?P&��%�� ��l�<��?P%����������������������������������Z)����'m�<�l�<���xm�<���'m�<����m�<���xm�a��n�a��m�<�v��p�<�v��n�<C���r�<C���p�<��s�<���r�<���)s����s�<���s�< ��)s�<e���t�< e���s�<�� v�< ���t�<P���w�< P�� v�<���z�< �z�<A�<�^]�? ��<�?A �^]�?� �n��?� ��<�?Xk ����?Xk �n��?/ ���?/ ����?(� ���@(� ���?�T�h @�T���@�����@���h M@�����T@����M@���ekU@�����T@�a�:�U@�a�ekU@���@���:�U@ٚ��V@ ٚ�@�W��V@ !�W��V@��AW@!"����V@N��ŖW@"#N�AW@���X@#$�ŖW@���@$%���X@�@�a �@%&�@���@}V�Z)��A)����'m�<�l�<���xm�<���'m�<����m�<���xm�a��n�a��m�<�v��p�<�v��n�<C���r�<C���p�<��s�<���r�<���)s����s�<���s�< ��)s�<e���t�< e���s�<�� v�< ���t�<P���w�< P�� v�<���z�< �z�<A�<�^]�? ��<�?A �^]�?� �n��?� ��<�?Xk ����?Xk �n��?/ ���?/ ����?(� ���@(� ���?�T�h @�T���@�����@���h M@�����T@����M@���ekU@�����T@�a�:�U@�a�ekU@���@���:�U@ٚ��V@ ٚ�@�W��V@ !�W��V@��AW@!"����V@N��ŖW@"#N�AW@���X@#$�ŖW@���@$%���X@�@�A)������������������g ��`]�?�l�<�z�<A �^]�?��<'u\@/u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_07/o1_mf_1_14_j99n6g7k_.arc�<�?�l�<A �^]�?� ��<�?D�<'u\@/u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_08/o1_mf_1_15_j9cd1w7q_.arcq��?�l�<� ��<�?Xk �n��?F<'u\@/u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_08/o1_mf_1_16_j9d36ys7_.arc���?�l�<Xk �n��?/ ����?9C<'u\@/u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_08/o1_mf_1_17_j9dr20qj_.arc��?�l�</ ����?(� ���?K<'u\@/u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_09/o1_mf_1_18_j9h2s2lp_.arc��@�l�<(� ���?�T���@�<'u\@/u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_06_02/o1_mf_1_19_jcgvjnt6_.arcj @�l�<�T���@���h @�`<'u\@/u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_06_02/o1_mf_1_20_jcgzgsbn_.arc��@�l�<���h @����@~_<'u\@/u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_06_16/o1_mf_1_21_jdmxhr62_.arc��7@�l�<����@�G���7@xa<'u\@/u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_07_08/o1_mf_1_22_jgf8z6mo_.arc�c;@�l�<�G���7@�b��c;@�<'u\@/u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_07_11/o1_mf_1_23_jgo1g51h_.arcg ��� ���`]�?�l�<�z�<A �^]�?��<'u\@/u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_07/o1_mf_1_14_j99n6g7k_.arc�<�?�l�<A �^]�?� ��<�?D�<'u\@/u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_08/o1_mf_1_15_j9cd1w7q_.arcq��?�l�<� ��<�?Xk �n��?F<'u\@/u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_08/o1_mf_1_16_j9d36ys7_.arc���?�l�<Xk �n��?/ ����?9C<'u\@/u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_08/o1_mf_1_17_j9dr20qj_.arc��?�l�</ ����?(� ���?K<'u\@/u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_09/o1_mf_1_18_j9h2s2lp_.arc��@�l�<(� ���?�T���@�<'u\@/u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_06_02/o1_mf_1_19_jcgvjnt6_.arcj @�l�<�T���@���h @�`<'u\@/u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_06_02/o1_mf_1_20_jcgzgsbn_.arc��@�l�<���h @����@~_<'u\@/u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_06_16/o1_mf_1_21_jdmxhr62_.arc��7@�l�<����@�G���7@xa<'u\@/u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_07_08/o1_mf_1_22_jgf8z6mo_.arc�c;@�l�<�G���7@�b��c;@�<'u\@/u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_07_11/o1_mf_1_23_jgo1g51h_.arcUK@�l�<�b��c;@?�UK@�<'u\@/u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_07_23/o1_mf_1_24_jhnxr02q_.arc� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �� �� �� �������������������������������z)��^ � �@��orcl� �'_�E'�XG6��(Hu\*sOA��x�`m��HN�HN����@���T@�k/<d�")�Sz8�����\�z)�{)��^ � �@��orcl� �'_�E'�XG6��(Hu\*sOA��x�`m��HN�HN����@���T@�k/<d�")�Sz8�����\�{)��� ���-�l�<�l�<�!!��""��##��$$��%%��&&��''��((��))��**��++��,,��--��..��//��00��11��22��33��44��55��66��7� ��]&�V � �8g �����U g �9|)���-|)�::)���-:)�;;��<<��==��>>��??��@@��AA��BB��C4���orcl���b�QE74p��b�p�����b����UNNAMED_INSTANCE_2UNNAMED_INSTANCE_3UNNAMED_INSTANCE_4UNNAMED_INSTANCE_5UNNAMED_INSTANCE_6UNNAMED_INSTANCE_7UNNAMED_INSTANCE_84�D;)����orclp����QE74����p��p�������UNNAMED_INSTANCE_2UNNAMED_INSTANCE_3UNNAMED_INSTANCE_4UNNAMED_INSTANCE_5UNNAMED_INSTANCE_6UNNAMED_INSTANCE_7UNNAMED_INSTANCE_8;)�Eh)�� "S�O� �X,od/ ����,h)�Fi)���S�O� �X,od}(���\-i)�GG��HH��II��JJ��K:)���-:)�L3���-3�MM��NN��OO��PP��QQ��RR��SS��TT��UU��VV��WW��XX��YY��ZZ��[[��\\��]]��^^��__��``��aa��bb��cc��dd��ee��ff��gg��hh��ii��jj��kk��ll��mm��nn��oo��pp��qq��rr��ss��tt��uu��vv��ww��xx��yy��zz��{{��||��}}��~~���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �� �� �� ������������������������������������� ��!!��""��#:)���[ACM unit testing operationLSB Database GuardSupplemental Log Data DDLLSB Role Change SupportRFS block and kill across RACRAC-wide SGAPDB Supplemental Log Data DDLDBMS_ROLLING managemenPL/SQL quiesce support Stop logical across RAC:)�$3���[ACM unit testing operationLSB Database GuardSupplemental Log Data DDLLSB Role Change SupportRFS block and kill across RACRAC-wide SGAPDB Supplemental Log Data DDLDBMS_ROLLING managemenPL/SQL quiesce support Stop logical across RAC3�%%��&&��''��((��))��**��++��,,��--��..��//��00��11��22��33��44��55��66��77��88��99��::��;;��<<��==��>>��??��@@��AA��BB��CC��DD��EE��FF��GG��HH��II��JJ��KK��LL��MM��NN��OO��PP��QQ��RR��SS��TT��UU��VV��WW��XX��YY��ZZ��[[��\\��]]��^^��__��``��aa��bb��cc��dd��ee��ff��gg��hh��ii��jj��kk��ll��mm��nn��oo��pp��qq��rr��ss��tt��uu��vv��ww��xx��yy��zz��{{��||��}}��~~���������:)��k.:)��3��h.3��:)��i.:)��3��n.3��:)��o.:)��3��l.3 [oracle@oracledev check_ctlfile]$
catでの確認結果
文字化けが多いが、データファイルのパスや生成されたアーカイブログが記録されているように見受けられる。 出力の最後の方に「unit testing operationLSB Database GuardSupplemental 」 等の記述があるが、よくわからない。
stringsコマンドで確認
[oracle@oracledev check_ctlfile]$ strings control01.ctl }|{z t\ORCL <ORCL <'u\ <ORCL <'u\ orcl orcl /u01/app/oracle/oradata/orcl/redo01.log /u01/app/oracle/oradata/orcl/redo02.log /u01/app/oracle/oradata/orcl/redo03.log /u01/app/oracle/oradata/orcl/system01.dbf /u01/app/oracle/oradata/orcl/sysaux01.dbf /u01/app/oracle/oradata/orcl/undotbs01.dbf /u01/app/oracle/oradata/orcl/temp01.dbf /u01/app/oracle/oradata/orcl/users01.dbf /u01/app/oracle/oradata/orcl/redo01.log /u01/app/oracle/oradata/orcl/redo02.log /u01/app/oracle/oradata/orcl/redo03.log /u01/app/oracle/oradata/orcl/system01.dbf /u01/app/oracle/oradata/orcl/sysaux01.dbf /u01/app/oracle/oradata/orcl/undotbs01.dbf /u01/app/oracle/oradata/orcl/temp01.dbf /u01/app/oracle/oradata/orcl/users01.dbf SYSTEM SYSAUX UNDOTBS1 TEMP USERS SYSTEM SYSAUX UNDOTBS1 TEMP USERS c;@? UK@} ekU@ ekU@ c;@? UK@} ekU@ ekU@ <'u\@ /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_07/o1_mf_1_14_j99n6g7k_.arc <'u\@ /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_08/o1_mf_1_15_j9cd1w7q_.arc <'u\@ /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_08/o1_mf_1_16_j9d36ys7_.arc <'u\@ /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_08/o1_mf_1_17_j9dr20qj_.arc <'u\@ /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_09/o1_mf_1_18_j9h2s2lp_.arc <'u\@ /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_06_02/o1_mf_1_19_jcgvjnt6_.arc <'u\@ /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_06_02/o1_mf_1_20_jcgzgsbn_.arc <'u\@ /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_06_16/o1_mf_1_21_jdmxhr62_.arc 7@xa <'u\@ /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_07_08/o1_mf_1_22_jgf8z6mo_.arc <'u\@ /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_07_11/o1_mf_1_23_jgo1g51h_.arc <'u\@ /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_07/o1_mf_1_14_j99n6g7k_.arc <'u\@ /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_08/o1_mf_1_15_j9cd1w7q_.arc <'u\@ /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_08/o1_mf_1_16_j9d36ys7_.arc <'u\@ /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_08/o1_mf_1_17_j9dr20qj_.arc <'u\@ /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_09/o1_mf_1_18_j9h2s2lp_.arc <'u\@ /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_06_02/o1_mf_1_19_jcgvjnt6_.arc <'u\@ /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_06_02/o1_mf_1_20_jcgzgsbn_.arc <'u\@ /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_06_16/o1_mf_1_21_jdmxhr62_.arc 7@xa <'u\@ /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_07_08/o1_mf_1_22_jgf8z6mo_.arc <'u\@ /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_07_11/o1_mf_1_23_jgo1g51h_.arc c;@? <'u\@ /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_07_23/o1_mf_1_24_jhnxr02q_.arc orcl (Hu\*sOA k/<d orcl (Hu\*sOA k/<d orcl QE74 UNNAMED_INSTANCE_2 UNNAMED_INSTANCE_3 UNNAMED_INSTANCE_4 UNNAMED_INSTANCE_5 UNNAMED_INSTANCE_6 UNNAMED_INSTANCE_7 UNNAMED_INSTANCE_8 orcl QE74 UNNAMED_INSTANCE_2 UNNAMED_INSTANCE_3 UNNAMED_INSTANCE_4 UNNAMED_INSTANCE_5 UNNAMED_INSTANCE_6 UNNAMED_INSTANCE_7 UNNAMED_INSTANCE_8 ACM unit testing operation LSB Database Guard Supplemental Log Data DDL LSB Role Change Support RFS block and kill across RAC RAC-wide SGA PDB Supplemental Log Data DDL DBMS_ROLLING management PL/SQL quiesce support Stop logical across RAC ACM unit testing operation LSB Database Guard Supplemental Log Data DDL LSB Role Change Support RFS block and kill across RAC RAC-wide SGA PDB Supplemental Log Data DDL DBMS_ROLLING management PL/SQL quiesce support Stop logical across RAC [oracle@oracledev check_ctlfile]$
stringsコマンドの確認結果
catの確認結果と比較すると、読みやすい。
以下の内容が読み取れる。
・SID
・REDOログのファイルパス
・各データファイルのファイルパス
・表領域名
・生成されたアーカイブログのファイルパス
・「UNNAMED_INSTANCE_n」という記述があるが、これが何なのかわからない。
・「ACM unit testing operation」等の記述が複数続いているが、これが何なのかわからない。
※「RAC」等の記述があるがシングルインスタンスで作成しているので当環境は非RAC。
od --stringsコマンドで確認
[oracle@oracledev check_ctlfile]$ od --strings control01.ctl 0040036 t\ORCL 1040037 <ORCL 1040464 <'u\ 1100037 <ORCL 1100464 <'u\ 1140344 orcl 1200344 orcl 1740036 /u01/app/oracle/oradata/orcl/redo01.log 1741052 /u01/app/oracle/oradata/orcl/redo02.log 1742066 /u01/app/oracle/oradata/orcl/redo03.log 1743102 /u01/app/oracle/oradata/orcl/system01.dbf 1744116 /u01/app/oracle/oradata/orcl/sysaux01.dbf 1745132 /u01/app/oracle/oradata/orcl/undotbs01.dbf 1746146 /u01/app/oracle/oradata/orcl/temp01.dbf 1747162 /u01/app/oracle/oradata/orcl/users01.dbf 2000036 /u01/app/oracle/oradata/orcl/redo01.log 2001052 /u01/app/oracle/oradata/orcl/redo02.log 2002066 /u01/app/oracle/oradata/orcl/redo03.log 2003102 /u01/app/oracle/oradata/orcl/system01.dbf 2004116 /u01/app/oracle/oradata/orcl/sysaux01.dbf 2005132 /u01/app/oracle/oradata/orcl/undotbs01.dbf 2006146 /u01/app/oracle/oradata/orcl/temp01.dbf 2007162 /u01/app/oracle/oradata/orcl/users01.dbf 13140032 SYSTEM 13140316 SYSAUX 13140602 UNDOTBS1 13141066 TEMP 13141352 USERS 13200032 SYSTEM 13200316 SYSAUX 13200602 UNDOTBS1 13201066 TEMP 13201352 USERS 14340120 <'u\@ 14340130 /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_07/o1_mf_1_14_j99n6g7k_.arc 14341230 <'u\@ 14341240 /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_08/o1_mf_1_15_j9cd1w7q_.arc 14342340 <'u\@ 14342350 /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_08/o1_mf_1_16_j9d36ys7_.arc 14343450 <'u\@ 14343460 /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_08/o1_mf_1_17_j9dr20qj_.arc 14344560 <'u\@ 14344570 /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_09/o1_mf_1_18_j9h2s2lp_.arc 14345670 <'u\@ 14345700 /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_06_02/o1_mf_1_19_jcgvjnt6_.arc 14347000 <'u\@ 14347010 /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_06_02/o1_mf_1_20_jcgzgsbn_.arc 14350110 <'u\@ 14350120 /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_06_16/o1_mf_1_21_jdmxhr62_.arc 14351220 <'u\@ 14351230 /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_07_08/o1_mf_1_22_jgf8z6mo_.arc 14352330 <'u\@ 14352340 /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_07_11/o1_mf_1_23_jgo1g51h_.arc 14400120 <'u\@ 14400130 /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_07/o1_mf_1_14_j99n6g7k_.arc 14401230 <'u\@ 14401240 /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_08/o1_mf_1_15_j9cd1w7q_.arc 14402340 <'u\@ 14402350 /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_08/o1_mf_1_16_j9d36ys7_.arc 14403450 <'u\@ 14403460 /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_08/o1_mf_1_17_j9dr20qj_.arc 14404560 <'u\@ 14404570 /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_05_09/o1_mf_1_18_j9h2s2lp_.arc 14405670 <'u\@ 14405700 /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_06_02/o1_mf_1_19_jcgvjnt6_.arc 14407000 <'u\@ 14407010 /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_06_02/o1_mf_1_20_jcgzgsbn_.arc 14410110 <'u\@ 14410120 /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_06_16/o1_mf_1_21_jdmxhr62_.arc 14411220 <'u\@ 14411230 /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_07_08/o1_mf_1_22_jgf8z6mo_.arc 14412330 <'u\@ 14412340 /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_07_11/o1_mf_1_23_jgo1g51h_.arc 14413440 <'u\@ 14413450 /u01/app/oracle/fast_recovery_area/orcl/ORCL/archivelog/2021_07_23/o1_mf_1_24_jhnxr02q_.arc 21640310 orcl 21700310 orcl 24140024 orcl 24140075 QE74 24140144 UNNAMED_INSTANCE_2 24140264 UNNAMED_INSTANCE_3 24140404 UNNAMED_INSTANCE_4 24140524 UNNAMED_INSTANCE_5 24140644 UNNAMED_INSTANCE_6 24140764 UNNAMED_INSTANCE_7 24141104 UNNAMED_INSTANCE_8 24200024 orcl 24200075 QE74 24200144 UNNAMED_INSTANCE_2 24200264 UNNAMED_INSTANCE_3 24200404 UNNAMED_INSTANCE_4 24200524 UNNAMED_INSTANCE_5 24200644 UNNAMED_INSTANCE_6 24200764 UNNAMED_INSTANCE_7 24201104 UNNAMED_INSTANCE_8 42140030 ACM unit testing operation 42140200 LSB Database Guard 42140350 Supplemental Log Data DDL 42140520 LSB Role Change Support 42140670 RFS block and kill across RAC 42141040 RAC-wide SGA 42141210 PDB Supplemental Log Data DDL 42141360 DBMS_ROLLING management 42141530 PL/SQL quiesce support 42141700 Stop logical across RAC 42200030 ACM unit testing operation 42200200 LSB Database Guard 42200350 Supplemental Log Data DDL 42200520 LSB Role Change Support 42200670 RFS block and kill across RAC 42201040 RAC-wide SGA 42201210 PDB Supplemental Log Data DDL 42201360 DBMS_ROLLING management 42201530 PL/SQL quiesce support 42201700 Stop logical across RAC [oracle@oracledev check_ctlfile]$
od --stringsコマンドでの確認結果
行の先頭は8進数の数値のように見受けられる。(意味はわからない)
それ以外はstringsコマンドの確認結果と同じに見える。
覗いてみて
OracleDatabase管理者ガイドでは、以下のように記載されている。
▼Oracle® Database データベース管理者ガイド 12c リリース2 (12.2)
制御ファイルの管理
制御ファイルはデータベースの物理構造を記録した小さなバイナリ・ファイルであり、すべてのOracle Databaseに含まれています。
制御ファイルには、次の情報が格納されています。
・データベース名
・対応するデータファイルとREDOログ・ファイルの名前と位置
・データベース作成のタイムスタンプ
・現行のログ順序番号
・チェックポイント情報
しかし、「データベース作成のタイムスタンプ」「現行のログ順序番号」「チェックポイント情報」らしき情報は確認できなかった。
VScodeで小文字、大文字に変換可能なショートカットを設定する
目的
VScodeで小文字、大文字を相互に変換できるようにする。
方法
キーボードショートカットを設定する。 「小文字に変換」「大文字に変換」という長いコマンドはあるが、ショートカットキーが設定されていないので、それを設定する。
手順
- Ctrl+K → Ctrl+S でキーボードショートカット設定画面へ遷移。
- 表示される検索窓で「editor.action.transformTo」と入力し検索。
- 「小文字に変換」「大文字に変換」のコマンドがあるが、ショートカットが設定されていない。
- 画面右上のアイコン「キーボードショートカットを開く(JSON)」を押下。
- 最初の[]内に以下をコピペする。
{ //A->a "key": "ctrl+l", "command": "editor.action.transformToLowercase", "when": "editorHasSelection && editorTextFocus" }, { //a->A "key": "ctrl+u", "command": "editor.action.transformToUppercase", "when": "editorHasSelection && editorTextFocus" },
完了
参考
sqlplusでログイン試行時にORA-01017発生
環境
OS: OracleLinux 6.9
DB: OracleDatabase 12.2.0.1 EE
発生状況
sqlplus でDBユーザーを指定してログインしようとしたら、ORA-01017 が発生した。
[oracle@oracledev ~]$ sqlplus oracle/oracle SQL*Plus: Release 12.2.0.1.0 Production on 水 6月 16 21:25:00 2021 Copyright (c) 1982, 2016, Oracle. All rights reserved. ERROR: ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。 ユーザー名を入力してください:
ユーザー名、またはパスワードが無効らしい。
とりあえず sys でログインしてユーザー一覧を確認してみたところ
そんなユーザーいなかった。
[oracle@oracledev ~]$ sql / as sysdba SQLcl: 水 6 16 21:37:29 2021のリリース12.2.0.1.0 RC Copyright (c) 1982, 2021, Oracle. All rights reserved. 接続先: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production SQL> select username from dba_users order by 1; USERNAME ----------------------------------------------------------------------------------------------------------------------------ANONYMOUS APEX_050000 APEX_PUBLIC_USER APPQOSSYS AUDSYS DBSFWUSER DBSNMP DIP FLOWS_FILES GGSYS GSMADMIN_INTERNAL GSMCATUSER GSMUSER OJVMSYS OLAPSYS ORACLE_OCM OUTLN REMOTE_SCHEDULER_AGENT SCOTT SYS SYS$UMF SYSBACKUP SYSDG SYSKM SYSRAC SYSTEM WMSYS XDB XS$NULL 29行が選択されました。
というわけで、「存在しないユーザー」を「存在するユーザー」と勘違いしていただけでした。
しょうもない原因ですが記録として残します。
ACID特性について
ACIDとは
トランザクションが持つべき以下4つの特性
- 不可分性(atomicity)
- 一貫性(consistency)
- 独立性(isolation)
- 永続性(durability)
不可分性(atomicity)
トランザクションに含まれるタスクがすべて実行されるか、あるいは全く実行されないかを保証する性質のこと。
アトミック性、原子性ともいう。
0か1かしか存在しない、というイメージ。
「すべて完了した状態」 or 「いっさい実行されていない状態」しか存在しないことを示す。
一貫性(Consistency)
一貫性、整合性ともいう。
データベース内のデータに常に矛盾が発生しないこと。
実行結果が矛盾した状態にならないこと。
たとえば預金残高に1万円しかないのに、5万円を送金する事はできない、など。
独立性(isolation)
トランザクション中に行われる操作が、他のトランザクションに影響を与えない、また与えられない性質のこと。
永続性(Durability)
トランザクションの処理結果が永続的であることを保証する性質のこと。
永続的=システム障害等で失われない、ということ。
参考情報
CDB,PDBにインストールされているコンポーネント一覧を表示
以下コマンドでCDB,PDBにインストールされているコンポーネント一覧を表示する
set lines 140 pages 1000 col con$name format a15 col comp_name format a45 col comp_id format a20 col status format a15 select con$name, comp_name, comp_id, status from cdb_registry order by 1,2;
CDBから実行した結果は以下
- CDB, PDB の結果ともに表示される
SQL> -- CDB に接続 alter session set container = cdb$root;SQL> セッションが変更されました。 SQL> -- 現在接続しているコンテナ名を表示 show con_name;SQL> CON_NAME ------------------------------ CDB$ROOT SQL> -- コンポーネント一覧表示 set lines 140 pages 1000 col con$name format a15 col comp_name format a45 col comp_id format a20 col status format a15 select con$name, comp_name, comp_id, status from cdb_registry order by 1,2;SQL> SQL> SQL> SQL> SQL> SQL> SQL> 2 3 4 5 6 7 CON$NAME COMP_NAME COMP_ID STATUS --------------- --------------------------------------------- -------------------- --------------- CDB$ROOT JServer JAVA Virtual Machine JAVAVM VALID CDB$ROOT OLAP Analytic Workspace APS VALID CDB$ROOT Oracle Application Express APEX VALID CDB$ROOT Oracle Database Catalog Views CATALOG VALID CDB$ROOT Oracle Database Java Packages CATJAVA VALID CDB$ROOT Oracle Database Packages and Types CATPROC VALID CDB$ROOT Oracle Multimedia ORDIM VALID CDB$ROOT Oracle OLAP API XOQ VALID CDB$ROOT Oracle Real Application Clusters RAC OPTION OFF CDB$ROOT Oracle Text CONTEXT VALID CDB$ROOT Oracle Workspace Manager OWM VALID CDB$ROOT Oracle XDK XML VALID CDB$ROOT Oracle XML Database XDB VALID CDB$ROOT Spatial SDO VALID ORA12201PDB Oracle Database Catalog Views CATALOG VALID ORA12201PDB Oracle Database Packages and Types CATPROC VALID ORA12201PDB Oracle Real Application Clusters RAC OPTION OFF ORA12201PDB Oracle Workspace Manager OWM VALID ORA12201PDB Oracle XML Database XDB VALID 19行が選択されました。
PDBから実行した結果は以下
- PDBの結果のみ表示される
SQL> -- PDB に接続 alter session set container = ora12201pdb;SQL> セッションが変更されました。 SQL> -- 現在接続しているコンテナ名を表示 show con_name;SQL> CON_NAME ------------------------------ ORA12201PDB SQL> -- コンポーネント一覧表示 set lines 140 pages 1000 col con$name format a15 col comp_name format a45 col comp_id format a20 col status format a15 select con$name, comp_name, comp_id, status from cdb_registry order by 1,2;SQL> SQL> SQL> SQL> SQL> SQL> SQL> 2 3 4 5 6 7 CON$NAME COMP_NAME COMP_ID STATUS --------------- --------------------------------------------- -------------------- --------------- ORA12201PDB Oracle Database Catalog Views CATALOG VALID ORA12201PDB Oracle Database Packages and Types CATPROC VALID ORA12201PDB Oracle Real Application Clusters RAC OPTION OFF ORA12201PDB Oracle Workspace Manager OWM VALID ORA12201PDB Oracle XML Database XDB VALID SQL>