新卒1年目です。研修でSQL Developerを用いてOracle SQLを勉強しています。
自分なりにDBを勉強をしてたらPDB(プラガブルデータベース)というのを知りました。
そこでデフォルトで存在しているPDBの「xepdb1」を用いて、研修用DB環境を整えたときの方法をまとめてみます。
最終的にSQL Developerで接続することを目指します。
私の理解が足りないこともあり、残念ながら細かいことまでは説明しきれていません。ご容赦ください。
大まかな流れ
①既存のPDBの確認・接続
②PDBにユーザーを作成
③作成したユーザーを用いてPDBにSQL Developerで接続
前提
OSはWindows10です。sqlplusを利用します。
DBの環境を構築するために、以下の2つを使いました。インストールの方法は省略します。
Oracle SQL Developerの入手にはOracleアカウントが必要です。
Oracle Database 21c Express Edition
Oracle SQL Developer 21.2.1
①既存のPDBの確認・接続
リスナーの確認
cmd(コマンドプロンプト)を管理者権限で起動。
下記のコマンドでリスナーを起動。
> lsnrctl status // リスナーの状態確認
> lsnrctl start // 状態確認後、リスナーが起動していなければ起動
IPアドレス、ポート番号の確認
リスナーの状態を確認した時と同じコマンドで確認できます。
> lsnrctl status // IPアドレスとポート番号(デフォルトでは1521)の確認
PDB名の確認
上記リスナーの起動方法でも確認できる場合があります。
しかし時たまサービスが正しく表示されない場合があるので、より確実な方法を示します。
デフォルトで存在するデータベース「xe」にsystemユーザーで接続。
> sqlplus system/<パスワード>@<IPアドレス or ホスト名>:<ポート番号>/SID
例> sqlplus system/password@XXX.XXX.XXX.XXX:1521/xe
接続できたら以下のコマンドでPDB名の確認
sql> SELECT name, open_name FROM v$pdbs;
NAME OPEN_MODE
------------- ----------
XEPDB1 READ WRITE //PDB名は「XEPDB1」
以上でPDB名が確認できました。
PDBにsystemユーザーで接続
PDBに接続します。xeにsystemユーザーで接続した時と同じ要領で、コマンドを書きます。SIDがPDB名であることに注意してください。
CDBにsystemユーザーで接続。
例> sqlplus system/password@XXX.XXX.XXX.XXX:1521/xepdb1 // SIDはPDB名!
sqlplusに接続後、正しく接続できているかは以下で確認できます。PDB名が表示されていれば成功です。
sql> show con_name
②PDBにユーザーを作成
以降は一般的なテーブルスペースの作成、ユーザー作成の流れと同じです。
テーブルスペースの作成
自動拡張等の設定は今回OFFにしましたが、任意で変更してください。
sql> CREATE TABLESPACE <テーブルスペース名>
DATAFILE '<データファイル名(フルパス指定可).dbf>'
SIZE 100M AUTOEXTEND OFF; // 任意で変更してください。
新規ユーザーの作成
作成したテーブルスペースを用いて新規ユーザー作成します。
sql> CREATE USER <ユーザー名>
IDENTIFIED BY <パスワード>
DEFAULT TABLESPACE <作成したテーブルスペース名>
TEMPORARY TABLESPACE TEMP;
権限の付与
最低限の権限を付与します。
sql> GRANT CONNECT, RESOURCE TO <ユーザー名>;
sql> GRANT UNLIMITED TABLESPACE TO <ユーザー名>;
③作成したユーザーを用いてPDBにSQL Developerで接続
以下の設定でSQL Developerに新規データベース接続を作成。
ユーザー名、パスワード: ユーザ名とパスワードを入力。
ホスト名: ホスト名、もしくはIPアドレスを入力
ポート: 1521 (デフォルト)
SID、サービス名: サービス名を選択し、PDBの名前(サービス名)を入力
まとめ 感想
研修の復習も兼ねて、PDBでDB環境を用意するやり方をまとめました。もしも似た状況の方が居れば、少しでも助けになればと思います。
研修ではOracle Database 21c Express Editionをインストールした時点で、systemユーザーで簡単に接続できるxeというDBを使って、SQLを学ぶことを推奨されました。
しかしxeはCDB(コンテナデータベース)なので、管理用データベースのはず…。なのでセキュリティ的に疑問がありました。
卒業基準だったわけでは無いので、SQLに触れてみる、体感してみるという意図が強かったのかなと思います。
今回のよりもっといい方法がある思うし、知識がごちゃごちゃになっている部分も多いので、この先も勉強しつつ理解していけたらと思います。
また是非アドバイスいただけると嬉しいです。つよつよになりたい。