CREATE USERするまで

2020年10月22日

前回の続き。

Oracleに入るまで

wslでDockerでOracleイメージを走らせる。

Dockerのイメージに入る。以下はよく使うから暗記しておいたほうがいい。

docker exec -it イメージ名 bash

sqlplusで接続する

sqlplus sys/oracle@//localhost:1521/SID as sysdba

表領域の確認

select tablespace_name,block_size,initial_extent from dba_tablespaces;

CREATE USER

CREATE USER otete IDENTIFIED BY "TEST" DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;

実行すると
ORA-65096: invalid common user or role name
こちらが出て怒られる。
これは、CDBに直接ユーザは作成できないから。
PDBで作れよってことらしい。

今実際に自分がどこに接続しているかを確認するには以下

show con_name

Docker logsでコンテナをビルドしたときのログを確認する

PDBの名前を知るためにログを漁った。

まずdocker psでコンテナIDをメモしておく。そのIDで以下実行する。

docker logs コンテナーid

ログを見てみたけど、どれがPDBの名前なのかわからなかった。

tnsnames.oraを確認

/opt/oracle/product/12.2.0.1/dbhome_1/network/admin/tnsnames.ora

こちらをcatで見てみる

SERVICE_NAME=PDBなので、そのままPDBでやれば接続できるのか?

PDBで接続とその確認

sqlplus system/oracle@PDB

あ、というかよく考えたら以下でPDBの設定自分でやってたわ。。。

起動用の環境変数ファイル(oracle.env)をOracleDatabase/SingleInstance/dockerfiles/12.2.0.1/にoracle.envを作成

後日、以下で接続できることも発見
パスワード:oracle
PDB名:PDB
これらは、oracle.envで設定した。

sqlplus pdbadmin/oracle@localhost:1521/PDB

再度Create Userする

できた。

ロールを付与

テスト環境なので、ツヨツヨの権限を与える。

GRANT DBA TO OTETE;
GRANT UNLIMITED TABLESPACE TO OTETE;

その他

Userの確認

select * from ALL_USERS where USERNAME = ‘OTETE’;
select * from DBA_USERS where USERNAME = ‘OTETE’;

便利なコマンド

こちらが非常にわかりやすく便利だったのでそのまま。
いつも知りたいと思って探すのに苦労してるので。
自分のメモなので、詳細については元を確認してください。

-- 自分の所有する権限を確認
select * from user_sys_privs;

-- 自分の所有するロールを確認
select * from user_role_privs;

-- ロールに紐づくシステム権限を確認
select * from role_sys_privs where role = '<ロール名>';

-- ユーザに権限を付与
grant <権限> to <ユーザ>;

-- 権限をロールに付与
grant <権限> to <ロール>;

-- 接続先の確認
show con_name

-- 接続先の切り替え
alter session set container = <接続先SID>;

-- ユーザ作成
create user <ユーザ名> identified by <パスワード> default tablespace <デフォルト表領域> temporary tablespace <一時領域>;