学習目的で利用。
ダウンロード先:巨大なZIPファイル
インストレーション・ガイド:必読書。Windows版の方が多分楽。
引用: Oracle Technology Network
起動順
- リスナーを起動する。
- lsnrctl start
- データベースを起動する。
- sqlplus / as sysdba
- startup
- プラガブル・データベースを開く。
- show pdbs で状態を見て、MOUNTEDだったら
- alter pluggable database {PDB名} open; する
- show pdbs で状態を見て、MOUNTEDだったら
- プラガブル・データベースに移動するなら。
- alter session set container= {PDB名} ;
- でも毎回 プラガブル・データベースを開くのが面倒いので
- ALTER PLUGGABLE DATABASE {PDB名} SAVE STATE; する
そんな訳でtnsnames.oraに プラガブル・データベース への接続設定が必要。
- SRV_PDB=
- (DESCRIPTION =
- (ADDRESS =
- (PROTOCOL = TCP)
- (HOST = {サーバ名})
- (PORT = 1521)
- )
- (CONNECT_DATA =
- (SERVER = DEDICATED)
- (SERVICE_NAME = {PDB名})
- )
- (ADDRESS =
- )
- (DESCRIPTION =
でも、A5の 直接接続ならサービス名( つまり{PDB名} )で接続するように指定すればいいだけかな?
終了順(適当)
- リスナーを停止
- lsnrctl stop
- データベースを停止する。
- shutdown
でも、コマンドは面倒なので
- サービス自動起動化のためコマンド使用可にする
- vi /etc/oratab
- $ORACLE_SID:$ORACLE_HOME:N の NをYに変える
- vi /etc/oratab
- サービスを作成
- CentOS6はhttps://docs.oracle.com/cd/E57425_01/121/UNXAR/strt_stp.htmを参照。CentOS7は以下。
- vi /etc/sysconfig/db01.oracledb
- oracle ユーザの.bash_profileから設定をコピー
- ORACLE_BASE、ORACLE_HOME、ORACLE_SID
- oracle ユーザの.bash_profileから設定をコピー
- vi /usr/lib/systemd/system/db01@lsnrctl.service
- [Unit]
- Description=Oracle12c Net Listener
- After=network.target
- [Service]
- Type=forking
- EnvironmentFile=/etc/sysconfig/db01.oracledb
- ExecStart=/u01/app/oracle/product/12.1.0/dbhome_1/bin/lsnrctl start
- ExecStop=/u01/app/oracle/product/12.1.0/dbhome_1/bin/lsnrctl stop
- User=oracle
- [Install]
- WantedBy=multi-user.target
- [Unit]
- vi /usr/lib/systemd/system/db01@oracledb.service
- [Unit]
- Description=Oracle12c Database service
- After=network.target lsnrctl.service
- [Service]
- Type=forking
- EnvironmentFile=/
etc/ sysconfig/ db01.oracledb - ExecStart=/u01/app/oracle/product/12.1.0/dbhome_1/bin/dbstart $ORACLE_HOME
- ExecStop=/u01/app/oracle/product/12.1.0/dbhome_1/bin/dbshut $ORACLE_HOME
- User=oracle
- [Install]
- WantedBy=multi-user.target
- [Unit]
- vi /etc/sysconfig/db01.oracledb
- 作ったサービスを登録
- systemctl daemon-reload
- systemctl enable db01@lsnrctl db01@oracledb
再起動すると、 https://サーバー:5500/em も開けた。
ユーザ作成
ところがメニューはコンテナデータベース( CDB )のまま。CDBではユーザが作れないのでメニューからプラガブル・データベース(PDB)へ切り替えたいが、そんな方法は無いらしい。
ググってみると、PDB用のemが作れる様だ。
- sqlplus / as sysdba から、
- PDBに遷移
- ALTER SESSION SET CONTAINER={PDB名};
- PDBにem用のポートを設定
- exec dbms_xdb_config.sethttpsport(5504);
- 要確認
- SELECT c.name,c.open_mode,e.port FROM v$pdbs c, xdb.xdb$cdbports e WHERE c.con_id = e.pdb (+);
NAME | OPEN_MODE | PORT |
PDB1 | READ WRITE | 5504 |
PDB2 | MOUNTED | |
PDB$SEED | READ ONLY |
- お約束のファイアーウォール設定
- firewall-cmd – -permanent –zone=public – -add-port=5504/tcp
- firewall-cmd – -reload
- https://サーバー:5504/em のメニューにPDB名が出るようになった。
これで、【セキュリティ】⇒【ユーザ】画面で[ユーザの作成]のウィザードがまともに使えるようになる。ロールはザッくりな感じで。
- CONNECT ※接続
- DBM ※Create Table とか
- Unlimited Tablespace ※INSERTとか
こんなSQLを流してみると、
DROP PUBLIC SYNONYM SAMPLE1;
CREATE TABLE AAAAAA.SAMPLE1 (
ID VARCHAR(10) not null,
NAME VARCHAR(30),
ADDRESS VARCHAR(255),
MEMO VARCHAR(255)
);
SELECT * from AAAAAA.SAMPLE1;
CREATE PUBLIC SYNONYM SAMPLE1 FOR AAAAAA.SAMPLE1;
SELECT * FROM SAMPLE1;
INSERT INTO SAMPLE1 VALUES('a','b','c','');
INSERT INTO SAMPLE1 VALUES('A','B','C','');
UPDATE SAMPLE1 SET ID='aAA',NAME='bBB',ADDRESS='cCC',MEMO='***###' WHERE ID='a';
SELECT * FROM SAMPLE1;
DELETE SAMPLE1 WHERE ID='b';
SELECT * FROM SAMPLE1;
シノニムがめんどくさい。
19cの方がインストーラが日本語表示してくれるようだが、
設定方法が悪かったのか、インスト時にデータベースも作ろうとすると
5500ポートが使用中とかで失敗してしまう。
それでプログラムだけインストして、
binのdbcaでデータベースを作るとemが起動しない。
select dbms_xdb_config.getHttpsPort() from dual; が
DBMS_XDB_CONFIG.GETHTTPSPORT() |
0 |
なので、
exec dbms_xdb_config.sethttpsport(5500);
pdb1の分も作ってみる。
ALTER SESSION SET CONTAINER=pdb1;
exec dbms_xdb_config.sethttpsport(5504);
SELECT c.name,c.open_mode,e.port FROM v$pdbs c, xdb.xdb$cdbports e WHERE c.con_id = e.pdb (+);では見えないが、
select dbms_xdb_config.getHttpsPort() from dual;で設定を確認。
firewall-cmd –add-port=5500/tcp –permanent
firewall-cmd –add-port=5504/tcp –permanent
firewall-cmd –reload
見えなかったら rebootしてみるといいかも。
あれ?メニューがPerformanceだけ。
マニュアル読んで、全部やりなおしかな?