変奏現実

パソコンやMMORPGのことなどを思いつくまま・・・記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

この画面は、簡易表示です

Linux

[Linux]Cockpit コンソールから他のコンソールに繋ぐ

KVMサーバーのCockpitのページから直接ブログサーバのCockpitに繋いでみた。

まずはSSH接続用の公開鍵を作る。

# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): [passphraseを入力] ※passphraseはログイン時に使用
Enter same passphrase again: [passphraseを入力]
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Fyfc0Do9Wux/6uZgjLvM9nCq4mYVaOphgip9bx8I1eE root@xxxxxxxx.xxxxxxxx.local
The key's randomart image is:
+---[RSA 3072]----+
|        . ..     |
|       o o o.    |
|      ..E ++o    |
|     .o . o+=    |
| .  .o  S..= .   |
|. . +. ....o.    |
|.. + .... o =.   |
|o . o =  +.* .o .|
|.  . *oooo*o.++o |
+----[SHA256]-----+

次にブログサーバのSSHの設定内容を取得

# ssh-keyscan -H 192.168.xxx.xxx >> ~/.ssh/known_hosts
# 192.168.xxx.xxx:22 SSH-2.0-OpenSSH_8.0
# 192.168.xxx.xxx:22 SSH-2.0-OpenSSH_8.0
# 192.168.xxx.xxx:22 SSH-2.0-OpenSSH_8.0

最後にブログサーバに公開鍵を送信

# ssh-copy-id root@192.168.xxx.xxx
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.xxx.xxx's password: [passwordを入力]

Number of key(s) added: 1

Cockpitの画面を開き、左上のサーバー名の右の▲をクリックして▼に変え、【新規ホストの追加】ボタンを押す。

ダイアログからIPアドレス、ユーザ名、パスフェーズを入力。

認証でSSHキーを選択、キーパスワードは先のパスフェーズを入力。

自動ログインは、/root/.ssh/id_rsa のパスワードを変更しますのチェックし、新しいパスワードを設定する。



[AlumaLinux]WARNING: AllowZoneDrifting is enabled.

# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2023-10-11 17:03:59 JST; 1 day 12h ago
     Docs: man:firewalld(1)
 Main PID: 793 (firewalld)
    Tasks: 2 (limit: 23014)
   Memory: 33.7M
   CGroup: /system.slice/firewalld.service
           mq793 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid

10月 11 17:03:55 *******.*******.********** systemd[1]: Starting firewalld - dynamic firewall daemon...
10月 11 17:03:59 *******.*******.********** systemd[1]: Started firewalld - dynamic firewall daemon.
10月 11 17:03:59 *******.*******.********** firewalld[793]: WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will...

firewalldでエラっていた。

AllowZoneDriftingは将来のリリースでは削除される予定です。今すぐ無効を検討してください。

だそうで、設定ファイルを修正。

# AllowZoneDrifting=yes
AllowZoneDrifting=no

結果

# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2023-10-13 06:03:36 JST; 3s ago
     Docs: man:firewalld(1)
 Main PID: 29104 (firewalld)
    Tasks: 2 (limit: 23014)
   Memory: 23.9M
   CGroup: /system.slice/firewalld.service
           mq29104 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid

10月 13 06:03:35 *******.*******.********** systemd[1]: firewalld.service: Succeeded.
10月 13 06:03:35 *******.*******.********** systemd[1]: Stopped firewalld - dynamic firewall daemon.
10月 13 06:03:35 *******.*******.********** systemd[1]: Starting firewalld - dynamic firewall daemon...
10月 13 06:03:36 *******.*******.********** systemd[1]: Started firewalld - dynamic firewall daemon.


[TrueNAS]インスト

Windows11のHyper-Vにインストしてみた。

第2世代の仮想マシンでも動くけど、

  • 仮想マシンのセキュアブートOFFは必須。
    • ONでは起動できないようだ。
  • 仮想マシンのネットワークアダプターの高度な設定で、MACアドレスは「静的」に変える。
    • 動的のままでは、起動の度にIPアドレスが変わってしまう。
  • 仮想マシンの統合サービスでゲストサービスも使えるらしいのでチェックを入れる。
  • データ用のディスクが別途必要。

設定を終えて起動してみると、

自動的にダウンロードしたOSイメージからインスト。

完了したら、

再起動、

コンソールの最後にブラウザからアクセスするURLが表示される。

「システム」⇒「全般」で、ブラウザからアクセスする際のポートを変更できるのが地味に便利。

※WordPressとかWeb系アプリを入れるとか色々。

ただ、プラグインを色々インストしてみようとしたが、NATにしないとインストでエラってしまう。

難しいなぁ。



[Linux]chrome

ダウンロードページからインストしようとしたら、1つ依存パッケージが見当たらないと出たので、

※chrome用のyumリポジトリィファイルを作る
# sudo vi /etc/yum.repos.d/google.chrome.repo
i
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
「esc」:wq
※内容チェック
# yum search google chrome
google-chrome-beta.x86_64 : Google Chrome (beta)
google-chrome-stable.x86_64 : Google Chrome
google-chrome-unstable.x86_64 : Google Chrome (unstable)
※安定版をインスト
# sudo yum install google-chrome-stable

※元ネタは、Google Chromeをインストールする Rocky,Alma,CentOS

chromeの拡張機能のchrome リモートデスクトップはインストできたので、他のパソコンに繋ぐことはできた。

しかし、他のPCから接続しようとdebパッケージで作られたパッケージのインストールができなかった。

一応、CentOS Stream8とMIRACLE LINUX 8.4にChrome Remote Desktopで接続する で

alienパッケージを使用して debパッケージをrpmパッケージに変換すれば使えるようになるらしいが、最新のdebパッケージではダメらしいので、パス。

すなおにUbuntuを入れようとしたが、cockpitの仮想マシンへの「OSのダウンロード」でUbuntu18をインスト中の「パッケージのインストール」で無限ループに入ってしまったので挫折。

ps.2023/08/17

ubuntu-22.04.2-desktop-amd64.isoをダウンロードし、これを仮想マシンにマウントする方式で無事Ubuntu 22をインストできた。

vncコンソールのマウスのポインタがズレて判定され操作しにくい。(特に×クリック

ここで、コンソールの「デスクトップビューアー」を試してみた。

  1. WindowsにRemote Viewerをダウンロードしてインスト
    • virt-viewer 11.0 (gpg) Friday November 18th, 2021 Win x86 MSI (gpg) 「Win x64 MSI (gpg)
    • インストするとv拡張子と連動する。
  2. 【リモートビューアーの起動】ボタンを押す
    • spice://127.0.0.1:5901へ接続する設定ファイルがダウンロード
      • そのまま実行しても接続失敗
      • ダウンロードしたvvファイルは自動削除設定になっている。
  3. cockpitが動作しているマシンのIPアドレスに差し替えても
    • 接続失敗。
  4. 使用する5900, 5901ポートを解放
    • 接続失敗。

ローカルホスト上でcockpitを起動している場合のみ、コンソールの「デスクトップビューアー」が使える様だ。

※もしかしたらWindowsの場合のみ127.0.0.1になるのかもしれない。

シリアルコンソールではクリップボードが使えるが、

vncコンソールでは使えないので、

諦めてSSHサービスをインスト。

$ sudo apt-get install openssh-server

勿論、以下はTeraTermから操作。

chromeをインスト。

$ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
$ sudo dpkg -i google-chrome-stable_current_amd64.deb
$ google-chrome で起動

chromeから remotedesktop.google.come/access を開き、chromeリモートデスクトップをインストし拡張画面へ移動。

リモートホストもインストさせようとしたが失敗。

手動に切り替える。

$ wget https://dl.google.com/linux/direct/chrome-remote-desktop_current_amd64.deb -P ~/Downloads
$ sudo dpkg -i ~/Downloads/chrome-remote-desktop_current_amd64.deb
$ mkdir ~/.config/chrome-remote-desktop で作業フォルダを作っておく

するがdpkgでエラる。

どうやら、libutempter0モジュールが見当たらないらしい。

しかし、

$ sudo apt-get install libutempter0

しても先のdpkgが途中でエラーったのが影響しているのか失敗。

画面に apt –fix-broken installを試してね。と提案が出ていたので、

$ sudo apt --fix-broken install

で、無事リモートデスクトップがインストされた。

※うまくいかない場合もあるらしい。

とりあえず、WindowsからUbuntu22のデスクトップにアクセスできたが、nonモニターのため真っ黒。

結論

仮想マシンのvncコンソールがイマイチ。

  1. クリップボードが使えない。
  2. デスクトップ上のマウスポインタの座標がクリックした時とズレている。

chromtリモートデスクトップでリモート接続できても、モニターレスなら多分真っ黒画面になるので、仮想マシンはキャラベースでインストした方が安心。

こうなるとLinuxにHTML5なリモートデスクトップが欲しくなる。(Linux限定になるけどね

ThinVNCがあるか・・・



[Linux]noVNC

cockpitのコンソールがnoVNCで、できているらしい。

ブログサーバは非力過ぎて固まりかけていたので、Hyper-VにインストしたAlmaLinux9があるからインストしてみた。

コチラを参考に固有情報以外はそのまんまインストしてみた。

最初は電子証明書がうまく機能せずエラってダメだった。

systemctl enable --now vncserver@:1 vncserver@:2

だけでは無理なのかな?

systemctl start --now vncserver@:1 vncserver@:2

も追加したけどダメ。

なぜ記事にはsystemctl start コマンドが無かったのか?再起動するなら不要だけど・・・!

AlmaLinux9を再起動してnovnc_proxy を実行すると、何事もなかったかの様に接続できた。

今のvncは一度再起動後しないと都合が悪いのかな?

さて、実際にAlmaLinux9のデスクトップ画面で色々操作してみると反応はとても良い。

古いとは云えCPUはINTEL i9-9900だし32GBメモリあるし同じパソコン同士なんだから当然として

AlmaLinux9でyoutobeで動画が普通に観れるのはスゴいなぁ。

音は出ないけどね。

難点を云えば、VNCクライアントなので、

  • サーバでVNCサービスが動作していることが前提
    • 接続するサーバのユーザ毎にVNC用のパスワードを設定
    • 接続するサーバのユーザ毎にVNC用のポートを割り当てる

また、novnc_proxyもユーザ毎にポートを割り当てる必要があるから、ユーザ数分ファイアーウォールに穴をあけないといけないから、サーバー側は「ユーザ数×2倍」のポートを占有されてしまう。

その辺はxrdpの方が優しい。インストも楽だし。

あ、novnc_proxy をサービス化しないと、ラズパイ用の記事を発見。

先のnovnc_proxyをオプション付きでファイル化。

#!/bin/bash


sudo novnc_proxy --listen 6080 --cert /root/novnc.pem --vnc localhost:5901 --ssl-only

パーミッションは777。

これを呼び出すサービスの設定ファイルを作る。

[Unit]
Description=Run vnc and novnc

[Service]
Type=simple
RemainAfterExit=yes
ExecStart=/フルパス名でnovnc.sh
ExecStop=sudo vncserver -kill :1 && killall websockify
Restart=always
RestartSec=10
SELinuxContext=system_u:system_r:novnc_session_t:s0

[Install]
WantedBy=multi-user.target

パーミッションは777。

他のサービスは皆リンクファイルなので、

/usr/lib/systemd/system/novnc@.service

として作成した方がいいのかもしれない。

でもとりあえずstartできるけど

SE Linuxが有効だとダメ。

# chcon -t usr_t novnc.sh

やってみると一瞬動いたものの、再び起動しようとすると失敗。

ポリシーを変更してnovns.shを実行できるようにすればいいのだろうけど、メンドクサイのでパス!



[Linux]Cockpit Web コンソール

TeraTermで接続したら

Activate the web console with: systemctl enable –now cockpit.socket

っとメッセージが気になったのでググってみると

どうやらCockpitというWebコンソールパッケージを使おう!と云う提案らしい。

まぁ、TeraTermをインストしなくて済むならCockpitもアリかな?と思いCockpitをインスト。

# dnf install cockpit
# systemctl enable --now cockpit.socket
# firewall-cmd --permanent --zone=public --add-service=cockpit
# firewall-cmd --reload

これでCockpitが

https:/192.168.xxx.xxx:9090/

で、使えるようになった。

ブラウザに「保護されていない通信」と表示されるのは仕方が無い。(笑

メニューの一番下に「端末」機能もあるので、これでTeraTermともオサラバ?かと思ったけど

「端末」から接続してみると、「概要」でのCPU負荷が95%に上がってしまう様だ。

でも、TeraTermからも接続してtopコマンドで確認すると「端末」を開くとCPU負荷が60%まで上がりその後1%未満になるので、そう悪くない。

この「端末」でtopコマンドを実行すると反応が鈍いが、これもCPUのせいか?

ホストOS側にもインストしてDashboardやVirtual Machinesのアドオンを載せると楽そう。ゲストOSのコンソールまで付いているので行方不明になった時に便利そう。

ポートも

systemctl edit cockpit.socket

で、/etc/systemd/system/cockpit.socket.d/override.confを作成し適当なポートを割り当てればいいみたいなので、何かのWebサーバー管理とダブっても対応できそう。

ホストOS側で「ネットワーク」がNetworkManagerサービスを起動してもうまく認識できないかったので、anaconda-nm-config.serviceを起動しNetworkManagerを再設定し再ログインしたところ、表示するようになった。VM用のブリッジのせいかな?

ま、なんとなく使いそうなものは揃っている様だ。

唯一の難点は「最初の最初はTeraTermでログインしなければならない」ので、WindowsにTeraTermは必要そう。

しかし、これもゲストOSをコンテナ化しておけば多少面倒が減りそうな気もする。

ps.2023/08/10

程なく、動かなくなっていた。(大汗

原因は皆目見当が付かなかったので、ホストOS側のブリッジを作り直したり

ポートは、enp系のみチェックする。vnetxxは仮想マシン起動すると自動的にチェックが入るので不要。

何気にゲストOS側からIPアドレスを取得させてみると・・・

# ifconfig ens2 
ens2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether **:**:**:**:**:**  txqueuelen 1000  (Ethernet)
        RX packets 109  bytes 23789 (23.2 KiB)
        RX errors 0  dropped 4  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
# dhclient  enp0s2 ※または ens2 でIPアドレス割当要求
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether **:**:**:**:**:** brd ff:ff:ff:ff:ff:ff
    altname enp0s2
    inet 192.168.***.***/24 brd 192.168.***.255 scope global dynamic ens2
       valid_lft 14295sec preferred_lft 14295sec

と繋がるものの再起動すると繋がらない。

そう。

「全般」のチェックが抜けているとメンドクサイ事になる

ゲストOSのcockpitで、ネットワークのens2(環境によりマチマチな名)を見ると

なぜか「全般」の「自動的に接続」のチェックボックスが外れていた。

あと、

br0ばかり使えば良いけど、br1とか作ってもなかなか出てこないのは不便

この辺はcockpitと云うよりも既存のifconfigやdhclient自体の設定の反映が超遅いので仕方が無いけど

ネットワークでシクジると、己を信じつつ、じっくり時間をかけて少しづつ進めるしかないようだ。

※ああ、メンドクサイ。

尚、途中でホスト側すらLANから繋がらなくなったので、やはりモバイルモニターと非常用のキーボードは必須の様だ。でも、最後には面倒になって本体を棚から引っ張り出して普通のモニターに繋ぎ、

設定を変えては ip a で状況を観察していたけどね。(笑

試しにUbuntuの仮想マシンも作ってみると、cockpitの仮想マシンのコンソールにVPNやX windowの選択が出てくるので、TeraTerm接続で最小インストールから頑張るより楽だと思う。

注意点としては、仮想マシン作成時にISOイメージファイルを指定すると、CD-ROMデバイスとしてマウントしてくれて便利だけど、インスト後は不要とcockpitの画面からCD-ROMを削除して仮想マシンを起動するとkernel-panicになってしまうので「OSをダウンロードします」の方がいいかも。

但し、しょぼいCPU(J1900とか)ではOSのグラフィカルなインストーラの反応がさっぱり動かない時もあるので気長に。

後、rootディスクの空きが少なかったので、仮想マシンの「ストレージプール」で新規に追加してみた。/home/vmdiskとファイルの所有者設定の都合上、/homeにした。

これを使って、既存の仮想マシンにディスクを追加するとコンソールにログが出るから

# [  190.474791] pci 0000:00:03.0: [1af4:1001] type 00 class 0x010000
[  190.480984] pci 0000:00:03.0: reg 0x10: [io  0x0000-0x003f]
[  190.484985] pci 0000:00:03.0: reg 0x14: [mem 0x00000000-0x00000fff]
[  190.493296] pci 0000:00:03.0: BAR 1: assigned [mem 0xc0000000-0xc0000fff]
[  190.498379] pci 0000:00:03.0: BAR 0: assigned [io  0x1000-0x103f]
[  190.503135] virtio-pci 0000:00:03.0: enabling device (0000 -> 0003)
[  190.570240] virtio-pci 0000:00:03.0: virtio_pci: leaving for legacy driver
[  190.579224] virtio_blk virtio5: [vdb] 62914560 512-byte logical blocks (32.2 GB/30.0 GiB)
[  190.585383] vdb: detected capacity change from 0 to 32212254720

ゲストOS側でmounttabにvdbデバイスをmounttabに追記すればいいのかなぁ?とか悩んでいるウチに仮想マシンがクラッシュしたので、追加したディスクを削除して実行。

仕方が無いから、WindowsのHyper-Vでディスク後付けの手順を確認してからやり直そう。

新規仮想マシン作成時で「ストレージプール」を指定する時も作成済みのボリュームファイルを指定する様なUIなので、指定の確認漏れ(≒ミス)=指定してしまった既存ファイルの破壊に繋がるから要注意だ。

  1. 事前にダミーファイルを作りUIを回避
  2. 【作成して編集する】ボタンで即実行を回避
  3. 正しいファイル名でディスクを追加
  4. ダミーファイルのディスク設定を削除
  5. 【実行】

こんな手順になるけど、こっちはちゃんとインストできた。



[blog]激重

データベースエラーが出ていた。

原因はブログ用のゲストOSがヘタれ、コマンドプロンプトでコマンドを打つと10秒くらい応答が無かったので、タイムアウトチェックに引っかかるものは全てエラってるっぽい。

rebootやpoweroffコマンドは通るもののシャットダウンする気配が無い。

ホスト側は特に異常は見当たらない。

virt-topでゲストOSの負荷を見ても、CPU:0.5%しかない。

仕方なくホスト側を再起動。

apacheの設定を見直してみると前のDDNSのドメインのままになっている箇所を発見。

コレのせいかな?

てか何で普通に観れてたんだろう???

とりあえず、バックアップを取っておこう。圧縮しても4GB越え。

WinSCPでコピると6分以上かかる。

とても古い圧縮方式arcfourの優先度を最上位にしてもほとんど差が無かった。

サーバ側が古すぎなのは未サポートになってた様な気もする。

当然、同時接続数をq2から9に上げても変わらず。

やっぱりCPUか。J1900だもんなぁ。



[Hyper-V]The unsigned image’s hash is not allowed

Hyper-Vで第2世代を選択するとUEFIが使えるし、Hyper-VマネージャからのシャットダウンもOK

LinuxのVMを作成して起動すると

暫くまたされた後にUEFIで

The unsigned image’s hash is not allowed

と出て起動に失敗する。

要はセキュアブートの初期設定がWindow用だったダケだった。

セキュアブートを変更

とすると、無事起動できた。

VMを作る時に設定できれば困らないのに・・・



[CentOS8]AlmaLinuxへ移行

移行スクリプトがあったので

# curl -O https://raw.githubusercontent.com/AlmaLinux/almalinux-deploy/master/almalinux-deploy.sh
# bash ./almalinux-deploy.sh

ダウンロードするパッケージは1.5Gbytesくらいあるらしい。

しかし、インストール時にエラってしまったので、

epelとremiリポジトリィを無効化し、ついでに最新状態にしておいた。

# dnf config-manager --disable epel epel-modular remi-modular remi-safe
#dnf update

再度、移行スクリプトを実行するとうまくいったようだ。

# cat /etc/redhat-release
AlmaLinux release 8.6 (Sky Tiger)

このまま再起動すると、sshもscpもhttpdも繋がらない・・・と思ったけど、サービスの起動にとても時間がかかっていただけだった。

x-windowとか諸々入っている。xrdpサービスを起動すればリモートデスクトップでも繋がる。

けど、J1900,4GBだから遅いなぁ



[Oracle19c]プラガブル・データベースを・・・

サーバ起動後は

まずは、リスナーを起動

$ lsnrctl start
・・・
STATUS of the LISTENER
------------------------
・・・
Listener Parameter File   /usr/oracle/database/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/******/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=******)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully

次にCDBを起動

$ sqplus /NOLOG
SQL> startup;
*******

プラガブル・データベースの状態をチェック

SQL> show pdbs;
    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 ******  			  READ WRITE NO

とりあえず接続先をチェック。※多分 CDB$ROOTのハズ

SQL> show CON_NAME;

プラガブル・データベースを起動してみよう

SQL> alter pluggable database ****** open;
Pluggable database altered.

SQL> show pdbs;
    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 ******  			  READ WRITE NO

CDB作成時に作られたPDBは管理者名が不明で表領域もあるのかどうかも判らなかったので、

dbcaコマンドで別途にPDB(PDB1,PDB2)を追加してみた。

PDBの管理者名はpdbadminとか何となく判るものを作っておく。

表領域の作成にチェックを入れれば作ってくれるので便利。※手順は省略。

ここで、lsnrctl status を何度か叩くと、最後に各PDB名っぽいSERVICE_NAMEの情報が拾えるので

※今回はCDBのサービス名のドメイン名のマシン名の部分がPDB名に差し替えられていた。

そこからサーバのtnsnames.oraにPDB用の設定を手で追加。

※サーバで使わないハズだけど、サーバに元ネタとして置いておかないと新しいクライアントを作る時に悩むハズ。

PDB1 =
  (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = ******)(PORT = 1521))
     (CONNECT_DATA =
       (SERVER = DEDICATED)
       (SERVICE_NAME = pdb1.******)
     )
  )

PDB2 =
  (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = ******)(PORT = 1521))
     (CONNECT_DATA =
       (SERVER = DEDICATED)
       (SERVICE_NAME = pdb2.******)
     )
  )

本命のクライアントのtnsnames.oraを追記

PDB1 =
(DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP) (HOST = ******)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = pdb1.******)
   )
)

PDB2 =
(DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP) (HOST = ******)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = pdb2.******)
   )
)

どっちもほぼ同じで、HOSTのみ、各環境で判るドメイン名とかIPアドレスとかにしておかないといけない。※IPアドレスにすれば同一になるはず。

dbcaコマンドでは各PDBの管理者にDBA権限が付与されていないので、

$ sqlplus / as sysdba
SQL> alter session set container=${各PDB名}; ※だったかな?
SQL> GRANT DBA TO ${各PDBの管理者名};

で、それぞれのPDBの管理者にDBA権限を付加した後に

それぞれのPDBの管理者でPDBに入り

$ sqlplus ${管理者名}/${パスワード}@${PDB名}
SQL> CREATE TABLE TBL1 か TBL2
 (
 empno VARCHAR2(10) NOT NULL,
 empname VARCHAR2(50),
 gender_f NUMBER(1,0)
 ) 
;  2    3    4    5    6    7  
Table created.

な感じで、PDB1にTBL1、PDB2にTBL2を作成し、

A5から、

CDB:(接続文字列:orcl、 ユーザ:system)、

PDB1:(接続文字列:pdb1、ユーザ: pdbadmin)

PDB2:(接続文字列:pdb1、ユーザ: pdbadmin)

でORACLE(OCL経由)接続を作った。

※ORACLE直接接続は

各赤枠はクライアントのtnsnames.oraの通り

それぞれで、

select * from TBL1;
select * from TBL2;

してみたら、

CDBは共に無し

PDB1はTBL1のみ

PDB2はTBL2のみ

と予想通りの結果になった。

改めて、sqlplusでpdb1に接続してみよう

SQL> alter session set container=PDB1;
SQL> show pdbs;

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 4 PDB1 			  READ WRITE NO
※もう自分しかみえなくなっている
※CDBに戻ってPDBをこの状態で、自動起動にする
SQL> alter session set container=CDB$ROOT;
SQL> alter pluggable database all save state;

プラガブル・データベースを終了してみよう

SQL> alter pluggable database ****** close;
Pluggable database altered.

SQL> show pdbs;
    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 ****** 			  MOUNTED

CDBも終了、SQLPLUSも終了する

SQL> shutdown;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> quit

これで、startupすれば、今まで通りに使えるはず。

※多分

と、ここまで書いたものの・・・

ネットをググると、多種多様な結果がヒットするので、

  • ひたすらSQLPLUSでコマンドを打ち続ける人
  • ツールを使いつつSQLPLUSでコマンドを打ち続ける人
  • ツールのみの人

それぞれで、

各々データベースの構成も違うし、

設定ファイルの更新の有無も変わるし、

手順やコマンドも変わるし、

ここの内容は極一部の人にしか参考にならない様な気がしてきた。

うーむ、恐るべしは・・・・・・。




top