dan-go.log

文系未経験からのインフラ備忘録。その他もろもろ。

【ORACLE】プラカブルデータベースへ接続する

バージョン12cからはマルチテナント構成の概念が追加されており、前までの感じで接続しようとするとエラーが出まくります。

 

・プロンプトからデータベースに接続

>sqlplus / as sysdba

 

・ユーザを作成

SQL>create user test identified by test;
create user test identified by test
*
ERROR at line 1:
ORA-65096: invalid common user or role name

出たな!

 

これは現在CDB(コンテナデータベース)に接続しているからで、ローカルの新規ユーザはPDB(プラカブルデータベース)にしか作成できないからです。

 

どちらに接続しているのかはshow con_nameで確認できます。

SQL>show con_name;
CON_NAME
------------------------------
CDB$ROOT
SQL>

 

CDB$ROOTなので、CDBに接続していることになります。

 

 

・切り替えるPDB名とアクセス権限を確認

SQL>select name, open_mode from v$pdbs;

NAME
--------------------------------------------------------------------------------
OPEN_MODE
----------
PDB$SEED
READ ONLY

PDBTEST
READ WRITE

 

PDB名はPDBTEST,

READ WRITE権限がついています。

 

PDBスタート

SQL>ALTER PLUGGABLE DATABASE PDBTEST OPEN;

 

自動起動設定

SQL>ALTER PLUGGABLE DATABASE PDBTEST SAVE STATE;

 

・切り替え

SQL>alter session set container = PDBTEST;

show con_nameを実行するとPDBに切り替わっています。

これでユーザを作成できます。

 

※上記の切替方法は、CDB,PDB共通のユーザ(sys等)でログインしている場合しかできません。

そのため、PDBで作成した固有ユーザで接続したい場合は、プロンプトから直接以下コマンドを実行します。が、、

 

>sqlplus ユーザ名/パスワード@PDB

ERROR:
ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。

 

また出たな!!!

 

どうやらPDBへの接続はリスナー経由のようで、、tnsnames.oraファイルの編集が必要です。

 

・lsntctlをみてCDB名、PDB名を確認

プロンプトから 

>lsnrctl status

LSNRCTL for 64-bit Windows: Version 12.2.0.1.0 - Production on 18-10月-2018 15:52:32

Copyright (c) 1991, 2016, Oracle. All rights reserved.

(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=mhvpdb)(PORT=1521)))に接続中
リスナーのステータス
------------------------
別名 LISTENER
バージョン TNSLSNR for 64-bit Windows: Version 12.2.0.1.0 - Production
開始日 18-10月-2018 15:12:31
稼働時間 0 日 0 時間 40 分 0 秒
トレース・レベル off
セキュリティ ON: Local OS Authentication
SNMP OFF
パラメータ・ファイル C:\oracle\product\12.2.0\dbhome_1\network\admin\listener.ora
ログ・ファイル C:\oracle\diag\tnslsnr\mhvpdb\listener\alert\log.xml
リスニング・エンドポイントのサマリー...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=mhvpdb)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
サービスのサマリー...
サービス"67acb959d6824c0195ad990810b8771a.dangodb"には、1件のインスタンスがありま す。
インスタンス"db01"、状態READYには、このサービスに対する1件のハンドラがあります...
サービス"CLRExtProc"には、1件のインスタンスがあります。
インスタンス"CLRExtProc"、状態UNKNOWNには、このサービスに対する1件のハンドラがあります...
サービス"pdbtest.dangodb"には、1件のインスタンスがあります。
インスタンス"db01"、状態READYには、このサービスに対する1件のハンドラがあります...
サービス"db01.dangodb"には、1件のインスタンスがあります。
インスタンス"db01"、状態READYには、このサービスに対する1件のハンドラがあります...
サービス"db01XDB.dangodb"には、1件のインスタンスがあります。
インスタンス"db01"、状態READYには、このサービスに対する1件のハンドラがあります...
コマンドは正常に終了しました。

>

CDB名はdb01.dangodb

PDB名はpdbtest.dangodbです。

 

・tnsnames.oraを編集

CDB(DB01)のエントリは既に記述があると思うので、丸々コピーしてSERVICE_NAMEのエントリをlsnrctlで調べたものに変更して追記しましょう。 

PDBTEST =
(DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
  (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = pdbtest.dangodb)
   )
)

これで

>sqlplus test/test@PDBTEST

が通ります。後はいつも通りに。

 

 

スキーマ使うのもPDBに切り替えないといけないので、実質PDBばっかり使うことになるかも。

ただ表領域やら起動停止が別々なので注意ですね。

 

以上ァ

【Linux】LVM構成コマンド

さくっとFS作成・削除したい時用 

 

構成手順

・ディスク確認

#fdisk -l

 

パーティション作成

#fdisk /dev/xxxxx

nで新しいパーティションを切り出す

tでタイプ変更

wで反映

dでパーティション削除

pで現在のパーティションを表示

 

 ディスク名に1から番号が付くパーティションが作成される。

 

・PV作成・確認

#pvcreate /dev/xxxx1

#pvdisplay

 できない場合はlvm2インストール

 

・VG作成・確認

#vgcreate vg_xxxx /dev/xxxx1

#vgdisplay

 

※補足

#vgcreate vg_xxxx /dev/xvdc1 /dev/xvde1 /dev/xvdf1

とすることで複数PVから一つのVGを作成できる。

 

・LV作成・確認

#lvcreate -n lv_xxxx -l 100%FREE vg_xxxx

or

#lvcreate -n lv_xxxx -L 10G vg_xxxx

#lvdisplay

パーティションのサイズすべて割り当てるか指定するか

 

・FS作成・確認

#mkfs.xfs /dev/vg_xxxx/lv_xxxx

FSタイプはだいたいxfsまたはext4

 

#lsblk

で全体確認。

 

#mount /dev/mapper/vg_xxxx-lv_xxxx     /mountpoint

でマウント 

 

#df -h

でマウント確認。

 

#vi /etc/fstab

自動起動設定。

 

 

元に戻す手順 

#lsblk

で全体確認。

 

#vi /etc/fstab

自動起動設定を削除。

 

#umount  /mountpoint

でアンマウント。

 

#df -h

でマウント確認。

 

・LV削除(FSも削除される)

#lvremove /dev/vg_xxxx/lv_xxxx

 

・VG削除

#vgremove vg_backup

 

※補足

割り当てているPVが2つ以上の場合は削除できません。

複数のPVから構成している場合は

#vgreduce vg_xxxx /dev/xvde1 /dev/xvdf1

でPVを外してから削除しましょう。

 

 ・PV削除

#pvremove /dev/xxxx1

複数指定可

#pvremove /dev/xxxx1 /dev/xxxx2 /dev/xxxx3

 

パーティション削除

#fdisk /dev/xxxxx

dでパーティション削除

pで現在のパーティションを表示

wで反映

 

確認

#df -h

#lsblk

#pvdisplay

#vgdisplay

#lvdisplay

#fdisk -l

 

 

いじょ

【PostgreSQL】複数インスタンス作成

1つのサーバに導入したPostgreSQLに複数ユーザでそれぞれインスタンス(データベースクラスタ)を作成したい場合の設定。

 

ポスグレはOS側ユーザが一つのインスタンスを持つので、まずインスタンスオーナーとなるOSユーザを作成します。

またグループもpostgresにしておきましょう。

(Postgresインストール時に作成されているはず)

#adduser dangouser1

 

 

それぞれのユーザが持つデータベースディレクトリを作成

#mkdir /database/data_dango1

場所は任意 

 

 

ディレクトリの所有を作成したユーザ、グループをpostgresに変更

#chown dangouser1 /database/data_dango1
#chgrp postgres /database/data_dango1

 

※各ディレクトリには所有者のみがアクセスできるように、chmod700にしておく。

#chmod 700 /database/data_dango1

 

作成したユーザの環境変数を設定

#su - dangousr1
$vi ./bashrc

 

以下を追記

export PATH=$PATH:/usr/local/pgsql/bin
export PGDATA=/database/data_dango1
export PATH
export PGDATA

 

$source bashrc

で反映

 

$PATH:/usr/local/pgsql/bin

は共通なので(導入時に作成されるデフォルトインスタンスディレクトリにコマンドが格納されてるので)、/etc/profileで全体に通してもいいかもしれません。

 

インスタンス作成

$initdb --pgdata=/database/data_dango1

完了後、/database/data_dango1にインスタンスの構成データが作成されます。

 

 

こんな感じ

dangousr1@dangosvr:/database/data_dango1$ ls -lh

-rw------- 1 dangousr1 postgres 3 7月 30 23:50 PG_VERSION
drwxr-xr-x 2 dangousr1 postgres 12K 8月 27 23:50 archive_log
drwx------ 6 dangousr1 postgres 4.0K 7月 30 23:50 base
-rw------- 1 dangousr1 postgres 63 8月 28 00:00 current_logfiles
drwx------ 2 dangousr1 postgres 4.0K 8月 25 00:31 global
drwx------ 2 dangousr1 postgres 4.0K 7月 30 23:50 pg_commit_ts
drwx------ 2 dangousr1 postgres 4.0K 7月 30 23:50 pg_dynshmem
-rw------- 1 dangousr1 postgres 4.5K 7月 30 23:50 pg_hba.conf
-rw------- 1 dangousr1 postgres 1.6K 7月 30 23:50 pg_ident.conf
drwx------ 2 dangousr1 postgres 4.0K 8月 28 00:00 pg_log
drwx------ 4 dangousr1 postgres 4.0K 8月 27 23:55 pg_logical
drwx------ 4 dangousr1 postgres 4.0K 7月 30 23:50 pg_multixact
drwx------ 2 dangousr1 postgres 4.0K 8月 25 00:30 pg_notify
drwx------ 2 dangousr1 postgres 4.0K 8月 27 23:50 pg_replslot
drwx------ 2 dangousr1 postgres 4.0K 7月 30 23:50 pg_serial
drwx------ 2 dangousr1 postgres 4.0K 7月 30 23:50 pg_snapshots
drwx------ 2 dangousr1 postgres 4.0K 8月 25 00:30 pg_stat
drwx------ 2 dangousr1 postgres 4.0K 8月 28 11:51 pg_stat_tmp
drwx------ 2 dangousr1 postgres 4.0K 7月 31 23:50 pg_subtrans
drwx------ 2 dangousr1 postgres 4.0K 7月 30 23:50 pg_tblspc
drwx------ 2 dangousr1 postgres 4.0K 7月 30 23:50 pg_twophase

drwxr-xr-x 3 dangousr1 postgres 4096 8月 27 23:55 pg_wal
drwx------ 2 dangousr1 postgres 4.0K 7月 30 23:50 pg_xact
-rw------- 1 dangousr1 postgres 88 7月 30 23:50 postgresql.auto.conf
-rw------- 1 dangousr1 postgres 23K 7月 30 23:50 postgresql.conf
-rw------- 1 dangousr1 postgres 62 8月 25 00:30 postmaster.opts
-rw------- 1 dangousr1 postgres 80 8月 25 00:30 postmaster.pid
dangousr1@dangosvr:/database/data_dango1$ 

 

この中の、postgresql.confが設定ファイルです。

 

$vi postgresql.conf

 

listen_addresses = '*'
port=5432以外に設定

 

ポートははじめは5432になっていますが、

デフォルトのインスタンスに使用されているので変更しましょう。

 

インスタンス起動

$pg_ctl -D /database/data_dango1 start

 

デフォルトのDB(postrges)に接続

$psql --port=5433 -d postgres

postgresql.conf設定したポート番号を指定する。 

 

 

このようにポートで分けてユーザ、ディレクトリ、インスタンスを各々で用意してやれば複数インスタンスを作成できます。

 

いじょう。