技術ブログ
目次
渡部です。10/15に開催した 「出版記念特別企画:黒本著者が解説 ORACLE MASTER Bronze DBA 試験対策セミナー」 に、非常に多くの方にご参加頂きました。ありがとうございました。
オンラインセミナーで取り上げたトピックについて説明しつつ、 それぞれのトピックで頂戴した質問についても、 当日回答できないかったものも含め、 回答してみたいと思います。
記事は前半と後半の2つに分かれています。
歴史ある翔泳社さんの資格対策書籍シリーズである、いわゆる「黒本」の新Bronze DBA版です。 正式な書名は「オラクルマスター教科書 Bronze DBA Oracle Database Fundamentals」です。
この書籍は、2020年2月に開始された新しいORACLE MASTER試験である 「Bronze DBA Oracle Database Fundamentals(試験番号1Z0-085)」 の試験対策書籍です(以下、「新Bronze DBA黒本」と記載)。新Bronze DBA黒本は、2020年10月時点で、1Z0-085試験に対応する唯一の試験対策書籍です。
この試験に合格すると、ORACLE MASTER新体系における資格「ORACLE MASTER Bronze DBA」を取得できます。
詳細は以下をご確認下さいませ。
ORACLE MASTER Bronze DBA 2019試験対策本を執筆しました
黒本の第1章の章構成とポイントは以下の通りです。
オンラインセミナーでは、Oracleデータベースの基本的な動作と構造について説明しました。
OS起動直後(マシン起動直後)の状態は、以下のように図示できます。
何もOracle関連のプロセス(プログラム)が起動しておらず、ファイルだけが存在しています。
初期状態のままでは、Oracleを利用できません。
Oracleを利用するためには、インスタンスを起動する必要があります。 また、ネットワークを介して、データベースサーバー以外のマシンからOracleを利用できるようにするためには、 リスナーを起動する必要があります。
クライアントアプリケーションを起動し、プロセスを生成します。 Oracleでは、これをユーザープロセスと呼びます。
以降、図に示した手順に従うと、ネットワークを介して、クライアントマシンからOracleへの接続を確立できます。 プロセスという観点で見ると、接続が確立されるのは、ユーザープロセスとサーバープロセスの間です。
確立された接続を用いて、ユーザープロセスはサーバープロセスのSQLを送信します。 送信したSQLはサーバープロセスにより処理され、処理結果がユーザープロセスに返送されます。
オンラインセミナーでいただいた質問に回答します。
なお、自分の質問が抜けている、質問の主旨を取り違えているなどあれば、 Twitterで@wrcsus4 (私のTwitterアカウント)までご連絡をお願いします。
サーバプロセスとユーザプロセスで直接連携したほうが早いと思ったのですが、リスナープロセスを挟むのはなぜでしょうか?
3章で説明するローカル接続であれば、リスナーは不要です。
ただし、ネットワークを介した接続(リモート接続)の場合、Oracleではリスナープロセスが必要です。 Oracleはそのような設計になってしまっているのです。
余談気味ですが、MySQLやPostgreSQLでは、リモート接続を受け付ける機能が、Oracleインスタンスに相当する、 いわゆる本体部分に含まれています。このため、MySQLやPostgreSQLには、リスナープロセスに相当する概念はありません。
言い換えると、ネットワークを介した接続のために、専用のプロセスが必要である、Oracleのアーキテクチャは 若干独特ではあります。でもしょうがないので、そういうモノだと受け入れてくださいませ ;-P
リスナープロセスは、接続時のみ使われるのでしょうか。
はい、ネットワークを介した接続(リモート接続)を確立するときのみ使用されます。 一旦、リモート接続が確立されれば、リスナープロセスは不要です。
たとえば、リモート接続の確立後にリスナープロセスは停止しても、 確立済みのリモート接続には影響はありません。すなわち、 確立済みのリモート接続を使ってユーザープロセスからサーバープロセスにSQLを送信し、 SQLを実行できます。
ただし、リスナープロセスを停止すると、それ以降、新規のリモート接続を確立することはできなくなります。
黒本の第2章の章構成とポイントは以下の通りです。
オンラインセミナーでは、 Oracleを導入する作業の流れと使うツール(OUIとDBCA)について説明しました。
Oracle Database 18c以降でのOracle導入の流れは以下の通りです。
Oracle Databaseソフトウェアのインストール先ディレクトリをORACLE_HOMEと呼びます。
ORACLE_HOMEにZIPファイル形式のインストールファイルを解凍し、解凍したファイルに含まれるインストーラ(OUI, Oracle Universal Installer)を起動してインストール作業を実行します。
それに続き、DBCA(Database Configuration Assistant)というツールでデータベースを作成します。ここで作成したデータベースには、アプリケーション固有のデータを格納されます。
なお、Oracle Database 12c R2以前では、若干手順が異なる点に注意してください。
18c以降では、ZIPファイル形式のインストールファイルはORACLE_HOMEに解凍しましたが、 12c R2以前では、ORACLE_HOMEではない任意の場所に解凍します。
学習目的であれば、Oracle Databaseは無償利用可能です。
Oracle DatabaseはOTNからダウンロードできます。
オンラインセミナーでいただいた質問に回答します。
なお、自分の質問が抜けている、質問の主旨を取り違えているなどあれば、 Twitterで@wrcsus4 (私のTwitterアカウント)までご連絡をお願いします。
setup.exeを実行してインストールするのではないのですか?
OUIのプログラムファイル名はプラットフォーム(OS)により異なります。
Windows向けOracleでは、OUIのプログラムファイル名はsetup.exeです。 Linux/UNIX向けOracleでは、OUIのプログラムファイル名はrunInstallerです。
SQL Developerをダウンロードするのにもライセンスは必要でしょうか?
Oracle SQL Developerは、無償で利用できます。以下のURLからダウンロードできます。
DBCAでのテンプレート作成で、既存データベース使用(データおよび構造)の場合、元のデータはローカルにある必要がある。と黒本に解説がありますが、ローカルとは何を意味しているのでしょうか?
既存のデータベースのデータと構造を元にテンプレートを作成する場合、 DBCAを実行するマシンと、テンプレートの元となるデータベースは同一のマシン上にある必要があります。 言い換えると、実行されたDBCAから見て「ローカル」にテンプレートの元となるデータベースがある必要があります。これが「ローカル」の意味です。
なお、既存のデータベースの構造だけ(データを含めない)を元にテンプレートを作成する場合は、リモートにあるデータベースからテンプレートの作成が可能です。
参考のため、DBCAのテンプレート作成画面を以下に示します。
黒本の第3章の章構成とポイントは以下の通りです。
オンラインセミナーでは、 Oracleを導入する作業の流れと使うツール(OUIとDBCA)について説明しました。
1章の解説で説明した接続方法はリモート接続です。ここではローカル接続について説明します。
リモート接続とローカル接続の比較を以下に示します。
ローカル接続の場合、接続先データベースはORACLE_SID環境変数で指定します。 環境変数とはUNIX/Linux一般の概念で、実行環境の情報を設定する仕組みです。
ローカル接続を行うコマンド(ここではSQL*Plus)を実行するまえに、 そのコマンドのコマンド実行環境(シェル)にORACLE_SID環境変数を設定しておく必要があります。 それは、環境変数は、コマンド実行環境から起動したプロセスに引き継がれるためです。
以下にORACLE_SID環境変数に"orcl"を設定し、インスタンス識別子がorclであるデータベースにローカル接続する動作イメージを示します。
SQL*Plusを使ってOracleデータベースにローカル接続する時のコマンド指定を以下に示します。
SYSTEMユーザーは強力な権限を持つ管理用途のユーザーですが、SYSDBA権限を持っていないため、扱いとしては一般ユーザーとなります。
SYSDBA権限を持つユーザーで接続する場合は、"AS SYSDBA"を指定することに注意してください。
データベース作成直後の状態で、SYSDBA権限を持つユーザーはSYSユーザーのみです。 SYSユーザー以外にもSYSDBA権限を持つユーザーを作成することも可能ですが、多くのシステムで、SYSDBA権限を持つユーザーはSYSユーザーのみだと思います。
なお、SQL*Plusを使ってOracleデータベースへの接続するときのコマンド指定方法には、 上に示したやり方以外にも、CONNECTコマンドを使用する方法などがあります。詳細は黒本の 「3-2-2 SQL*Plus の起動と接続」を参照して下さい。
オンラインセミナーでは、実際にターミナルでコマンドを実行してローカル接続の動作を確認しました。
デモの内容はスライドにまとめていませんでしたが、ORACLE_SIDに誤った値を設定したときの動作を以下に記載しておきます。
$ export ORACLE_SID=HOGEHOGE
$ sqlplus system/Password123
SQL*Plus: Release 19.0.0.0.0 - Production on 月 10月 5 00:22:27 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
Additional information: 4376
Additional information: 2017874279
プロセスID: 0
セッションID: 0、シリアル番号: 0
ユーザー名を入力してください:
オンラインセミナーでいただいた質問に回答します。
なお、自分の質問が抜けている、質問の主旨を取り違えているなどあれば、 Twitterで@wrcsus4 (私のTwitterアカウント)までご連絡をお願いします。
ローカル接続の場合は、Oracle Clientをインスト―ルする必要はないのでしょうか?
Oracle Clientに相当するコンポーネントはOracle Databaseソフトウェアに含まれているため、 ローカル接続の場合、データベースサーバーにOracle Clientをインストールする必要は通常ありません。
例外としては、Oracle Databaseソフトウェアとは異なるリリースのOracle Clientを使用したい場合が考えられます。
sysユーザとsystemユーザの違いはアクセス権限の違いですか。
はい。 sysユーザはSYSDBA権限を持ち、インスタンスの起動停止などを実行できますが、 systemユーザSYSDBA権限を持たないため、インスタンスの起動停止を実行できません。
SYSユーザーでの接続時に"as sysdba"を付けないとどうなりますか?
以下の通り、"as sysdba"を付けることを促されます。接続はできません。
$ sqlplus sys/Password123
SQL*Plus: Release 19.0.0.0.0 - Production on 月 10月 5 00:34:28 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
ERROR:
ORA-28009: SYSでの接続はSYSDBAまたはSYSOPERで行う必要があります
ユーザー名を入力してください:
sysdbaのユーザー名は「sys」で固定ということでしょうか?
データベース作成直後の状態では、SYSDBA権限を持つユーザーはSYSユーザーのみです。
データベース作成後、SYSユーザー以外にもSYSDBA権限を持つユーザーを作成することも可能です。
(ただし・・・ 細かい話をすると、SYSDBA権限を持つどのユーザーからOracleに接続しても、 接続後はSYSユーザーになります・・・もちろん、この知識はBronze試験には不要ですし、実務的に大抵不要です・・・)
sysdba 権限を持つアカウント名が SYS しかいない時に SYS アカウントのパスワードが不明になった場合、復旧方法はあるのでしょうか?
OS認証が有効であれば、OS認証を用いてSYSユーザーでOracleに接続し、パスワードを変更して対応可能です。
systemはSYSOPER権限も持ってないのですか
はい、持っていません。ただし、SYSDBA権限などの特殊な管理権限以外の権限であれば、基本的に全て持っています。
私たちの環境では"sqlplus / as sysdba"というコマンド指定でOracleに接続できておりますが何が違うのでしょうか。
試験傾向などを鑑みて、新Bronze黒本では、sqlplusコマンドにユーザー名とパスワードを指定するコマンド指定方法を中心に説明しています。
ただし、sqlplusコマンドを実行するOSユーザーが、ある特定のOSグループに所属している場合、 SYS ユーザーのユーザー名とパスワードの指定を省略できます。この動作をOS認証を用いた接続と呼びます。
具体例を以下に示します。 実行ユーザーはoracleで、OSグループ"dba"に所属しているため、接続に成功します。
認証の考え方としては、ある特定のOSグループに所属しているOSユーザーでOS接続しているということは、 OSレベルですでに認証をパスしているのだから、Oracleに接続して良いと判断してよかろう。という形です。
$ id
uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba),54323(oper),54324(backupdba),54325(dgdba),54326(kmdba),54330(racdba)
$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on 月 10月 5 00:41:46 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
に接続されました。
SQL>
Oracle Enterprise Manager Database Expressで出来てsqlplusで出来ないことにはどんなものがありますか?
Oracle Enterprise Manager Database ExpressはGUIツールですから、メニューなどで 用意された処理しか実行できません。たとえば、表や索引の作成はできません。
SQL*Plusは、(権限がありさえすれば)全てのコマンド(全ての処理)を実行できます。
SQL*Plus と Oracle SQL Developer とのできる範囲は違いますか
Oracle SQL Developerは非常に多機能なツールで、SQL*Plusで実行可能な操作は ほとんど実行できると考えて良いはずです。 (すみません、Oracle SQL Developerが何ができないのかが私は把握できません・・・、それぐらい多機能ということです)
SQL*PlusのHOSTコマンドのイメージが良くつかめません。
SQL*PlusのHOSTコマンドは、SQL*Plusの実行中にOSコマンドを実行するためのコマンドです。
HOSTコマンドがないと、SQL*Plusの実行中にOSコマンドを実行したい場合、一旦SQL*Plusの実行を終了し、シェルに戻る必要があります。
SQL> exit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0との接続が切断されました。
$ ls
Desktop Documents Downloads Music Pictures Public Templates Videos setup1930.sh
しかし、HOSTコマンドを使うと、SQL*Plusの実行を終了する必要はありません。 HOSTコマンドを介して、SQL*Plusの実行中にOSコマンドを実行できます。
SQL> host ls
Desktop Documents Downloads Music Pictures Public Templates Videos setup1930.sh
新体系ORACLE MASTER 2019の変更点と留意点 – 18c/19c対応
ORACLE MASTER Platinumとは何か / コーソルはPlatinum取得者数No.1!