本稿ではOracle認定試験の1つであるORACLE MASTER Silver DBA 2019で必要とされる知識のうち,見直すべきポイントをまとめます。
インプット内容
Oracleデータベースアーキテクチャ
ORACLE_HOME・Oracleバージョン・Oracleデータベースの対応関係
ORACLE_HOMEとバージョンは1:1関係。ORACLE_HOMEとOracleデータベースは1:n関係。
インスタンス・SGA・バックグラウンドプロセス・データベースファイル・データファイルを構造化せよ
データベースを起動させるために必須となるファイルがデータファイル・REDOログファイル・制御ファイルであり,これらをデータベースファイルと呼ぶ。他のファイルとしては初期化パラメータファイルやパスワードファイル,アーカイブログファイルなどがある。
読み込みの順番を構造化すると,
- 初期化パラメータファイル → データベースファイル(制御+データ+REDOログ)
- 制御ファイル → データファイル+REDOログファイル
となる。これをインスタンス起動のフローに載せて理解すれば,
- SHUTDOWN:停止状態
- NOMOUNT:初期化パラメータを読み込んでインスタンス起動
- MOUNT:制御ファイルを読み込んでデータファイルとREDOログファイルをオープン
- OPEN:一般ユーザも利用可能な状態
となる。
インスタンスとデータベースファイルの対応関係
- シングルインスタンス構成の場合:1対1
- RAC(Real Application Clusters)構成の場合:n対1(データベースファイルは共有ストレージ装置に配置)
マルチテナント構成を説明せよ
1つのOracleデータベースの中に複数のOracleデータベース(に相当するもの)を配置できる構成。Oracleデータベース(に相当するもの)を指す概念がPDB(Pluggable Database)で,複数のPDBをラップする概念がCDB(Container Database)。RACと併用も可能で,併用した場合は複数のインスタンスがCDBに対応する。
表領域とは
データベースファイルを論理的にグループ化した概念
データファイルとセグメントの関係
- データファイルを均一のブロックに分割し,そのブロックをグループ化したものがエクステント
- セグメントは1つ以上のエクステントから構成される
「1つのエクステントを構成するデータブロックのサイズは同じになる」は正しいか
正しい。ブロック自体のサイズは同じという意味。筆者は当初「エクステントを構成するブロックの数は変えられるから正しくない」と判断したが,これは日本語の問題で,この選択肢はデータブロック自体について問われている文章だった。極論「1つのエクステントを構成する」という部分は不要という意味。分かりにくい。
仮にエクステントを構成するデータブロックの数が可変であることを問いたいのであれば「1つのエクステントを構成するデータブロックの数」のように,サイズではなく数という日本語を当てるだろう。
エクステント割当てタイプを説明せよ
セグメントを構成するエクステントのサイズを決める方式。AUTOALLOCATEにするとOracleが毎回いい感じに決めてくれる。
制御ファイルを多重化するためのパラメータ
CONTROL_FILES初期化パラメータ。複数のファイル名を指定すれば制御ファイルが多重化される。
メディアリカバリには何が必須か
ARCHIVELOGモード。高速リカバリー領域の確保のために
- DB_RECOVERY_FILE_DEST
- DB_RECOVERY_FILE_DEST_SIZE
を設定し,MOUNT状態まで起動した後に
- ALTER DATABASE ARCHIVELOG
を実行すればよい。
本質的に必須なのはALTER DATABASE ARCHIVELOGだけです。高速リカバリー領域は設定がなくてもメディアリカバリ可能です。高速リカバリー領域を設定しておけば,アーカイブログを含めリカバリー関連のファイルを格納する領域が指定できます。
SGAとは
System Global Areaの略称で,インスタンス起動時に割り当てられるメモリ領域のことを指す。SGAの中には例えばデータベースバッファキャッシュやREDOログバッファ等のコンポーネントが存在する。
DBWnとは
- データベースバッファキャッシュ内の変更をデータファイルに書き出す
CKPTとは
- DBWnに書き出し指示を出す
LGWRとは
- REDOログバッファ内の変更をREDOログファイルに書き出す
PMONとは
- 異常終了時のリソースクリーンアップを行う
- アイドル時間を超えたセッションの検知と強制終了
SMONとは
- 異常終了後のインスタンス起動時にリカバリーを行う
- 未使用の一時セグメントを解放する
MMONとは
- 性能分析で使用されるAWR(Automatic Workload Repository)スナップショット等の統計情報を収集する
ARCnとは
- ログスイッチの発生後にREDOログファイルのアーカイブログファイルとしてコピーする
LREGとは
- インスタンスの情報をリスナーに登録する
REDOログバッファからREDOログファイルへの書き出し指示を行うのは何か
サーバプロセス。「これを書き出してね」まで指示するが,即時書き出せという指示ではない。
REDOログバッファからREDOログファイルへの書き出しを実際に行うのは何か
LGWR
PGAをSGAと比較しながら説明せよ
PGA(Program Global Area)は特定のプロセス専用に確保されたメモリ領域のことを指し,SGAは共通領域,PGAは占有領域のようなイメージを持つとよい。
DBCA
DBCAの管理オプションでOEMCCを管理対象として登録する条件
- OMS(Oracle Management Service)が構成済み
- データベースサーバにOMA(Oracle Management Agent)が導入済み
sqlplus上でSYSユーザで接続する場合のおまじない
下記のように「as sysdba」を末尾に付与する。
# 事前にORACLE_SIDを定義する場合
ORACLE_SID=orcl
sqlplus sys/{パスワード} as sysdba
# 事前にORACLE_SIDを定義しない場合
sqlplus sys/{パスワード}@orcl as sysdba
sqlスクリプトの実行も@test.sqlのように記述するため,@の使い方の違いに注意してください。
EM Expressからデータベースを起動することはできるか
できない。データベースにEM Expressが梱包されているから。「XML DBを利用している」というワードが出ていたら,それはEM Express。
DBCAはデータベースを作成・削除できるか
両方できる。作成はできないと勘違いしていたので注意。
DBCAはPDBの作成・接続解除・削除・構成変更はできるか
全部できる。
ASMとは
Automatic Storage Managementの略称で,Oracle Database専用のボリュームマネージャ兼ファイルシステム機能。データファイル・REDOログ・制御ファイル・アーカイログ・TEMPファイル・RMANバックアップなどのデータベース関連ファイルを,ASMディスクグループ上で統合的に管理できる。ASMインスタンスがファイルの配置やストライピング・ミラーリングを自動的に行うため管理負荷が軽減される。DBCAでASMを使用しない場合はOSのファイルシステム上にファイルを配置することになる。
AL32UTF8のALとは
All Languageの略称。全世界の文字セットをサポートできるUnicode形式であることを示している。
SQL*PLUS起動時にOracleデータベースに接続しないコマンド
$ sqlplus /nolog
SQL> CONNECT system/password
DBCAからEM Cloud Controlをインストールできるか
できない。EM Cloud ControlはOracleデータベースとは独立した製品。「OMSとOMAが準備済みであればインストールできる」「DBCAではEm Cloud Controlの管理対象として登録できる」はいずれも正答で定番の選択肢なのでしっかり押さえておく。
DBCAではブロックサイズを設定できるか
できる
DBCAでは増分バックアップを構成できるか
できない
インスタンスの起動
「NOMOUNT状態からMOUNT状態にするためにstartup mountを利用する」は正しいか
正しくない。正しくはALTER DATABASE MOUNT。startupコマンドはSHUTDOWN状態で利用する。
データベースの作成はどの状態で行うか
NOMOUNT(制御ファイル読み込む前に作成する)
制御ファイルの作成はどの状態で行うか
NOMOUNT(制御ファイルを読み込むのがNOMOUNT→MOUNTであるから自明)
アーカイブログモードへの変更はどの状態で行うか
MOUNT(アーカイブログを読み込むのがMOUNT→OPENであるから自明)
データベース全体のリカバリ処理はどの状態で行うか
MOUNT(OPENだとできないから1つ戻すイメージ)
SHUTDOWN ABORT以外で行われる処理は何か
チェックポイント。データベースバッファキャッシュ上の全ての変更済みブロックをデータファイルに書き込む処理。
データディクショナリと動的パフォーマンスビュー
データディクショナリと動的パフォーマンスビューの格納先を述べよ
- データディクショナリ:SYSユーザ所有のSYSTEM表領域
- 動的パフォーマンスビュー:制御ファイル・インスタンス(SGA)
spfileとpfileはどちらがバイナリでどちらがテキストか
- spfile:バイナリ
- pfile:テキスト(非推奨)
spfileとpfileの格納先はどこか
- spfile:<ORACLE_HOME>/dbs/spfile<ORACLE_SID>.ora
- pfile:<ORACLE_HOME>/dbs/init<ORACLE_SID>.ora
ADRとOracleデータベースの関係を簡単に説明せよ
ADR(Automatic Diagnostic Repository)は,DIAGNOSTIC_DEST初期化パラメータで指定されたADRベースディレクトリ配下に格納されるログファイルの集合なので,Oracleデータベースとは独立して管理できる。というより,OracleデータベースのログをADRで管理できる。具体的には
- <DIAGNOSTIC_DEST>/diag/rdbms/<データベース名>/<ORACLE_SID>
にOracleデータベースのログは格納される。上記ディレクトリには該当データベースのアラートログやトレースファイルも配置される。アラートログは1つのインスタンスに対して1つだけ存在し,ファイル名は
- alert_<ORACLE_SID>.log
となる。トレースファイルは
- <ORACLE_SID>_<プロセス名>_<OSプロセス番号>.trc
のように複数存在するため注意。
SELECT TABLE_NAME FROM DBA_TABLESはどの状態で実行できるか
OPEN状態。データディクショナリの実体はデータファイルであるため。
「一般ユーザのパスワードはデータディクショナリに格納されている」は正しいか
正しい
動的パフォーマンスビューで読取り一貫性が保証されないのはなぜか
実体が表ではなメモリやインスタンスの内部カウンタ等を直接参照しており,UNDOを管理していないから
ADRはOracle Cloudwareの診断はサポートするか
する
ADRはASMの診断はサポートするか
する
ALTER SYSTEM SET句のデフォルトSCOPEは何か
BOTH。spileとインスタンスの両方に反映される。
ネットワーク
リスナーはある種のNATとして機能するが,どのようなNATか
データベースサービス名からインスタンスSIDを引くNAT
動的サービス登録と静的サービス登録を見分ける方法は何か
- 動的サービス登録:状態はREADY(DB側から登録したのでDBの状態が分かる)
- 静的サービス登録:状態はUNKNOWN(リスナーがファイルを読み取っただけでDBの状態が分からない)
共有サーバ接続と専用サーバ接続の違いは何か
- 共有サーバ接続:ユーザプロセスとサーバプロセスが1:1
- 専用サーバ接続:ユーザプロセスとサーバプロセスがm:n(ディスパッチャが仲介)
ローカル接続では常に専用サーバ接続となります。
リスナー設定の格納場所
<ORACLE_HOME>/network/admin/listener.ora
なお,<ORACLE_HOME>/network/adminはTNS_ADMIN環境変数を利用して変更できる。
LREGプロセスはリスナーの宛先はどこを見て判断するか
LOCAL_LISTENER初期化パラメータ
リスナーの状態を調べるコマンドは何か
lsnrctl services(Linuxのsystemdなどのイメージでservicesを見て状態を表示できる)
静的サービス登録はどのように行うか
listener.oraにリスナー情報を記述する
tnspingは何を見るツールか
指定した接続識別子によるリスナーへの接続可否。あくまでもリスナーまでしか見ないので選択肢に注意。リスナーがOracleデータベースに中継できるかどうかは保証しない。
ローカル接続だと接続モードに制限はあるか
専用サーバ接続しか使えない
共有サーバ接続を設定するためにはどこで何をする必要があるか
サーバ側でSHARED_SERVICESに1以上の値を設定する。クライアント側での設定は不要。
「データベースリンクはOracleデータベース同士でないといけない」は正しいか
一旦正しいと理解する。Oracleデータベース以外との接続の場合にはDatabase Gatewayを利用する。
データベースリンクを作成すると設定先から設定元へのアクセスも可能になるか
可能にならない。データベースリンクは一方向と覚える。PUBLICにしたとしても一方向。
ローカル接続の場合,リスナーは不要か
不要
共有サーバプロセスの役割は何か
リクエストキューに書き込まれた処理を行い,結果をレスポンスキューに書き込む
データベースリンクでは接続元と接続先で同一ユーザ名・パスワードのユーザを作成する必要はあるか
ない。ユーザを指定しないと接続元と同じユーザで接続されるが,接続先ユーザを指定することもできるため。つまり,接続元と接続先で異なるユーザを使うことができるということ。
CREATE DATABASE LINK文の設定値を説明せよ
CREATE DATABASE LINK <データベースリンク名>
CONNECT TO <接続先ユーザ名>
IDENTIFIED BY <接続先ユーザのパスワード>
USING <接続識別子>;
CREATE DATABASE LINK nagoya
CONNECT TO HR
IDENTIFIED BY PASSWORD
USING 'nagoya_db';
ユーザ・ロール・権限
ユーザ名とパスワードで大文字・小文字の区別はどのような扱いになるか
- ユーザ名:「" "」で囲った場合のみ区別する
- パスワード:「" "」で囲っても囲わなくても区別する
システム権限とオブジェクト権限で全てを委譲するコマンド
- GRANT ANY PRIVILEGE:システム権限
- GRANT ANY OBJECT PRIVILEGE:システム権限
OS認証の条件
OSのユーザ名に,OS_AUTHENT_PREFIX初期化パラメータで指定された接頭辞を付けたユーザがOracleデータベースのデータディショナリに登録されていること。OS_AUTHENT_PREFIXがデフォルトのops$でOSのユーザ名がorclだった場合,データディクショナリにはops$orclというユーザが登録されていなければいけない。ちなみに,そのユーザにはCREATE SESSION権限がないとデータベース接続の認可がされないため注意。
管理者権限の場合,Oracle Databaseインストール時に指定したOSグループにOSユーザが属している場合に認証,もしくはパスワードファイルを利用する仕組みになっています。SYSユーザがOPEN状態でなくともログイン可能にするためにデータベースディクショナリとは独立した設計になっています。
管理者認証がパスワード方式を利用する場合の条件
REMOTE_LOGIN_PASSWORD_FILE初期化パラメータをデフォルトのexclusiveにするかsharedにする必要がある。noneはダメ。
SYSユーザでリモート接続をしたい場合は,OS方式ではなくパスワード方式を利用する必要があります。
一時表領域とUNDO表領域にQuotaは割り当てられるか
割り当てられない
WITH ADMINオプション付きであるシステム権限を付与されたユーザはその権限を取り消せるか
取り消せる
オブジェクト権限のWITH GRANTオプションの場合は取り消しできないので注意です。オブジェクト権限はこの性質に加え,付与元の権限取り消しが伝播する性質の二点を押さえる必要があります。
OS認証を有効化するコマンド
CREATE USER文にIDENTIFIED EXTERNALLY句を付ける
プロファイルによるリソース制限を使用するために必要な設定
RESOURCE_LIMIT初期化パラメータをTRUEに設定する
管理権限をもつユーザのパスワード認証を行う際のファイル置き場
<ORACLE_HOME>/dbs/orapw<ORACLE_SID>
SET ROLE文ではユーザに対するロースの有効/無効は切り替えられるか
切り替えられない。セッションにおけるロールの有効/無効を切り替える。ユーザに対するロールの有効/無効はデフォルトロールやパスワード付きロールで制御する。
SCOTTユーザに任意の表領域の領域を無制限に割り当てるコマンド
GRANT UNLIMITED TABLESPACE TO SCOTT;
ALTER USER SCOTT QUOTA UNLIMITED;のような欠損SQLに騙されるな。ON <表領域名>が必要。
TESTロールに任意の表領域の領域を無制限に割り当てるコマンド
ロールにUNLIMITED TABLESPACEは付与できない
表領域とデータファイル
REDOとUNDOの格納場所の違いを説明せよ
- REDO:REDOバッファ(メモリ)→REDOログ(ディスク)→アーカイブ(ディスク)
- UNDO:UNDO表領域(ディスク)
UNDO表領域と一時表領域の違いは何か
- UNDO表領域:1つ以上のデータファイルで構成
- 一時表領域:1つ以上の一時ファイルで構成
エクステント管理方式を二つ述べよ
- ローカル管理(それぞれの表領域でエクステントを割当・管理)
- ディクショナリ管理(SYSTEM表領域でエクステントを割当・管理)
ディクショナリ管理は非推奨に向かっていて,ほとんどローカル管理とのことです。
エクステント割当ての方式と表領域の種類
- 永続表領域:AUTOALLOCATE or UNIFORM
- UNDO表領域:AUTOALLOCATE
- 一時表領域:UNIFORM
CREATE TABLESPACEのデフォルト値を説明せよ
- サイズ:100MB
- 自動拡張(AUTOEXTEND):有効
DROP TABLESPACEの挙動をまとめよ
- OMF無効:制御ファイル上のデータファイル情報を削除
- OMF有効:制御ファイル上のデータファイル情報に加え,ファイルシステム上のデータファイルも削除
狙われやすいパターンは下記。
- OMFが有効でオブジェクトが残っている:DROP TABLESPACE test INCLUDING CONTENS
- OMFが無効でDATAFILEも削除する:DROP TABLESPACE test INCLUDING CONTENS AND DATAFILES
空き領域の管理
セグメント領域管理方式はどの単位で設定されるか
表領域に対して設定される。なので,下記のように自動セグメント管理が有効になっている表領域tbs_autoを指定して表を作成すれば,その表では自動セグメント管理が行われることになる。
# tbs_autoは自動セグメント管理を有効にした表領域
CREATE TABLE t_auto (n NUMBER) TABLESPACE tbs_auto PCTFREE 15;
PCTFREEはどの単位で設定されるか
表に対して設定される
物理属性は表に対して設定されます。
遅延セグメント作成機能はローカル管理方式とディクショナリ管理方式のどちらでも利用可能か
ローカル管理方式でのみ利用可能
オンラインセグメント縮小のALTER TABLE emp SHRINK SPACEでCOMPCTの有無で何が変わるか
- COMPACTあり:セグメントの再編成だけを行い,HWMの引き下げと領域の解放は行わない
- COMPACTなし:セグメントの再編成に加え,HWMの引き下げと領域の解放を行う
COMPACTなので最低限のクリーンだけを行うイメージです。
オンラインセグメント縮小の条件は何か
- 対象の表について行移動が有効化されていること
- 対象の表が自動セグメント管理されていること
ちなみに,
- 行連鎖:最初から大きな行が複数ブロックに分かれて格納される状態(どんどん入れていく)
- 行移行:更新によって行が大きくなりPCTFREEによる確保分をはみ出してしまう状態(ポインタが残る)
と整理して覚えると分かりやすい。オンラインセグメント縮小はポインタだけ残っている状態を解消したいので行移行を有効にしていることが条件になっていると理解する。逆に,行連鎖は元々複数ブロックにまたがって行が格納されているため縮小しても旨味は得られにくい。
TRUNCATE時にエクステントは解放されるか
表の作成後に追加で割り当てられたエクステントは解放される。
- DROP STORAGE:表の作成後に追加で割り当てられたエクステントを解放
- DROP ALL STORAGE:すべてのエクステントを解放
- REUSE STORAGE:追加で割り当てられたエクステントを含めてすべて解放しない
これらをTRUNCATE文にくっつけると表記の挙動になる。
indexをUNUSABLEにすると索引定義・セグメント・表領域はそれぞれどうなるか
- セグメント:削除される
- 表領域:解放される
- 索引定義:削除されない
ALTER DATABASE MOVE DATAFILEでは表領域をOFFLINEにする必要はあるか
ない。OFFLINEにする必要があるのは以下。
# OFFFLINEにする必要あり
ALTER DATABASE RENAME FILE <移動前のpath> TO <移動後のpath>;
ALTER TABLESPACE <表領域名> RENAME DATAFILE <移動前のpath> TO <移動後のpath>;
# ONLINEのままでOK
ALTER DATABASE MOVE DATAFILE <移動前のpath> TO <移動後のpath>;
覚え方としては「ALTER DATABASE MOVE DATAFILE」のみ例外的にONLINEがOKと捉える。
DEFERED_SEGMENT_CREATIONのデフォルトは何か
TRUE
行が同時に作成されるDDLに対してDEFERED_SEGMENT_CREATIONがTRUEの場合何が起きるか
セグメント作成は遅延されない
ALTER TABLE <表名> SHRINK SPACE文では表をREAD ONLYにする必要はあるか
ない
REDOに対応するセグメントはあるか
ない
UNDO
トランザクションとUNDOセグメントの関係
n:1。複数のトランザクションが1つのUNDOセグメントに対応する。
一時表とREDOの関係について説明せよ
セッションやトランザクションが終了したら消えるデータを管理するのが一時表であり,永続化されるデータを復旧するためのデータがREDOであることから,一時表を使うとREDOの生成を抑えることができる。完全になくすことができないのは,一時表のデータ変更時にUNDOがUNDO表領域に出力され,この変更に対するREDOが生成されるから。
つまり,UNDOの出力先も一時表領域に変更すればREDOの生成を完全に抑えることができ,この方式を一時UNDO機能という。
UNDO_RETENTIONの単位は何か
秒
フラッシュバックドロップとUNDO/REDOの関係を説明せよ
そもそも関係ない
アウトプット時の引っかかり
「2つのRACデータベースで1つのインスタンスを共有することはできない」は正しいか
正しい。RAC構成においてはインスタンス:データベースはn対1であるため,データベース側が1を超えてしまってはいけない。「あるインスタンスは特定のデータベース専用」というおまじないを覚えておく。
RACではインスタンス側は別々のサーバに配置することはできるか
できる。可用性を高めるためと理解する。
異常終了時のリソース解放を行うバックグラウンドプロセス
PMON。SMONは「システムの頑張り屋さん」なのでリカバリーがメインで,定常的に一時セグメントを解放してくれるイメージ。MMONはManageability Monitorなので統計情報の監査的なイメージ。一方,PMONはプロセスなので異常終了時のクリーンナップやアイドル時間まわりの検知と処理等を行ってくれるイメージ。
1つのデータファイルが複数の表領域にまたがることはあるか
ない。ただし,1つの表領域は複数のデータファイルから構成される場合はある。つまり,表領域:データファイルは1:nということ。データファイルをセグメント単位でグループ化したものが表領域。セグメントは複数のデータファイルからエクステントを取ってきてグループ化したもの。セグメントがエクステントを取ってくるときに複数データファイルにまたがる可能性があるという理解。
誤解として「データファイルをブロックに分けてエクステントを作る。1つのデータファイルから2個のエクステントを作ったとして,それぞれ別の表領域に割り当てることは可能なのではないか。」がある。別の表領域には割り当てられない。そのような絵が頭に思い浮かんできたとしたら,それは1つの表領域内の別のセグメントにエクステントが割り当てられている状況を説明した絵に違いない。
1つのセグメントを構成するエクステントは常に全て同一サイズか
そうではない。エクステント割当てタイプがAUTOALLOCATEの場合はエクステントのサイズを自動でOracle側で選んでくれる。UNIFORMの場合は均一になる。
セグメントはエクステント単位で複数のデータファイルにまたがることはあるか
ある。
DBCAでは既存データベースに対してアーカイブログモードへの切替は行えるか
行えない。新規作成時は設定可能。変更したい場合は,マウント状態にしてからコマンドを利用する。
DBCAでは既存データベースに対してキャラクタセットの変更は行えるか
行えない。新規作成時は設定可能。変更したい場合は,一旦expoerしてからimport時にキャラクタセットを変更する等の対応をする必要がある。
DBCAでは既存データベースに対してサーバ構成(専用・共有)の変更は行えるか
行える。これは驚いたが,管理ツールなので構成はできると覚えてしまう。
SQL DeveloperではRMAN(Recovery Manager)によるリカバリは実行できるか
できる
SQL Developerではリスナーの起動・停止は行えるか
行えない。SQL Developerは幅広い操作が可能だが,リスナーは操作できないと一旦例外的に押さえてしまう。
SQL Developerではバックアップを取得できるか
できる
「SHUTDOEN ABORTは次に起動するときSMONにより自動的にメディアリカバリが行われる」は正しいか
正しくない。行うのはメディアリカバリではなくインスタンスリカバリ。メディアリカバリはバックアップからの復元など運用者が実施するイメージ。
「ADRはSYSTEM表領域に格納される」は正しいか
正しくない。Oracleデータベース内に格納されるのではなく,DIAGNOSTIC_DESTにデータベースの外部のファイルシステムを指定して,ファイルシステム上で管理する。
「ADRはOPEN状態のみ利用可能」は正しいか
正しくない。上述の通りファイルシステムに依存するので,Oracle側の状態に依存せず,例えばzip等で扱うことも可能。
Oracle Net ManagerとOracle Net Configuration Assistantの違いは何か
- Oracle Net Manager:広範にネットワークを設定できるツール
- Oracle Net Configuration Assistant:DBCAやOracle Universal Installerから内部的に実行されるツール
NetCAの方が設定項目は限られています。tnsnames.oraはどちらでも設定可能。
動的サービス登録するためにはLOCAL_LISTENERとSID_LIST_<リスナー名>のどちらを定義するか
LOCAL_LISTENER初期化パラメータ。SID_LIST_<リスナー名>は静的サービス登録で参照される。
tnsnames.oraにエントリが存在しない場合のエラー
TNS cloud not resolve service name。名前解決ができずにエラー。
tnsnames.oraのエントリが間違えている場合のエラー
TNS: no listener。指定されたTNSが見つからずにエラー。
CREATE DATABASE LINKはデフォルトでPRIVATEとPUBLICのどちらになるか
PRIVATE。PUBLICはCREATE PUBLIC DATABASE LINKとする必要がある。
DBMS_PRIVILEGE_CAPTUREによる分析タイプを4種類述べよ
- SYSユーザ以外の全ユーザ
- 指定されたロール
- 指定された評価式
- 指定されたロールかつ評価式
オブジェクトや表領域ベースでは分析できないです。
一般ユーザはパスワードファイル認証を使えるか
使えない
「スキーマ限定アカウントは認証方式を持たない」は正しいか
正しい
CPU_PER_USERというプロファイル属性は何を表すか
そもそも存在しない。存在するのはCPU_PER_SESSION。もしくはSESSIONS_PER_USER。
非標準のブロックサイズの表領域を作成するために必要なアクション
そのブロックサイズ用のバッファキャッシュを作成しておく必要がある。DB_nK_CACHE_SIZE初期化パラメータで非標準ブロックサイズ向けのバッファキャッシュを作成できる。
表領域の空きを確認する方法
データディクショナリビューのDBA_FREE_SPACEに問い合わせる
表領域に関する情報は他にもデータディクショナリビュー(DBA_…)に存在しますし,動的パフォーマンスビュー(V$…)にも存在します。ただ,違いを覚えるのは不毛なので異色なDBA_FREE_SPACEだけを押さえておけば一旦OKでしょう。ただ一点,V$TABLESPACEビューからはデータファイル名を確認することができない点も押さえられるとGood。データファイルを見られるのはDBA_DATA_FILESやV$DATAFILE等であるため,名前からも明らかではあります。
DB_CREATE_FILE_DESTを指定せずにDB_CREATE_ONLINE_LOG_DEST_nを指定すると何が起きるか
データファイル・制御ファイル・REDOファイルすべてがOMFで多重化される。OMF管理ディレクトリのベースがDB_CREATE_FILE_DESTであり,制御ファイルとREDOファイルを多重化したい場合にDB_CREATE_ONLINE_LOG_DEST_nを指定する。DB_CREATE_FILE_DESTには1つのpathを設定する。ちなみに,データファイルの多重化にはASM(Automatic Storage Management)を使う方法がある。
DB_CREATE_FILE_DESTとDB_CREATE_ONLINE_LOG_DEST_nを指定すると何が起きるか
データファイルは当然DB_CREATE_FILE_DESTに保存される。制御ファイルとREDOファイルがDB_CREATE_ONLINE_LOG_DEST_nに保存されるようになる。つまり,下記のSQLでは表領域はDB_CREATE_FILE_DESTに保存されるため十分注意する。
CREATE TABLESPACE SALES;
OMF管理の表領域に対してDROP TABLESPACEすると何が起きるか
- オブジェクトが格納されている場合はエラー
- オブジェクトが格納されていない場合はデータファイルまでOMFが削除してくれる
- オブジェクトが格納されている場合でもINCLUDEING CONTENTSすればオブジェクトを削除してくれるだけでなく,OMFの機能でデータファイルまで削除してくれる
1つの行が別のセグメント上の複数のデータブロックにまたがって格納されることはあるか
ない
行移行を予防するためにはPCTFREEをどうすればよいか
大きくしておく。PCTFREEは元々データ更新時にBeforeからはみ出した分として使用される想定であるため。
ローカル領域管理では使用可能でディクショナリ領域管理では使用不可の機能を5つ挙げよ
- 自動エクステント割当て
- 自動セグメント領域管理
- 遅延セグメント
- bigfile
- セグメント縮小
逆に,OMF・データファイルのAUTOEXTEND・表領域の統計情報等は両方とも使用できる。
ASSM(自動セグメント領域管理)では空き領域の管理情報はどこに格納するか
エクステントから管理用ブロックを選んでそこに格納する。ヘッダーに入れる訳ではない。
遅延セグメントの有効/無効はセッション単位で切替可能か
可能
再開可能領域割当ての有効/無効およびタイムアウト値はセッション単位で切替可能か
可能
遅延セグメントはデフォルト有効だが,無効になっている例外は何か
- SYSユーザ or SYSTEMユーザが所有するセグメント
- SYSTEM表領域に格納されるセグメント
1つのデータベース上に複数のUNDO表領域は作成できるか
作成はできる。ただし,1つしか使用できない。
UNDOセグメントの権限はどのように設定するか
デフォルトでPUBLICが付けられている。用語の使い方が正しいかどうかは微妙なところだが「UNDOセグメントの所有者はPUBLICである」という選択肢は正答になる。
TEMP_UNDO_ENABLEDをTRUEにすることによる効能を3つ挙げよ
- UNDO表領域へのI/Oが減る(UNDO表領域ではなく一時表領域に変更するため)
- REDOの生成量が減る(一時表領域ではREDOを生成しないため)
- READ ONLYに設定されているデータベース上で一時表に対してDMLを実行できる(READ ONLYだとREDOを生成する処理は行えないため)
READ ONLYとは永続的なデータファイルへの書き込みが禁止されます。TEMP_UNDO_ENABLEDがFALSEであればUNDOがUNDO表領域という永続的な領域に格納されることになるため,操作は禁止されます。一方,TRUEであれば一時表に格納されるためREAD ONLYの制約に引っかからずに実行することができます。ただし,通常の表は当然永続化領域に格納されるため,通常の表に対してのDMLは引き続き禁止されます。まとめると「TEMP_UNDO_ENABLEDをTRUEにすることで,一時表に対するDMLを実行できるようになる」ということです。
外部表に索引は作成できるか
できない
ORACLE_DATAPUMPでロードとアンロードを見分ける方法
- AS SELECTがある:アンロード(.expに出力)
- AS SELECTがない:ロード(.expがソース)
どちらもCREATE TABLE文になるので注意。また,ORACLE_LOADERの場合はAS SELECTなくcsv等から外部表を作成できるのも注意。
expdbコマンドのデフォルト動作モードは何か
スキーマモード
sqlldrでPARALLELを指定しないとシリアルなるか
ならない。Oracleによって並列度が決定される。なお,シリアルとは直列という意味。
外部表とダイレクトパスロードをそれぞれ簡単に説明せよ
- 外部表:外部ファイルを実表としたビュー。実体はOracleの外にある。
- ダイレクトパスロード:ビューを経由せずに直接ファイルとやり取りするイメージ。
SQL*Loaderでは外部表によるロードが試された後,実行できない場合にダイレクトパスロードが使われる。最初に外部表を試せばダイレクトパスロードでストレージにロードする必要がないから,と理解する。ダイレクトパスロードはデータベースバッファキャッシュを介さずにデータファイルにデータを書き込む点に注意。
SQL*Loaderを従来型パスで実行するときに使用・生成されるファイルを5つ挙げよ
- データファイル
- 制御ファイル
- ログファイル
- 廃棄ファイル
- 不良ファイル
「従来型のパス」というのが,制御ファイルに処理内容(SQLではないがSQLチックな記法)を記述し,その制御ファイルをsqlldrのcontrol引数に与える方式。パラメータファイルやダンプファイルは使用しない。データベースファイルのデータファイル・制御ファイルとは異なる概念であるため注意する。
indexが設定された列以外の列を更新するとindexも更新されるか
更新されない。更新されたらindexを作成しただけで表全体に影響が出てしまう。
SQL*Loaderエクスプレスモードのログファイルについて説明せよ
制御ファイルを指定する通常のモードとは異なり,下記が出力される。
- 実行した処理に対応するSQL*Loader制御ファイルの内容
- 外部表を作成するためのCREATE TABLE ORGANIZATION EXTERNALなどの外部表作成に必要なSQL文
引っ掛けとして「エクスプレスモード実行後には同じディレクトリに制御ファイルが作成される」というのは正しくない。あくまでもログファイル(.log)の中に記載されているというだけであり,独立したファイルが作成される訳ではない点に注意。
「SQL*Loaderのエクスプレスモードでは外部操作用のSQLファイルが出力される」は正しいか
正しくない。あくまでもログファイル(.log)の中に記載されているというだけであり,独立したファイルが作成される訳ではない点に注意。
DIAGNOSTIC_DESTとORACLE_BASEが定義されていない場合のADRベースはどこか
$ORACLE_HOME/log
<DIAGNOSTIC_DEST>/diag/rdbms/<データベース名>/<ORACLE_SID>のイメージがあると間違える。注意。
オンラインセグメント縮小を行うと,索引を再定義・再ビルトする必要はあるか
ない
「最後のUNDOセグメントが埋まった場合,別のUNDOセグメントが割り当てられる」は正しいか
正しくない。別のセグメントが割り当てられることはない。UNDOセグメントは循環式なので,最初のエクステントに戻るか,追加でエクステントを割り当てる。
コメント