問1 ..................................................................................................
SELECT文の処理の流れについて、正しい順になっているものを選びなさい。
1. SQL 文の構文や権限をチェックする
2. 問合せ結果をユーザプロセスに返す
3. データベースバッファキャッシュ内に該当するデータが存在しない場合、データファイルから読み込む
4. データベースバッファキャッシュ内に該当するデータが存在するかチェックする
5. ユーザプロセスがサーバプロセスに問合せ(SELECT文)を送る
6. 再利用可能な実行計画が見つけられない場合、解析を行い実行計画を作成し、共有プールに保存する
7. 共有プール内に再利用可能な実行計画が存在するかチェックする
a. 5-4-3-1-7-6-2
b. 5-4-3-7-6-1-2
c. 5-7-6-1-4-3-2
d. 5-1-7-6-4-3-2
→回答と解説
問2 ..................................................................................................
自動的にロールバックされるイベントを下記からすべて選びなさい。
a. DML文の発行+COMMIT
b. DDL文の発行
c. SQL*Plusの異常終了
d. SQL*Plusをexitにより終了
e. Oracle Serverが稼動しているマシンのクラッシュ
→回答と解説
問3 ..................................................................................................
下記のリレーショナルデータベースに関する説明のうち、誤っているものをすべて選びなさい。
a. データを二次元の表形式で格納する
b. 表は行と列から構成される
c. 行と列の交差部分はセルと呼ばれる
d. 複数の表のデータを論理的に関連付けるには外部キーを使用する
e. 外部キーの列にはNULL値は使用できない
f. 主キーの列にはNULL値は使用できない
→回答と解説
問4 ..................................................................................................
EMP 表のDEPTNO列には外部キーが設定されており、DEPT表のDEPTNO列を参照しています。
DEPT表のDEPTNO列を削除する際に、 EMP表のデータも同時に削除させるためのオプション
として正しいものを選びなさい。
a. CASCADE
b. ON CASCADE
c. ON DELETE CASCADE
d. ON SET NULL
e. ON DELETE SET NULL
f. 同時に削除することはできない
→回答と解説
問5 ..................................................................................................
下記のEMP 表に対しSELECT文を実行します。検索結果として戻されるデータ件数
として正しいものを選びなさい。
SQL> DESC EMP
名前 NULL? 型
--------- -------- ------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SQL> SELECT empno,ename,sal,mgr,deptno FROM emp;
EMPNO ENAME SAL MGR DEPTNO
----- ----- ---- ---- ------
1001 JOHN 500 30
1002 SCOTT 1000 1001 20
1003 MARY 950 1004 10
1004 BOB 1400 1001 10
SQL> SELECT empno,ename,sal FROM emp WHERE empno <> ANY (SELECT mgr FROM emp);
a. 0
b. 1
c. 2
d. 3
e. 4
→回答と解説
問6 ..................................................................................................
下記の DDL文にて EMP表を作成しました。
変更用の DDL1・2の実行結果として正しいものを選びなさい。
SQL> CREATE TABLE emp (empno number(4) primary key,
ename varchar2(10) not null,
job varchar2(9),
deptno number(2) references dept(deptno));
SQL> -- (ここでEMP表へデータをINSERT)
SQL> select * from emp;
EMPNO JOB ENAME DEPTNO
----- ------ ----- ------
1001 SALES SCOTT
1002 CLERK MARY 30
1003 SALES JOHN 20
1004 SALES JANE 30
SQL> ALTER TABLE emp MODIFY (deptno number(3) not null); ・・・1
SQL> ALTER TABLE emp MODIFY (ename char(20)); ・・・2
a. 1・2ともに正常
b. 1は正常、2はエラー
c. 1はエラー、2は正常
d. 1・2ともにエラー
→回答と解説
問7 ..................................................................................................
バックグラウンドプロセスの説明として誤っているものをすべて選びなさい。
a. DBWnは、データベースバッファキャッシュにディスク上のデータを読み込み、更新され
たデータがあれば、ディスクへバッファを書き出す。
b. LGWRは、REDOログバッファからオンラインREDOログファイルにREDO情報を書き込む。
c. SMONは、ユーザプロセスが異常終了した際、回復処理を行う。
d. PMONは、システムの監視を行い、必要に応じてインスタンスの回復を行う。
e. CKPTは、チェックポイント発生時、データベースファイルと制御ファイルのステータス情報を更新する。
f. ARCHは、ARCHIVELOGモードで運用している場合、REDOログをアーカイブディレクトリにコピーする。
→回答と解説
問8 ..................................................................................................
下記の SQL文にて、empno列(NUMBER型)およびsal列(NUMBER型)のデータを検索します。
SELECT empno, ________ FROM emp;
sal列の値を「\190,000」の書式で出力する場合に、正しい指定を選びなさい。
a. TO_CHAR(sal,'\9,999,999')
b. TO_CHAR(sal,'\0,000,000')
c. TO_CHAR(sal,'L9,999,999')
d. TO_CHAR(sal,'L0,000,000')
e. TO_CHAR(sal,'$9,999,999')
→回答と解説
問9 ..................................................................................................
「読み取り一貫性」と「ロック」に関する説明として、正しいものをすべて選びなさい
a. SELECT文は、ロック待ちにならない(FOR UPDATE句を除く)
b. 他トランザクションが更新中のデータをSELECT文で検索すると、更新前のコミット済みデータが戻される
c. 自トランザクションが更新中のデータをSELECT文で検索すると、更新前のコミット済みデータが戻される
d. 読み取り一貫性の実現にはREDOログが使用される
→回答と解説
問10 ................................................................................................
EMP_OLD表からEMP_NEW表へ、データをコピーします。
どちらの表も構造は同じ場合、正しいデータ移行文を選びなさい。
a. INSERT INTO emp_new SELECT * FROM emp_old;
b. INSERT INTO emp_new AS SELECT * FROM emp_old;
c. INSERT INTO emp_new VALUES(SELECT * FROM emp_old);
d. INSERT INTO emp_new(empno,ename,job) SELECT empno,ename,job,sal FROM emp_old;
e. INSERT INTO emp_new FROM emp_old;
→回答と解説
SELECT文の処理は、下記の3つのフェーズに分けられます。
◆解析フェーズ
ユーザプロセスがサーバプロセスに問合せを送り問合わせ解析要求を行う。サーバプロセス
はSELECT文の妥当性(構文・権限・オブジェクト等)をチェックし、共有プール内に再利用
可能な実行計画が存在するかどうかを確認します。再利用可能な実行計画がない場合は、新
たに解析を行い、 SQL文と実行計画を共有プール内に保存します。
◆実行フェーズ
サーバプロセスは、該当データがデータベースバッファキャッシュにあるかをチェックする。
存在しない場合は、データファイルよりデータを読み込み、データベースバッファキャッシ
ュに置きます。
◆フェッチフェーズ
サーバプロセスは、問合わせで取り出した行データをユーザへ返します。
上記の問題1〜7の処理は、下記のようになります。
解析フェーズ:5
実行フェーズ:1,7,6,4,3
フェッチフェーズ:2
暗黙的にロールバックが行われるのは、上記では
「SQL*Plusの異常終了時」
「Oracle Serverが稼動しているマシンのクラッシュ」
となります。Oracle Server稼動マシンの異常終了時等には、次回Oracle Serverを起動
した際に、インスタンスの回復が行われ、この時点でロールバックが発生します。
また、「DDL 文の発行」では自動的にCOMMITされます。
リレーショナルデータベースのイメージは下記のように表されます。
表(TABLE)
+--+--+--+--+
| | | | | ←横軸:行(ROW、レコード)
+--+--+--+--+
| | | | |
+--+--+--+--+
| | | | ← フィールド(行と列の交差部分)
+--+--+--+--+
↑
縦軸:列(COLUMN、カラム)
従って、
「c.行と列の交差部分はセルと呼ばれる」
→「c.行と列の交差部分はフィールドと呼ばれる」が正しい
「e.外部キーの列にはNULL値は使用できない」
→「e.外部キーの列にはNULL値は使用できる」が正しい
主キーの場合は、表中のデータを一意に識別するために使用するため、他の列と重複する
値は使用できませんので、主キーのカラムにはNULL値を使用することができません。また、
外部キーは、他表とのデータの関連性を示す時に使用されますが、こちらはNULL値を設定
することは可能です。
外部キーが張られている場合に、親データを削除するには2つの方法があります。
ON DELETE CASCADE :親表内の行削除時、子表の依存行削除
ON DELETE SET NULL :親表内の行削除時、子表の外部キー値をNULLに更新
今回は、DEPT表(親表)の行削除時に、EMP表(子表)のデータも削除(DEPTNO列が
一致するもの)したいので、「ON DELETE CASCADE」オプションを使用し、親表内の
データを削除します。
上記では、「SELECT empno,ename,sal FROM emp WHERE empno <> ANY (副問合せ)」実行時、
WHERE 句のempno と副問合せによって戻される結果を比較します。
副問合せ「SELECT mgr FROM emp」の結果にはNULL値が含まれるため、empno とNULL値を比
較した結果は不定(NULL)となります。よって、データは1件も返されません。
1の ALTER文は「DEPTNO列にNOT NULL」制約を追加しようとしています。
既存のデータ中に「DEPTNO=NULL」のレコードが存在するため、このDDLはエラーとなります。
尚、NUMBER型の長さを変更しようとしていますが、この点は問題ありません。
ALTER TABLE emp MODIFY (deptno number(3) not null);
2の ALTER文は「ENAME列のデータ型をCHAR型」に変更しようとしています。
VARCHAR2型からCHAR型への変更は可能なので、正常に実行できます。
ALTER TABLE emp MODIFY (ename char(20));
誤っている「a,c,d」について、
DBWnは、バッファキャッシュのデータをディスクへ書き出すことはしますが、読み込み
は行いません。読み込みは、サーバープロセスが実行します。
また、上記のSMONとPMONの説明は、逆になっています。
従って、正しい説明は下記のようになります。
a. DBWnは、データベースバッファキャッシュにある更新されたデータについて、ディス
クへバッファを書き出す。
c. SMONは、システムの監視を行い、必要に応じてインスタンスの回復を行う。
d. PMONは、ユーザプロセスが異常終了した際、回復処理を行う。
数値の書式モデルは下記のようになっています。
9 :9の数が有効桁数を表す
0 :先行ゼロを戻す
$ :$記号を値の前に戻す
L :通貨記号を前に戻す
カンマ(,) :指定した位置にカンマを戻す
ピリオド(.) :指定した位置にピリオドを戻す
G :指定した位置にグループ区切り文字を戻す
D :指定した位置にピリオドを戻す
よって、「\190,000」とする為には、「\」は「L」で、「,」は「,」で、桁数は「9」
を使用し、「TO_CHAR(sal,'L9,999,999')」となります。
誤っている選択肢c,d は、実際には下記のようになります。
c. 自トランザクションが更新中のデータをSELECT文で検索すると、更新中のデータが戻される
d. 読み取り一貫性の実現にはUNDOセグメント(ロールバックセグメント)が使用される
UNDOセグメント(ロールバックセグメント)は、トランザクションがデータベース内の
データ変更の際、変更前の値(UNDOデータ)を格納するために使用されます。この変更
前データは、変更を行うユーザがトランザクションをコミットするまで、他のユーザか
ら問合せ可能(選択肢bを実現)です。
読み取り一貫性の保証の他、トランザクションのロールバックやインスタンスの回復に
も使用されます。
上記は、INSERT文に副問合せを使用する方法で、データ移行を行う例です。
この場合、移行元・移行先の指定で、列数やデータ型が一致している必要があります。
まず、選択肢b・eは構文的に間違っています。
また、選択肢cのように、VALUES句の中では副問合せを使えません。
最後に、選択肢dは移行元と移行先に指定している列数が異なっています。
従って、正解は選択肢aとなります。
a. INSERT INTO emp_new SELECT * FROM emp_old;
Copyright © 2006 mari. All rights reserved. |
|