隠しパラメータの確認方法

set lines 140 pages 10000
col parameter   format a40
col value       format a20
col description format a60

select
  a.ksppinm as parameter,
  b.ksppstvl as value,
  a.KSPPDESC as description
from x$ksppi a , x$ksppcv b
where a.indx = b.indx
and a.ksppinm Like '_%' ;

参考

http://system3support.jp/pdf/oracle_knowledge/100_technique/p296.pdf

設定されている初期化パラメータがデフォルト値か判断する

  • V$PARAMETER の ISDEFAULT 列から判断可能。

docs.oracle.com

  • ISDEFAULT 列の値が TRUE なら デフォルト値(または init.ora , spfile に指定されていない)
  • FALSE なら 任意に指定した値

試しに db_writer_processes を変更してみる。

SQL> -- 変更前のパラメータ値確認
show parameter db_writer_processes;SQL> 

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_writer_processes                  integer     1

SQL> -- 変更前、デフォルト値か否かを確認
set lines 120 pages 1000
col name           format a35
col value          format a25
col isdefault      format a9
col default_value  format a25 

select 
  name,
  value,
  isdefault,
  default_value
from v$parameter
where name = 'db_writer_processes';SQL> SQL> SQL> SQL> SQL> SQL> SQL>   2    3    4    5    6    7  

NAME                                VALUE                     ISDEFAULT DEFAULT_VALUE
----------------------------------- ------------------------- --------- -------------------------
db_writer_processes                 1TRUE0

# ISDEFAULT 列が TRUE なので現在デフォルト値、またはspfileに指定されていない値となっている。

SQL> -- パラメータ値変更
alter system set db_writer_processes = 3 scope = spfile;SQL> 

システムが変更されました。

SQL> -- DB 再起動
shutdown immediateSQL> 
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。

SQL> startup
ORACLEインスタンスが起動しました。

Total System Global Area 1392508928 bytes
Fixed Size                  8620608 bytes
Variable Size             469763520 bytes
Database Buffers          905969664 bytes
Redo Buffers                8155136 bytes
データベースがマウントされました。
データベースがオープンされました。

SQL> -- 変更後のパラメータ値確認
show parameter db_writer_processes;SQL> 

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_writer_processes                  integer     3

SQL> -- 変更後、デフォルト値か否かを確認
set lines 120 pages 1000
col name           format a35
col value          format a25
col isdefault      format a9
col default_value  format a25 

select 
  name,
  value,
  isdefault,
  default_value
from v$parameter
where name = 'db_writer_processes';SQL> SQL> SQL> SQL> SQL> SQL> SQL>   2    3    4    5    6    7  

NAME                                VALUE                     ISDEFAULT DEFAULT_VALUE
----------------------------------- ------------------------- --------- -------------------------
db_writer_processes                 3FALSE0

# ISDEFAULT 列が FALSE なので指定した値がセットされている。

ダブルクォーテーション「"」ではなくウムラウト「¨」が入力されてしまう時の対処

事象

想定しているダブルクォーテーション「"」ではなくウムラウト「¨」が入力される。

環境

OS: OracleLinux 6.7(VertualBox上の仮想マシン)
キーボード: Keychron k2(v1) ※英字キーボード

発生状況

ターミナルで vi を使用してファイル編集を試みていた。
ダブルクォーテーションを入力しようとしたところ「"」ではなくウムラウト記号「¨」が入力された。
念のため、ターミナル外でテキストファイルを開いて入力してみたが同様の結果だった。

対処

キーボードのレイアウト設定が「デッドキー付き」になっていたので、別のレイアウトに変更した。
※OS インストール時に自分で意図せず選択していたのかも。

対処手順

GUIで以下の対処を実施した。

  1. 画面上部バーにある「システム」を選択
  2. 「設定」を選択
  3. 「キーボード」を選択
  4. 「レイアウト」タブを選択
  5. 「追加」ボタンを選択
  6. 「国」で「アメリカ合衆国」を選択
  7. 「系列」で「英語(US)」を選択

雑記

デッドキーとやらが有効なレイアウトに設定していた事が原因で発生していたようです。

ja.wikipedia.org

自動UNDO管理から手動UNDO管理に変更したときの作業ログ

SQL> -- ロールバックセグメント用の表領域を作成
create tablespace rbs_test datafile '/u01/app/oracle/oradata/orcl/rbs01.dbf' size 10M;SQL> 

表領域が作成されました。

SQL> -- ロールバックセグメントを表領域上に作成
create rollback segment rbs_1 tablespace rbs_test;SQL> 

ロールバック・セグメントが作成されました。

-- 手動UNDO管理にするため、UNDO_MANAGEMENT を MANUAL に変更
SQL> alter system set UNDO_MANAGEMENT = 'MANUAL' scope=spfile;

システムが変更されました。

-- 変更を反映するため再起動
SQL> shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> startup
ORACLEインスタンスが起動しました。

Total System Global Area 1453092864 bytes
Fixed Size                  2253304 bytes
Variable Size             436211208 bytes
Database Buffers         1006632960 bytes
Redo Buffers                7995392 bytes
データベースがマウントされました。
データベースがオープンされました。

-- UNDO_NAMAGEMENT が MANUAL に変更されていることを確認
SQL> show parameter undo_management

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
undo_management                      string                            MANUAL

カーソルについての理解メモ

参考資料

Oracle Database SQLチューニング・ガイド
12c リリース2 (12.2)
カーソル共有によるReal-World Performanceの改善

プライベートSQL領域について

  • プライベートSQL領域には、解析済のSQL文に関する情報と、処理に使用するその他のセッション固有の情報が保持される。
  • サーバー・プロセスでSQLまたはPL/SQLのコードが実行される場合、プロセスではプライベートSQL領域を使用してバインド変数値、問合せ実行状態情報、問合せ実行作業領域が格納される。# Private SQL Area の中身って確認できないのかな。
  • 文の各実行におけるプライベートSQL領域は共有されず、異なる値やデータが含まれている可能性がある。

カーソルについて

  • カーソルは、特定のプライベートSQL領域の名前またはハンドル
  • カーソルには、バインド変数の値や結果セットなどのセッション固有の状態の情報が含まれている。 f:id:spaceman076:20201206113641j:plain
  • Client のデータ領域は、PGA のプライベートSQL領域を指しているカーソル。
  • PGA のプライベートSQL領域は、共有プール内にあるライブラリキャッシュ、またその中にある共有SQL領域内の解析済みSQL等を指すカーソル。

親カーソルと子カーソル

  • すべての解析済みのSQL文には、親カーソル子カーソルが存在する。
  • 親カーソルにはSQL文のテキストが保存される。2つのSQLのテキストが同一の場合、これらのSQLは同じ親カーソルを共有する。
  • 2つのSQLのテキストが異なる場合、データベースは別の親カーソルを作成する。
  • スキーマが別でSQL文が同一の場合も、親カーソルを共有する。(SQL文が同一なので)
  • 子カーソルには、実行計画、バインド変数、問合せで参照されるオブジェクトに関するメタデータオプティマイザ環境およびその他の情報が含まれている。親カーソルとは異なり、子カーソルにはSQL文のテキストは格納されていない。

VirtualBoxでGuestAdditionインストール後、ゲストOS起動時に、アイコンやメニューバーが表示されなくなる。

事象

VirtualBoxでゲストOS起動時に、デスクトップ画面のアイコンやメニューバーが消えた状態で表示される。(タイトルの通り)

環境

Oracle Linux 6.7

事象発生契機

Guest Additions をインストールし、OS再起動を実施後にアイコンやメニューバーが表示されない事を確認しました。

対処

グラフィックスコントローラーをVMSVGAからVBoxSVGAすると事象が解消しました。

対処手順

VirtualBoxで対象の仮想マシンを選択し「設定」→「ディスプレイ」→「グラフィックスコントローラー」で「VBoxSVGA」を選択。

WSL2無効後、VirtualBoxでのゲストOS起動がエラーで失敗する。

事象

WSL2を有効にすると、VertualBoxでゲストOS起動時にエラーが出て起動できなくなった。

そのため、WSL2を無効化することにした。(面白半分で入れただけなので)

VirtualBoxのバージョンが6.0だったので、とりあえず6.1にアップグレードした。

そして、WSL2を無効化した後、ゲストOS起動を試みたところ下記エラーが発生し失敗した。

Implementation of the USB 2.0 controller not found!
Because the USB 2.0 controller state is part of the saved VM state, the VM cannot be started. To fix this problem, either install the 'Oracle VM VirtualBox Extension Pack' or disable USB 2.0 support in the VM settings.
Note! This error could also mean that an incompatible version of the 'Oracle VM VirtualBox Extension Pack' is installed (VERR_NOT_FOUND).

対処

VirtualBox - 拡張パック(Extension Pack)をインストールする。

Oracle VM VirtualBox - ダウンロード

結果

改善した。

ゲストOS起動時にエラーは発生せず。