rink_rewさんの投稿一覧

助け合いフォーラムの投稿
2024/09/02 返信
リストアとリカバリについて

メディア・リカバリの流れが、

  1. バックアップファイルをリストア
  2. リストアしたファイルに対してREDOログやアーカイブREDOログを適用

という手順であることを理解しているか、を問うために選択肢に含まれている誤答であるとは推察しますが、「リカバリ」という表現だけ見ると、nonstickmite866 さんもおっしゃる通り「これはリストア後の話で、リカバリ操作で必要なのはREDOデータではないか」と捉えることもできないことはないですね。
※「リストアしたバックアップファイルにREDOを適用するんだから、バックアップファイルは必要だ」という主張もできますが、この問題の解説では「まずバックアップ・ファイルのリストアが必要です」と説明されているので、観点が違いますね。

選択肢が「リカバリにバックアップ・ファイルは必要としない」ではなく「 メディア・ リカバリにバックアップ・ファイルは必要としない」だったら、しっくりくるんですが...。

2024/08/21 返信
分野が混ざっている及び分野がない

そもそも問題集の分野分けは、オラクル社公式のチェックリストのカテゴリの名称と完全に対になっているわけではなさそうですので、この辺は現在の仕様?という感じでしょうか。
必要な知識を得るという観点では、ざっとみる限り現行の問題集で一通りしっかりとカバーされているようには思いますが、将来的に、問題集の分野名も公式情報に追従する形になったらいいなと思うところでもありますね。

2024/08/15 返信
結合条件について

ON句の代わりにWHERE句に記載することは可能ですが、その場合、FROM句でJOIN句が使用できなくなるため、結合するテーブルをカンマ区切りで列挙する必要があります。
ただ、複雑なSQL文の中で出力結果に対して複数のフィルタリング条件を適用する場合など、WHERE句内にANDやORを連ねることになるので、可読性は低くなるかもしれません。

SQL> SELECT p.promo_name, p.promo_begin_date, p.promo_end_date, s.time_id, s.quantity_sold
  2  FROM promotions p JOIN sales3 s
  3  ON p.promo_id = s.promo_id
  4  AND s.time_id BETWEEN p.promo_begin_date AND NVL(p.promo_end_date, SYSDATE);

PROMO_NAME		       PROMO_BE PROMO_EN TIME_ID  QUANTITY_SOLD
------------------------------ -------- -------- -------- -------------
プロモーション1                10-05-10 10-05-10 10-05-10            25
プロモーション5                10-10-01 10-12-31 10-11-05            21
プロモーション2                11-08-01 12-01-01 11-10-30            34
プロモーション2                11-08-01 12-01-01 11-12-31            15
プロモーション3                12-02-22          12-04-01             9
プロモーション4                11-12-24 12-12-31 12-07-10            16

6行が選択されました。

SQL> SELECT p.promo_name, p.promo_begin_date, p.promo_end_date, s.time_id, s.quantity_sold
  2  FROM promotions p JOIN sales3 s
  3  WHERE p.promo_id = s.promo_id
  4  AND s.time_id BETWEEN p.promo_begin_date AND NVL(p.promo_end_date, SYSDATE);
WHERE p.promo_id = s.promo_id
*
行3でエラーが発生しました。:
ORA-00905: キーワードがありません。


SQL> SELECT p.promo_name, p.promo_begin_date, p.promo_end_date, s.time_id, s.quantity_sold
  2  FROM promotions p, sales3 s
  3  WHERE p.promo_id = s.promo_id
  4  AND s.time_id BETWEEN p.promo_begin_date AND NVL(p.promo_end_date, SYSDATE);

PROMO_NAME		       PROMO_BE PROMO_EN TIME_ID  QUANTITY_SOLD
------------------------------ -------- -------- -------- -------------
プロモーション1                10-05-10 10-05-10 10-05-10            25
プロモーション5                10-10-01 10-12-31 10-11-05            21
プロモーション2                11-08-01 12-01-01 11-10-30            34
プロモーション2                11-08-01 12-01-01 11-12-31            15
プロモーション3                12-02-22          12-04-01             9
プロモーション4                11-12-24 12-12-31 12-07-10            16

6行が選択されました。

SQL>
2024/07/24 返信
MERGE文 入れ替え

「WHEN MATCHED THEN」と「WHEN NOT MATCHED THEN」の順序は入れ替えても、MERGE文としてはエラーにはなりません。
ご提示のケースでもエラーにはならず、実行後は同様の結果となりました。

SQL> select * from cust_source;

    ID NAME	  A EMAIL		 BIRTH_DAY
------ ---------- - -------------------- -----------
     1 scott	  Y scott@xx.com	 66-06-03
     2 allen	  N al@yy.com		 82-04-18
     3 john	  Y John@zz.com 	 73-12-30
     4 king	  Y king@zz.com 	 91-01-15

SQL> select * from cust_copy;

    ID NAME	  A
------ ---------- -
     1 SCOTT	  Y
     2 ALLEN	  Y
     3 TBD
     
SQL> MERGE INTO cust_copy c USING (SELECT id, UPPER(name) name, active FROM cust_source) p ON (c.id=p.id)
	WHEN NOT MATCHED THEN
		INSERT VALUES (p.id, p.name, p.active)
	WHEN MATCHED THEN
		UPDATE SET c.name=p.name, c.active=p.active;

4行がマージされました。

SQL> select * from cust_copy;

    ID NAME	  A
------ ---------- -
     1 SCOTT	  Y
     2 ALLEN	  N
     3 JOHN	  Y
     4 KING	  Y

SQL>

ただし、処理順序(条件を評価する順序)は変わると思うので、実運用においてはデータの内容によっては結果が異なる可能性はあります。
また、パフォーマンスにも違いが出てくる可能性はあると思います。(そのような場合には実行計画の取得などして、チューニングしていくことになると思います。)

2024/07/01 コメント
制御ファイルの多重化の意味について
制御ファイルを多重化しておくことで、一部の制御ファイルが破損してデータベースが起動できなくなった場合でも、正常な制御ファイルをコピーして素早く復旧ができる、という点は推奨されるに値するメリットかなと思います。
合格体験記の投稿
投稿がありません