前回記事の続きです。
今回は、Oracle Database 19cをインストールして、DBを構築します。
あと、この記事執筆の動機は、自分が最新の知識をキャッチアップする目的も兼ねているので(11g, 12cが最後に使ったやつなので)、前提知識が古いと感じるかもしれませんが、ご了承下さい。
また、前回記事でも書きましたが、一連の記事の目的は.NET 5.0(C#)のプログラムと連携させる目的での学習用データベース構築なので、あまり込み入ったことはしていませんし、きっちりしてない部分があるかもしれません。そこは、ご理解頂けると嬉しいです。
ODP.NET Core Managed Driverの実装方法は下の記事で解説しています。
TL;DR
昔は専用ユーザー(oracle)やグループ(oinstall)を自分で作成して、その後はインストーラーを実行して、要は手動インストールしてやる必要がありましたが、今はパッケージ(RPM)で可能です。これを使うとほぼ自動化してくれるので、効率よく作業できます。
なので、やる作業としては、
- Oracle Preinstallation RPMのインストール
- Oracle Database 19cのインストール
- DBCAでデータベース作成
- データベースの起動・動作確認
- F/Wの設定
となります。
Oracle Preinstallation RPM
前提パッケージの自動インストール、インストール用ユーザーの自動作成など、事前作業を自動化してくれるものです。
以下のコマンドでインストール。
$ sudo dnf install oracle-database-preinstall-19c.x86_64
確認がでたら「y」を押し、無事できたかを確認します。
oracleユーザーができているか、確認してみます。
$ id oracle
ちゃんとできていますね。
Oracle Database 19cインストール
ダウンロードします。
RPMパッケージのURLは以下のページから取得可能です。
アカウントを作成する必要があるので、まだ作成していない場合はします。
ダウンロードできたら、とりあえず、ホームディレクトリにrpmを置くことにします。
ファイルが壊れてないか、チェックします(SHA256で)。
ハッシュ値は、先ほどのダウンロードページに掲載されています。
checksum.txtというファイルを作り、ハッシュ値[半角スペース]ファイル名という内容にします。
$ sha256sum -c checksum.txt
を実行。
「完了」と出たら、OKです。ファイルが壊れていたり改ざんされていると(あまりないだろうけど)、「一致しません」という文言が出ると思います。
下のコマンドでインストールします。
$ sudo dnf localinstall oracle-database-ee-19c-1.0-1.x86_64.rpm
確認がでたら「y」を(まぁ、-yオプションつけて確認スキップしてもいいのですが、慎重にやりたい)。
完了しました。
データベースを作成
今回はDatabaseの構築自体が勉強ではないので、特殊な用途ではない基本的な構成のデータベースを作成します(データファイル、表領域、PDBの作成などは、また時間があれば書きます)。
環境変数設定
先に、ORACLE_HOMEなどの環境変数を設定します。個々のユーザーごと(.profile)に追記してもいいのですが、全ユーザーで使いますので、共通の場所に追記します。
$ sudo nano /etc/profile
一番下に、以下を追記。
SIDは識別子で、今回作成するデータベースです。
文字コードの設定も追加しておきます。
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_SID=orcl
export NLS_LANG=Japanese_Japan.AL32UTF8
保存して、次のコマンドで反映します。
$ source /etc/profile
echo $ORACLE_HOME
を実行して、ちゃんとできてるか確認。
DBCAでデータベース作成
DBCA (Database Configuration Assistant)は、Databaseの作成を行うツールです。
で、これはoracle
ユーザーで実行するのですが、oracle
ユーザーはパスワードが設定されていないので、設定します。
$ sudo passwd oracle
で、一旦GUIからログアウトし、oracle
ユーザーでログインします(これをしないと、ウィンドウが立ち上がらない)。
言語設定は「English」にしておきます。というのも、日本語にすると文字が「□□」になって化けてしまうからです。まぁ日本語にしてもいいのですが、別途Java実行環境を入れないといけないのと、DBCAの起動スクリプトを編集する手間が増えるので、今回はこのまま英語で行います(あくまでテスト用DB作成なので)。
ちなみに、日本語化を正しく表示させたい方は、最新のOracle JDKをインストールし(個人利用なら無償)、$ORACLE_HOME/bin/DBCAをviなりnanoで開いて、JRE_DIR
のパスを変えてやる必要があります。
話を戻すと、英語のGUI環境にログインしてターミナルを開き、dbca
を起動します。
$ dbca
上の「Create a database」を選びます(なぜか、ラジオのチェックが表示が変ですが、選択はされているみたいです)。
下の「Advanced configuration」を選択して、「Next」。
「General Purpose or Transaction Processing」を選択して、「Next」。
以下の箇所だけ変更します(まぁ、でも名前は好きなように)。
– PDB name:pdb1
PDBとは、プラガブル・データベースの略で12cから導入された機構です。
簡単に説明すると、CDBと呼ばれる親となるコンテナがあり、その中に1つ以上のPDBが内包されます。PDBは従来の表領域・スキーマとなるものの、セットになります。これにより、パッチ適用などの個別にしていた作業が効率化できるという仕組み。
SIDのorcl
は後々また使うので、覚えておいて下さい(ちなみに、Oracleではこのorclがよく使われる)。
「Use template file for database stroage attributes」を選択して、「Next」。
「Specify Fast Recovery Area」を選択して、後はデフォルトのまま、「Next」。
「Create a new listener」にチェックを入れ、以下をセット。リスナーは、クライアントからの処理要求を受け付けるサービスのことです。ここで指定したポート番号(1521)は、クライアントから接続した時に使います。
- Listener name:LISTENER
「Data Vault Config Option」は何も選択せず、「Next」。
「Configuration Options」はいくつか設定項目があります。
Memoryは、「User Automatic Shared Memory Management」を選択(値はそのまま)。
Character setsは、
– User Unicode (AL32UTF8)を選択
– National character set:UTF8
– Default language:Japanese
– Default territory:Japan
Connection modeは、「Dedicated server mode」を選択。
Sample schemaが必要な場合は、「Add sample schemas to the database」にチェックをいれます(文字通り、サンプルのデータが入る)。
「Management Options」はデフォルトのまま、「Next」。
Enterprise Managerは、ブラウザ上からDBの状態確認などができるツールです。
管理者はそれぞれ別パスワードにしてもいいのですが、今回は同じにします。OracleにはSYS,SYSTEMなど、複数の管理者ユーザーが存在します。
デフォルトのまま「Create database」にチェックが入っていることを確認し、「Next」を押します。
「Finish」を押します。すると、データベース作成が開始します。かなり長い作業なので、気長に待ちましょう。
気長に待ちましょう。
問題なく終了すると、この画面になります。この画面の情報は後々使いますので控えるなりスクリーンショットを取るなりし、「Close」で終了させます。
これで、データベース構築は終わりです。
リスナー起動
リスナーが起動していないので、oracleユーザーのまま、lsnrctl
コマンドを実行し、start
と実行します。
LSNRCTL> start
The Command completed successfully
と出たら、OK。exit
でlsnrctlを抜けます。
データベース起動
oracleユーザーのまま、sqlplusでアイドルインスタンスに繋ぎます。
$ sqlplus / as sysdba
startup
で起動します。
SQL> startup
データベースがオープンされましたと出たら、OK。
tnsname.oraに接続識別子を追加
PDB1に接続するための識別子を追加しておきます(クライアント側でも、場合によっては、この作業をすることがあります)。これを追記しておくと、サーバーのIPアドレスとかポート番号をその都度書かなくても、識別子を指定して接続ができるようになります。
nanoで、設定ファイルを開き、
$ nano /opt/oracle/product/19c/dbhome_1/network/admin/tnsnames.ora
以下のPDB1の識別子を追加します(クライアントから接続するのに使う)。
次回以降の記事では、このPDB1に対して表とデータを作成していきます。
PDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb1)
)
)
全体はこんな感じになります。
サーバーから動作確認
試しに繋いでみましょう。
$ sqlplus sys/[パスワード]@PDB1 as sysdba
こんな風に「接続されました」と出たら、OKです。
ただ、このままだとPDBが使用できませんので、使用可能な状態にします。PDBにはオープンモードという状態があり、MOUNTEDだと書込・読込ができません。オープンモードがREAD WRITEである必要があります(OPEN MODEをMOUNTEDからOPENにする)。
次のコマンドを実行します。
SQL>alter pluggable database open;
OPEN MODEがREAD WRITEになりました。
これで、データベース構築は問題なくできました。
ユーザーの追加
SYSやSYSTEMは管理者ユーザーなので、普段使う用の一般ユーザーとスキーマ(Oracleで領域を表す概念)を作成しておきましょう。
SQL> create user yuki identified by [パスワード]
default tablespace USERS
temporary tablespace TEMP;
権限を与えます。
connectは接続するために必要な権限のセット(ロールと呼ぶ)ですが、最低限これが必要です。resourceは、紐づけたスキーマ内での・作成・変更・削除が可能です(要は一般的なユーザー)。ちなみに、管理者用にDBAロールがあります。
SQL> grant connect to yuki;
SQL> grant resource to yuki;
実行すると、こうなるはず。
↓も必要です。
$ GRANT UNLIMITED TABLESPACE TO yuki;
試しに接続してみましょう。
$ sqlplus yuki@pdb1
sqlplus [ユーザー名]/[パスワード]@[接続識別子]
にすることで、パスワードも一緒に指定できます。
接続できると、こうなるはずです。
はい。これで、構築は完了。
ファイアーフォールの設定
su
で昇格するなど、root権限で以下を実行します。
$ firewall-cmd --zone=public --add-port=1521/tcp --permanent
$ firewall-cmd --zone=public --add-port=5500/tcp --permanent
$ firewall-cmd --reload
これで、データベースの構築は完了です。
結構時間がかかりますねえ…。
仕事でやるならクライアント側からDBに接続可能かもテストするのですが、クライアント側はODP.NET Managed Driverを使用してC#でプログラムを作るので、そこは次回以降にしようと思います。
ちなみに、Enterprise Managerという管理用ツールにアクセスするには、https://DBサーバーのIPアドレス:5500/em/
をブラウザで開きます。
以上です。
次回は、.NET 5.0(C#)からOracle Database 19cに接続するコードを作成してみます。
参考リンク