12を使ってみた

学習目的で利用。

ダウンロード先巨大なZIPファイル

インストレーション・ガイド必読書。Windows版の方が多分楽

引用: Oracle Technology Network

起動順

  • リスナーを起動する。
    • lsnrctl start
  • データベースを起動する。
    • sqlplus / as sysdba
    • startup
  • プラガブル・データベースを開く。
    • show pdbs で状態を見て、MOUNTEDだったら
      • alter pluggable database {PDB名} open; する
  • プラガブル・データベースに移動するなら。
    • 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名})
      • )
    • )

でも、A5の 直接接続ならサービス名( つまり{PDB名} )で接続するように指定すればいいだけかな?

終了順(適当)

  • リスナーを停止
    • lsnrctl stop
  • データベースを停止する。
    • shutdown

でも、コマンドは面倒なので

  • サービス自動起動化のためコマンド使用可にする
    • vi /etc/oratab
      • $ORACLE_SID:$ORACLE_HOME:N の NをYに変える
  • サービスを作成
  • 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
    • 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
    • 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
  • 作ったサービスを登録
    • 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 (+);

NAMEOPEN_MODEPORT
PDB1READ WRITE5504
PDB2MOUNTED
PDB$SEEDREAD 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だけ。
マニュアル読んで、全部やりなおしかな?




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA