ねら~ITエンジニア雑記

やきうのお兄ちゃんが綴るOracle Databaseメインのブログ

OCI(Oracle Cloud Infrastructure) の IAM Policy で「パスワードの作成/リセット」「ユーザーの削除」"だけ"が不可能な IAM Users管理権限 を付与してみる。

表題の通り、OCI(Oracle Cloud Infrastructure) の IAM Policy で「パスワードの作成/リセット」「ユーザーの削除」"だけ"が不可能な IAM Users管理権限 を付与してみるやで。
彡(゚)(゚)

1. OCI(Oracle Cloud Infrastructure) の 権限制御 の仕組み(ざっくり)

下記マニュアルを参照しながらざっくりと。彡(゚)(゚)

ポリシーの仕組み
https://docs.oracle.com/cd/E97706_01/Content/Identity/Concepts/policies.htm

OCI(Oracle Cloud Infrastructure) の権限制御は IAM User, IAM Group, IAM Policy といった仕組みで制御されます。Policy に Policy Statement という権限制御のための構文を記述して、Groupを経由して(※) IAM User に付与します。
※Groupを経由せずに直接 IAM User に付与することも可能です。

以下のようなイメージ彡(゚)(゚)

IAM Policy ⇒ IAM Group ⇒ IAM User

2. Policy Statement の書き方(ざっくり)

やはり下記マニュアルを参照しながらざっくりと。

ポリシーの仕組み
https://docs.oracle.com/cd/E97706_01/Content/Identity/Concepts/policies.htm

例えば、あるコンパートメント内のリソースに対する権限を付与する場合は、下記のような Policy Statement を書きます。

Allow group <group_name> to <verb> <resource-type> in compartment <compartment_name>

IAM User のようなテナントのリソースについては、テナントの権限として Policy Statement を書きます。

Allow group <group_name> to <verb> <resource-type> in tenancy

verb や resource-type については、下記マニュアルに記載があります。

動詞 ※verb のことです
https://docs.oracle.com/cd/E97706_01/Content/Identity/Reference/policyreference.htm#Verbs

Resource-Types
https://docs.oracle.com/cd/E97706_01/Content/Identity/Reference/policyreference.htm#Resource

IAMの詳細
https://docs.oracle.com/cd/E97706_01/Content/Identity/Reference/iampolicyreference.htm

IAM User の管理権限を付与する場合は、下記のような Policy Statement を記載します。

ALLOW GROUP ays-group01 to manage users in tenancy

上記だけだと "「パスワードの作成/リセット」「ユーザーの削除」だけが不可能" が満たせません。下記マニュアルにある where conditions句 によって、詳細な制御を行います。

ポリシーの構文
https://docs.oracle.com/cd/E97706_01/Content/Identity/Concepts/policysyntax.htm
ポリシー・ステートメントの全体的な構文は次のとおりです
Allow <subject> to <verb> <resource-type> in <location> where <conditions>

条件
1つまたは複数の条件を指定します。 anyまたはallを論理ORまたはANDにそれぞれ複数の条件で使用します。
単一の条件の構文: variable =|!= value
複数の条件の構文: any|all {<condition>,<condition>,...}

3. Policy Statement の where condition句 に記載する条件

where conditions句 に記載できる variable の共通な要素については、下記マニュアルに記載があります。この中から request.permission を variable の要素としてピックアップします。

General Variables for All Requests
https://docs.cloud.oracle.com/en-us/iaas/Content/Identity/Reference/policyreference.htm#General

request.permission

Verbs と Resource-Type の組み合わせについて、下記マニュアルに記載があります。この中から「パスワードの作成/リセット」「ユーザーの削除」に対応する組み合わせの value として、users の USER_DELETE, USER_UIPASS_SET, USER_UIPASS_RESET をピックアップします。

Details for IAM
- Details for Verbs + Resource-Type Combinations
https://docs.cloud.oracle.com/en-us/iaas/Content/Identity/Reference/iampolicyreference.htm

+ users

これらを組み合わせて、下記のよな Policy Statement を記載します。※実際には1行で記述

ALLOW GROUP ays-group01 to manage users in tenancy
    where all {
          request.permission != 'USER_DELETE'
        , request.permission != 'USER_UIPASS_SET'
        , request.permission != 'USER_UIPASS_RESET'
    }

下記は Policy Statement の画面スクリーンショットとなります。
IAM001.jpg

4. Policyを付与したIAMユーザーで「パスワードの作成/リセット」「ユーザーの削除」を実行してみる。

該当の Policy を付与した IAMユーザーでログインしなおして、「パスワードの作成/リセット」「ユーザーの削除」を実行してみます。

まずはログインした IAMユーザー で お試し用の IAMユーザー を作成してみます。
IAM002.jpg

これは上手く行きます。次に お試し用に作成した IAMユーザー の「パスワードの作成/リセット」を実行してみます。
IAM003.jpg

しっかりと失敗しました。Policy Statement の where condition句 に記載した条件が上手く機能しています。「ユーザーの削除」を実行してみます。
IAM004.jpg IAM005.jpg

これも失敗しました。Policy Statement の where condition句 が上手く動作している事を確認できました。

5. まとめ

IAM Policy廻りの権限制御は where condition句で細かい制御ができるんですが、なかなかに難解や……彡(-)(-)
マニュアルを良く読み込んで、動作確認しながら実践投入するんやで彡(゚)(゚)

歴代使用PC(SSD換装含む)のIO性能比較・2019年末版

ベンチの条件が揃えられていない(ベンチソフトや暗号化ソフトのバージョンなど)ので参考値です。

旧々Note PC SATA-HDD(2010年~2013年使用)

                Sequential Read :    32.545 MB/s
               Sequential Write :    42.256 MB/s
        Random Read 4KB (QD=32) :     0.604 MB/s [   147.4 IOPS]
       Random Write 4KB (QD=32) :     0.558 MB/s [   136.3 IOPS]

旧Note PC SATA-SSD(2013年~2016年使用)

※暗号化ソフトの影響かカタログスペックより大分悪かったです。

                Sequential Read :   132.279 MB/s
               Sequential Write :   131.631 MB/s
        Random Read 4KB (QD=32) :   122.089 MB/s [ 29806.8 IOPS]
       Random Write 4KB (QD=32) :    88.789 MB/s [ 21677.1 IOPS]

新Note PC SATA-SSD(2016年~2019年)

         Sequential Read (T= 1) :   470.196 MB/s
        Sequential Write (T= 1) :   481.540 MB/s
  Random Read 4KiB (Q= 32,T= 1) :   371.768 MB/s [ 90763.7 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :   306.572 MB/s [ 74846.7 IOPS]

新々Note PC NVMe-SSD(2019年~)

[Read]
Sequential 1MiB (Q=  8, T= 1):  3576.991 MB/s [   3411.3 IOPS] <  2342.33 us>
Sequential 1MiB (Q=  1, T= 1):  2295.814 MB/s [   2189.5 IOPS] <   456.16 us>
    Random 4KiB (Q= 32, T=16):   489.536 MB/s [ 119515.6 IOPS] <  4142.30 us>
    Random 4KiB (Q=  1, T= 1):    51.781 MB/s [  12641.8 IOPS] <    78.81 us>

[Write]
Sequential 1MiB (Q=  8, T= 1):  1997.182 MB/s [   1904.7 IOPS] <  4187.50 us>
Sequential 1MiB (Q=  1, T= 1):  1488.012 MB/s [   1419.1 IOPS] <   703.58 us>
    Random 4KiB (Q= 32, T=16):   378.880 MB/s [  92500.0 IOPS] <  5504.76 us>
    Random 4KiB (Q=  1, T= 1):    89.608 MB/s [  21877.0 IOPS] <    45.28 us>

Randam I/O時 の IOPS進化 は控えめですが、Sequential I/O時 の MBPS値 は圧倒的進化! 彡(^)(^)

Oracle Cloud の Load Balancer で Private Compute に置いた 静的HTML を ロードバランスしながら表示してみる。

こちらの記事は Oracle Cloud Infrastructure Advent Calendar 2019 Day 16 の記事となります。

Oracle Cloud Infrastructure Advent Calendar 2019
https://adventar.org/calendars/4516

表題の通り、OCI の Load Balancer で Private Compute に置いた 静的HTML を ロードバランスしてみるやで。
彡(゚)(゚)

1. 構成図

下記のような構成を組みます。
AdventC_000.jpg

ポイントは以下の通りです。

・Public Subnet に Load Balancer と 踏み台Compute を配置
・Private Subnet に Compute を 2つ配置
・Public Subnet に Internet Gateway を アタッチ
・Private Subnet に NAT Gateway と Service Gateway(※) をアタッチ
 ※本記事の構成だけであればSGWは不要ですが、後日に繋ぎます。

2. ネットワーク・リソースの構成

構成図通りに VCN, Route Table, Security List, Gateway, Subnet を作成します。下記の記事を参照すると非常に捗ります。彡(゚)(゚)

Oracle Cloudが永遠に無料らしいので開発環境を作ってみたかった (ネットワーク編)
https://qiita.com/mokkan/items/ffb5bae17edce8e563be

下記スクショはPublic/Privateそれぞれのセキュリティ・リストとルート表彡(゚)(゚)

AdventC_007.jpg
AdventC_008.jpg
AdventC_009.jpg
AdventC_010.jpg

3. Computeインスタンス作成&sshログイン

Computeインスタンスを粛々と作成します。下記記事が参考になります。

【OCI】oracle cloud -仮想マシン(Compute)作成編-【初心者向け】
https://qiita.com/manaki079/items/0ded6b4e25c2f57b3657

踏み台を経由した Private Compute の sshログイン には下記記事のやり方を参考にしています。

Pageantを使用した踏み台サーバー経由のssh
https://qiita.com/untitle_23/items/7af5e6b1d29f95c13f36

4. Private Compute に Apache(httpd)インストール 及び OS firewall の 80番ポート開放

下記記事を参考にさせて頂きました。(`・ω・)ゞ

CentOS7.2 httpdの設定
https://qiita.com/salt_field/items/3e255c3356006a1e020f

sudo su -  
yum install httpd  
systemctl start httpd  
firewall-cmd --add-service=http --zone=public --permanent  
firewall-cmd --reload  

5. 静的HTML の配置

Private Compute の /var/www/html に index.html を配置します。BODY部分は変えておくとロードバランス時の区別が付きます彡(゚)(゚)

<!DOCTYPE html>  
<HTML>  
<HEAD>  
    <title>LB test</title>  
</HEAD>  
<BODY>  
    Hello, host2.  
</BODY>  
</HTML>  

6. Load Balancer, Backend Set, LB Listener の作成

Load Balancer, Backend Set, LB Listener を作成します。スクショぺたぺた彡(゚)(゚)
AdventC_001.jpg
AdventC_002.jpg
AdventC_003.jpg
AdventC_004.jpg

7. Load Balancer へのアクセス(静的HTML表示)

Load Balancer の Public IP を ブラウザの URL に指定してアクセスします。
http://\<LBのPublic IP>/index.html へのアクセスで、ロードバランスできてる!彡(^)(^)
AdventC_006.jpg
AdventC_005.jpg

8. まとめ

当初は Always Free で この記事書こうとしてたのですが、Always Free だと Private Computeにsshはできるものの、NAT Gateway が作れなくてyumが出来なくてですね……彡(-)(-)
とまれ、Load Balancer の基本的な動きは確認できました。LBのSSL(https)設定とか、Autonomous Database接続する簡易アプリとか、続きを書くかも?彡(゚)(゚)

後で読む!!! 個人的にピックアップした Advent Calendar 2019

全部IT系、後で読む!!!(※) 彡(゚)(゚)
※フラグ


JPOUG Advent Calendar 2019

https://adventar.org/calendars/4154


Oracle Cloud Infrastructure Advent Calendar 2019

https://adventar.org/calendars/4516
https://adventar.org/calendars/4882


本番環境でやらかしちゃった人 Advent Calendar 2019

https://qiita.com/advent-calendar/2019/yarakashi-production


Oracle Cloud always free Advent Calendar 2019

https://adventar.org/calendars/4444


実行計画は、SQL文のレントゲン写真だ! Oracle Database編 (全部俺) Advent Calendar 2019

https://adventar.org/calendars/4737


MySQL Advent Calendar 2019

https://qiita.com/advent-calendar/2019/mysql


PostgreSQL Advent Calendar 2019

https://qiita.com/advent-calendar/2019/postgresql


Java Advent Calendar 2019

https://qiita.com/advent-calendar/2019/java


赤帽エンジニア Advent Calendar 2019

https://qiita.com/advent-calendar/2019/rh_engineers


Microsoft Azure Tech Advent Calendar 2019

https://qiita.com/advent-calendar/2019/microsoft-azure-tech


Azure Advent Calendar 2019

https://qiita.com/advent-calendar/2019/azure


DMMグループ Advent Calendar 2019

https://qiita.com/advent-calendar/2019/dmm


富士通クラウドテクノロジーズ Advent Calendar 2019

https://qiita.com/advent-calendar/2019/fjct


クラスメソッド 機械学習 on AWS Advent Calendar 2019

https://qiita.com/advent-calendar/2019/cm-machine-learning-on-aws


Oracle Database 19c + Oracle Cloud(IaaS, DBCS, ATP/ADW) のマニュアルのマニュアル(※よく使うマニュアルのリンク集)

こちらの記事は Oracle Cloud Infrastructure Advent Calendar 2019 Day 9 の記事となります。※JPOUG Advent Calendar 2019 とのクロスポスト予定でしたが、JPOUG の枠は他の人に譲りました。 彡(゚)(゚)

Oracle Cloud Infrastructure Advent Calendar 2019
https://adventar.org/calendars/4516

JPOUG Advent Calendar 2019
https://adventar.org/calendars/4154

去年に引き続き、Oracle Database 19c のマニュアルをピックアップして整理!最近はワイも Cloud案件 ばかりやっているので Oracle Cloud のマニュアルもピックアップしますやで。 彡(゚)(゚)

1. ブック(全マニュアル)のリンク

Oracle Database 19c ブック
https://docs.oracle.com/cd/F19136_01/books.html

やっぱりまずはココから!全マニュアルへのリンクがここに有る。ココをブックマークや!彡(゚)(゚)


Oracle Cloud Infrastructure サービス
https://docs.oracle.com/cd/E97706_01/Content/services.htm
Oracle Cloud Infrastructure Documentation ※英語マニュアル
https://docs.cloud.oracle.com/iaas/Content/home.htm

こちらは Oracle Cloud Infrastructure の IaaS のマニュアルとなります。Compute, Storage, Networking など、IaaSリソースはここからや!


Autonomous Transaction Processing ブック
https://docs.oracle.com/cd/E83857_01/paas/atp-cloud/books.html

Autonomous Data Warehouse ブック
https://docs.oracle.com/cd/E83857_01/paas/autonomous-data-warehouse-cloud/books.html

それぞれ Autonomous Database の ATP/ADW のマニュアルとなります。


ベア・メタルおよび仮想マシンのDBシステム
https://docs.oracle.com/cd/E97706_01/Content/Database/Concepts/overview.htm

OCI DBCS(DBaaS) のマニュアルはこちら。Autonomous Database ばっかり弄ってたんですが、こっちもチェックせなアカンね。

2. 頻繁に見るマニュアル

Oracle Databaseデータベース・リファレンス 19c
https://docs.oracle.com/cd/F19136_01/refrn/index.html

初期化パラメータ、データディクショナリ(DBA_~)、動的ビュー(V\$~)、データベースの制限事項(最大サイズとか)、待機イベント解説、各種統計(V\$SYSSTATのレコード)の説明、など重要情報が満載や! 彡(゚)(゚)


Oracle Database PL/SQLパッケージおよびタイプ・リファレンス 19c
https://docs.oracle.com/cd/F19136_01/arpls/index.html

DBMSほにゃららパッケージ系のご説明はこちら。DBMS_STATS、DBMS_XPLAN、DBMS_SQLTUNEなんかを良く見るかなぁ彡(゚)(゚)


DBMS_CLOUDサブプログラムの要約
https://docs.oracle.com/cd/E83857_01/paas/atp-cloud/atpug/dbms-cloud.html#GUID-3D0A5361-672C-467D-AA90-656B1B4D4E37

ピンポイントなんですが、Autonomous Database(ATP/ADW) の活用に DBMS_CLOUDパッケージは色々と用入りでして……(゚ε゚ )

3. 言語開発(SQL, PL/SQL, 等)系のマニュアル

Oracle Database SQL言語リファレンス, 19c バージョン19.1
https://docs.oracle.com/cd/F19136_01/sqlrf/index.html

各種SQLコマンド(SELECT, INSERT, UPDATE, DELETE, ALTER, CREATE, DROP, etc..)の構文図やオプション、標準ファンクション(TO_CHAR、SYSDATEとか)、ヒントの構文など彡(゚)(゚)


Oracle DatabaseデータベースPL/SQL言語リファレンス 19c
https://docs.oracle.com/cd/F19136_01/lnpls/index.html

PL/SQLの制御文(IF文, CASE文)、繰り返し(LOOP文, FOR文, WHILE文)、コレクションの使い方、BULK処理(FORALL処理)、ストアド系、トリガー、テーブル・ファンクションの作り方、etc...


Oracle Database Databaseグローバリゼーション・サポート・ガイド 19c
https://docs.oracle.com/cd/F19136_01/nlspg/index.html

文字コード系、NLS_~ほにゃらら、タイムゾーンサマータイム、年号元号とかはここ。今年は令和が話題になりましたやね彡(^)(^)


Oracle Database JSON開発者ガイド 19c
https://docs.oracle.com/cd/F19136_01/adjsn/index.html

最近は割と JSON もいじってます。極めて充実した Oracle Database の JSON関連ライブラリ、機を見て何か記事にまとめたい。彡(゚)(゚)

4. ユーティリティ、ツール系のマニュアル

Oracle Databaseデータベース・ユーティリティ 19c
https://docs.oracle.com/cd/F19136_01/sutil/index.html

Datapump(expdp, impdp), SQL*Loader(sqlldr), 外部表(EXTERNAL TABLE), LogMiner, ADRCI, 従来型エクスポート/インポート(exp, imp) などがこちら彡(゚)(゚) Autonomous Database の 外部表関連で、外部表(EXTERNAL TABLE) のセクションと睨めっこ……


SQL*Plusユーザーズ・ガイドおよびリファレンス 19c
https://docs.oracle.com/cd/F19136_01/sqpug/index.html

SQL*Plus(sqlplus)の使い方、SETコマンド、AUTOTRACEのオプションなど彡(゚)(゚)


Oracle Cloud Infrastructure CLI Command Reference
https://docs.cloud.oracle.com/iaas/tools/oci-cli/latest/oci_cli_docs/index.html

こちらは OCI CLI のリファレンスとなります。OCI CLI は IaaS, PaaS系リソースの起動停止やリスト取得など、コマンドラインから操作できる便利ツールや!彡(^)(^)


Oracle Cloud Infrastructure API Documentation ※REST API情報
https://docs.cloud.oracle.com/en-us/iaas/api/

OCI の REST API, Endpoint の情報など彡(゚)(゚)

5. 性能系(チューニング系)のマニュアル

Oracle Databaseデータベース・パフォーマンス・チューニング・ガイド 19c
https://docs.oracle.com/cd/F19136_01/tgdba/index.html

全体最適化、インスタンス・チューニング系のマニュアル。パフォーマンスの計画の話に始まり、Time Model、待機イベント、AWR分析、CPU/Memory/IO分析、メモリーチューニング、etc... 良く出来てます。オススメや!彡(^)(^)


Oracle Database SQLチューニング・ガイド 19c
https://docs.oracle.com/cd/F19136_01/tgsql/index.html

こちらは単体のSQLチューニングに特化した内容。SQLの解析(Parse)、実行計画、オプティマイザ統計、アクセスパスの解説、アドバイザ&SQLプロファイル、SPM、etc...SQLトレースやtkporfの使い方もココ。 こちらも非常に良く出来ていて、オススメ!彡(^)(^)


Oracle Database VLDBおよびパーティショニング・ガイド 19c
https://docs.oracle.com/cd/F19136_01/vldbg/index.html

VLDB ⇒ Very Large Database の略、パーティション(RANGE, LIST, HASH, COMPOSITE, etc...) と パラレル・クエリ のマニュアルと覚えときゃ大体おk(雑

6. SQL*Net系(tnsnames.oraとか sqlnet.oraとか 簡易接続とか)のマニュアル

Oracle Database Net Servicesリファレンス 19c
https://docs.oracle.com/cd/F19136_01/netrf/index.html

tnsnames.ora, sqlnet.ora, listener.ora のパラメータの意味などです。辞書っぽく使う感じ。


Oracle Database Net Services管理者ガイド 19c
https://docs.oracle.com/cd/F19136_01/netag/index.html

前者のマニュアルがパラメータ系のリファレンスなのに対し、こちらはNet Serviceのアーキテクチャ解説など。 でも一番良く読んだのは、簡易接続(EZCONNECT)とローカル・ネーミング・メソッドの接続記述子の書き方か……彡(゚)(゚)

7. DBA系のマニュアル

Oracle Databaseデータベース概要 19c
https://docs.oracle.com/cd/E96517_01/cncpt/index.html
cncpt233.gif

19c になってもこの図は変わらない。RDBMSの成り立ちから始まり、トランザクションの説明、データベースとインスタンスの関係、プロセス構造、メモリ構造、記憶域構造、読取一貫性、etc... アーキテクチャのお勉強や!彡(゚)(゚)


Oracle Database 2日でデータベース管理者 19c
https://docs.oracle.com/cd/F19136_01/admqs/index.html

DBA の一連の作業を広く網羅的に。インストールから始まり、DBCAによるDB作成、ネットワーク構成(リスナー、tnsnames.oraなど)、インスタンスの起動/停止、表領域やREDO&UNDOの管理、バックアップ・リカバリ、監視、チューニング、パッチ適用、etc... ただ Cloud の時代、Autonomous Database だと一連の作業を大幅にすっ飛ばす事ができるんですよね。彡(゚)(゚)


Oracle Database管理者ガイド, 19c
https://docs.oracle.com/cd/F19136_01/admin/index.html

DBA の一連の作業の深めなところ や dbcaコマンドのリファレンスなど。つい最近はこのマニュアルの 自動索引 のセクションを熟読してますた。彡(^)(^)

8. バックアップ・リカバリ, RMAN系のマニュアル

Oracle Databaseバックアップおよびリカバリ・リファレンス 19c
https://docs.oracle.com/cd/F19136_01/rcmrf/index.html

こちらは RMAN のコマンド・リファレンスとなります。BACKUP, CONFIGURE, RESTORE, RECOVER, DELETE, DUPLICATE あたりをよく見るですやろうか彡(゚)(゚)


Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド, 19c
https://docs.oracle.com/cd/F19136_01/bradv/index.html

こちらは RMAN によるバックアップ&リカバリアーキテクチャ、戦略等が解説されてます。初回 LV0 以降ずっと LV1 の バックアップ戦略について、書きてぇなぁ。。。彡(゚)(゚)

9. RAC, Clusterware, ASM のリファレンス・マニュアル

Oracle Real Application Clusters管理およびデプロイメント・ガイド 19c
https://docs.oracle.com/cd/F19136_01/racad/index.html

RAC(Real Application Cluster) の コマンド系のマニュアルです。srvctlコマンドのリファレンスと覚えておけばおk(雑


Oracle Clusterware管理およびデプロイメント・ガイド 19c
https://docs.oracle.com/cd/F19136_01/cwadd/index.html

こちらは Oracle Clusterware のコマンド系のマニュアルです。crsctlコマンドのリファレンス、たまにoifcfgのリファレンスと覚えておけばおk(雑2


Oracle Automatic Storage Management管理者ガイド 19c
https://docs.oracle.com/cd/F19136_01/ostmg/index.html

ASM(Automatic Storage Management)による Storage や ディスク・グループ の設計指針、管理など。asmcmdコマンドやacfsutilのリファレンスも有るよ!彡(゚)(゚)

10. Data Guard系のマニュアル

Oracle Data Guard概念および管理 19c
https://docs.oracle.com/cd/F19136_01/sbydb/index.html

Data Guard と言えばまずこれ。Data Guard のアーキテクチャ、スタンバイの作成、REDO転送と適用、ロール変換、Data Guard系の各種パラメータご説明も彡(゚)(゚)


Oracle Data Guard Broker 19c
https://docs.oracle.com/cd/F19136_01/dgbkr/index.html

Data Guard構成(Primary-Standby)を一つの論理的な構成として扱う Data Guard Broker。Broker と言えば自動Failover(ファスト・スタート・フェイルオーバー)を 思い出されるかもしれませんが、ワンコマンドのスイッチオーバー、MRP自動起動、ロール・ベース・サービスなど、その他のメリットも一杯!彡(^)(^)

11. インストール系のマニュアル

Oracle Databaseインストレーション・ガイド, 19c for Linux
https://docs.oracle.com/cd/F19136_01/ladbi/index.html

まずは Single構成 のインストールから。近年のバージョンのインストールは Oracle Preinstallation RPM のお陰でラクになった…彡(-)(-)


Oracle Grid Infrastructureインストレーションおよびアップグレード・ガイド 19c for Linux
https://docs.oracle.com/cd/F19136_01/cwlin/index.html

Single構成の次は GI(Grid Infrastructure) のインストール。昔よりはラクになったんですが、GIインストールの難易度は今も高め……彡(゚)(゚)


Oracle Real Application Clustersインストレーション・ガイド 19c for Linux and UNIX
https://docs.oracle.com/cd/F19136_01/rilin/index.html

最後に RAC(Real Application Clusters)のインストール。GIがインストールできてれば、こっちのインストールは楽勝なんかと彡(゚)(゚)

12. セキュリティ系のマニュアル

Oracle Databaseセキュリティ・ガイド 19c
https://docs.oracle.com/cd/F19136_01/dbseg/index.html

Oracle Database のセキュリティ一般の話。認証、認可(権限付与)、アクセス制御、暗号化、監査の話など彡(゚)(゚)


Oracle Database Vault管理者ガイド 19c
https://docs.oracle.com/cd/F19136_01/dvadm/index.html

Database Vaultは管理者同士の権限分掌と相互監視によって、特定管理者のセキュリティ違反を防止/追跡する機能。レルムじゃレルムじゃ~~彡(゚)(゚)


Oracle Database Advanced Securityガイド, 19c
https://docs.oracle.com/cd/F19136_01/asoag/index.html

主に暗号化に関するマニュアル。データを暗号化しておけばストレージが流出しても理論上は漏洩はしない、重要や!彡(゚)(゚)

13. 新機能&アップグレード系のマニュアル

Oracle Database新機能ガイド 19c
https://docs.oracle.com/cd/F19136_01/newft/index.html

新機能と言えばまずはこのガイド。19c にも注目の新機能はいっぱい彡(^)(^) 性能ジャンキーなんで、やはり性能セクションに惹かれてしまう……。


Oracle Databaseアップグレード・ガイド 19c
https://docs.oracle.com/cd/F19136_01/upgrd/index.html

既存の Oracle Database をアップグレードするためのガイド。ここに載っている Inplace なアップグレードって少なくなったんですが、Autonomous Database はどうなるか?彡(゚)(゚)

14. その他のマニュアル

Oracle Databaseライセンス情報ユーザー・マニュアル 19c
https://docs.oracle.com/cd/F19136_01/dblic/index.html

各種Editionやオプション、Cloudのサービスで使用可能な機能を俯瞰。PDBの緩和(3PDBまで無償) や Spatial and Graph無償化、生EEだと使えない自動索引などに一喜一憂彡(゚)(゚)


Oracle Databaseエラー・メッセージ 19c
https://docs.oracle.com/cd/F19136_01/errmg/index.html

ORA-xxxxxやRMAN-xxxxx等のエラー番号/メッセージを記載したマニュアル。エラーと言えばORA-600やORA-7445! ORA-600やORA-7445と聞くと顔が曇る人も多いですが、エラー無しでクラッシュするより何百倍もマシなんやで彡(゚)(゚)


Oracle Multitenant管理者ガイド 19c
https://docs.oracle.com/cd/F19136_01/multi/index.html

MTA(Multitenant Architecture), CDB, PDB のガイドはこちら。19cからは 3PDB までは追加費用無しになりました。まあワイの MTA(PDB) に対する理解って 管理者→CDB(CDB$ROOT)に接続、アプリ→PDBに接続、程度の雑な理解なんですがね……アプリで使う限り、MTA(PDB)はほぼ意識しないんかと。 彡(゚)(゚)


Autonomous Database ハンズオンラボ(HOL)
https://community.oracle.com/docs/DOC-1034727

マニュアルやないんですが、Autonomous Database のハンズオンなコンテンツが参照できます。Always Free の Autonomous Database と組み合わせて、もりもり検証や!
彡(^)(^)


Oracle Cloud Infrastructure 活用資料集
https://community.oracle.com/docs/DOC-1035494

こちらもマニュアルや無いんですが、OCI の主に IaaS関連の記事がまとめられています。要チェックや!
彡(゚)(゚)

15. まとめ

元ネタ(※去年のエントリ)が有ったので、今年は楽でした。こうやって振り返ってみると、Cloud風味が一気に増した一年やったなぁ。 今後も Oracle Database および Oracle Cloud, Autonomous Database(ATP/ADW) をよろしくですやで。
彡(^)(^)

Oracle Databaseの初心者が検証&学習する為の環境5選

こちらの記事は JPOUG Advent Calendar 2019 Day 3 および Oracle Cloud Infrastructure Advent Calendar 2019 Day 3 のクロスポストとなります。
彡(゚)(゚)

JPOUG Advent Calendar 2019
https://adventar.org/calendars/4154

Oracle Cloud Infrastructure Advent Calendar 2019
https://adventar.org/calendars/4516

表題の通り Oracle Databaseの初心者が検証&学習する為の環境を5つ紹介していくやで。
彡(^)(^)

1. Oracle Live SQL

まずは Oracle Live SQL です。Oracleアカウントを登録すれば、インストール等は一切不要でブラウザから Oracle Database の SQL を実行可能です。
彡(゚)(゚)

Oracle Live SQL
https://www.oracle.com/technetwork/jp/database/application-development/livesql/index.html

画面は下記のような感じ、赤くてカッコいいんですが、Redwood化しちゃうのかしらん……。

Advent001.jpg

2. Oracle Cloud Always Free (Oracle Cloud Free Tier)

次は Oracle Cloud の Always Free(Oracle Cloud Free Tier) です。Always Free では Autonomous Database や Compute を含む、様々なサービスを無償で利用できます。

Oracle Cloud Free Tier
https://www.oracle.com/jp/cloud/free/

Oracle Cloud PaaS & IaaS:2019年11月度サービス情報アップデート ※27スライド目
https://www.slideshare.net/oracle4engineer/oracle-cloud-paas-iaas201911/27
Advent004.jpg

Qiita記事でも検証して頂いている方が居らっしゃいます。記事中でも書かれてますが、申込時に携帯番号の頭一桁から0を除くのには注意です。
彡(゚)(゚)

Oracle Cloudが永遠に無料らしいので開発環境を作ってみたかった (準備編)
https://qiita.com/mokkan/items/cc1b6b3ca04c105e807a
地味に注意する点は、電話番号を指定するときに先頭の0を除かなければならないことです。(+81-<先頭の0を除いた携帯番号>)

Oracle Cloudが永遠に無料らしいので開発環境を作ってみたかった (DBサーバ編)
https://qiita.com/mokkan/items/0dea4a2f35ed4d28e167

Autonomous Database には SQL Developer Web というブラウザからアクセス可能な UI も備わっていて、すぐに検証可能です。最難関はアカウント発行?
(゚ε゚ )
Advent002.jpg

3. Oracle Technology Network, Database Virtual Box Appliance / Virtual Machine

次いで Database Virtual Box Appliance の紹介です。前2つは Managed な環境でやれる事に制限がありますが、こちらはクライアント端末上の Virtualbox で起動する Oracle Linux で動作が完結していて、SYSDBA作業を含むあらゆる検証が可能です。セットアップも簡単なんで、下記記事を参照して動かしてみて下さいね。
彡(^)(^)

OTN の VirtualBoxイメージ で Oracle DB 19c環境 を 楽々構築
https://qiita.com/ora_gonsuke777/items/b41f37637e59319796b4

Advent003.jpg

4. Docker Image で Oracle Database 19c環境を構築

ワイ氏 Docker は殆ど扱ったことが無い……:(;゙゚'ω゚'): とまれ、Virtualbox等よりも Docker の方が使い慣れている方々も大勢いらっしゃると思うので、関連記事をピックアップしてみます。
彡(゚)(゚)

[Oracle DB] 公式Docker Imageを利用してOracle Database 19c環境を構築してみた
https://itedge.stars.ne.jp/docker_image_oracle_database_19c/

Oracle Database 19c available on GitHub
https://blogs.oracle.com/database/oracle-database-19c-available-on-github-v2

DockerでMacOracle 19cをインストールして開発環境を構築する
https://qiita.com/alashino/items/41b5957cd864bbcc6ef8

5. 地道に Oracle Database 19c を インストール&DB作成

これは初心者向けと言えるのだろうか。。。ですがインストールから地道に環境を作成していくのも一つの道、幅広いプラットフォームに対応しているので、目の前のPCにインストールを始めること自体はすぐ可能です。※Macの方はスミマセン
彡(-)(-)

Oracle Database Databaseインストレーション・ガイド 19c for Linux
https://docs.oracle.com/cd/F19136_01/ladbi/index.html

Oracle Database Databaseインストレーション・ガイド 19c for Microsoft Windows
https://docs.oracle.com/cd/F19136_01/ntdbi/index.html

インストールが完了したら、データベースを作成していきましょう。下記マニュアルが参考になります。
彡(^)(^)

Oracle Database 2日でデータベース管理者 19c
https://docs.oracle.com/cd/F19136_01/admqs/index.html

6. まとめ

すぐに検証できる様々な Oracle Database環境!個人的なお気に入りは 3. の Virutualbox環境ですやろうか。無遅延は正義。それらも含めて、ぜひご活用して下さいませ。
彡(^)(^)

外部表(EXTERNAL TABLE) の ORACLE_DATAPUMPアクセス・ドライバーを使用して、CTAS(CREATE TABLE AS SELECT) でデータをファイル出力(アンロード)してみる。

Oracle Database の 外部表(EXTERNAL TABLE)ですが、一般的な用途としては CSV等のテキストファイルや
Oracle Database の Datapumpファイル を読み取る為に使用することが多いですが、
ORACLE_DATAPUMPアクセス・ドライバではファイル出力(アンロード)も可能です。

16.3 ORACLE_DATAPUMPアクセス・ドライバを使用したデータのアンロードとロード
https://docs.oracle.com/cd/F19136_01/sutil/oracle_datapump-access-driver.html#GUID-0B2EC1B2-701D-42ED-874C-47F22F21D847 ORACLE_DATAPUMPアクセス・ドライバは、SQLのCREATE TABLE AS SELECT文を使用した
外部表の作成の一環として、ダンプ・ファイルにデータを書き込むことができます。

今回の記事では、この機能を使って CTAS(CREATE TABLE AS SELECT) で dmpファイルを 出力してみるやで彡(゚)(゚)

1. 環境とデータ準備

VirtualBox の OTN 19c環境(Database Virtual Box Appliance) を使用しました。下記記事参照

OTN の VirtualBoxイメージ で Oracle DB 19c環境 を 楽々構築 https://qiita.com/ora_gonsuke777/items/b41f37637e59319796b4

データは Swingbench で SOEスキーマをサクっと作成。下記記事なんかが参考になります。

SwingBenchの OrderEntry Wizard (oewizard)をコマンドラインモードで実行する https://qiita.com/mon_tu/items/9d890e789f1a71f183a5

SQL> --検証に使用するデータ
SQL> SELECT COUNT(*) FROM SOE.ORDER_ITEMS;

  COUNT(*)
----------
   4300510

2. ディレクトリ・オブジェクトの作成&権限付与

SYSユーザーでPDBに接続して、ディレクトリ・オブジェクトの作成と権限付与を行います。

export ORACLE_HOME=/u01/app/oracle/product/version/db_1
export PATH=${PATH}:${ORACLE_HOME}/bin
export ORACLE_SID=orclcdb
unset TWO_TASK

sqlplus /nolog
CONNECT SYS/oracle@ORCL AS SYSDBA

CREATE DIRECTORY DIR_EXTERNAL as '/home/oracle/work/external';

GRANT READ, WRITE ON DIRECTORY DIR_EXTERNAL TO SOE;

3. 隠しパラメータ設定(バッドノウハウ……)

上記状態で外部表を作成しようとすると、下記のエラーが発生してしまいます。

*
ERROR at line 1:
ORA-29913: error in executing ODCIEXTTABLEPOPULATE callout
ORA-39155: error expanding dump file name
"/home/oracle/work/external/ext_order_items.dmp"
ORA-48128: opening of a symbolic link is disallowed

今回使用した VirtualBox 19c環境(OTN Database Virtual Box Appliance) のディレクトリ構造(※homeディレクトリが symbolic link)が原因の模様

[oracle@localhost /]$ pwd
/
[oracle@localhost /]$ ls -la
total 24
dr-xr-xr-x.   1 root   root  138 May 31 14:42 .
dr-xr-xr-x.   1 root   root  138 May 31 14:42 ..
lrwxrwxrwx.   1 root   root    7 May 31 14:30 bin -> usr/bin
:
lrwxrwxrwx.   1 root   root   13 May 31 14:42 home -> /u01/userhome ★コレ
lrwxrwxrwx.   1 root   root    7 May 31 14:30 lib -> usr/lib
:
drwxr-xr-x.   1 root   root  200 May 31 14:39 var
[oracle@localhost /]$

MOSドキュメントに似たような事象が有り、隠しパラメータ(_disable_directory_link_check)を設定して再起動します。バッドノウハウ……彡(-)(-)

DB Upgrade failed with ORA-20001 when db on ACFS (ドキュメントID 2546612.1) ※要ログイン
https://support.oracle.com/epmos/faces/DocumentDisplay?id=2546612.1

CONNECT SYS/oracle@ORCLDB

ALTER SYSTEM SET "_disable_directory_link_check" = TRUE SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;

4. 外部表のCTAS(CREATE TABLE AS SELECT)によるファイル出力(アンロード)

気を取り直して、外部表をCTASしてファイル出力(アンロード)してみます。
※COMPRESSIONによるDatapump圧縮は有償オプション機能となります。本番ではご注意下さい。

CREATE TABLE EXT_ORDER_ITEMS
ORGANIZATION EXTERNAL (
  TYPE ORACLE_DATAPUMP
  DEFAULT DIRECTORY DIR_EXTERNAL
  ACCESS PARAMETERS (
    COMPRESSION ENABLED MEDIUM
    LOGFILE DIR_EXTERNAL:'ext_order_items_ctas_%p_%a.log'
  )
  LOCATION (
      'ext_order_items_01.dmp'
  )
)
AS
SELECT * FROM ORDER_ITEMS;

Table created.

上手く行ったで! SELECTしてみると。。。

SQL> SELECT COUNT(*) FROM EXT_ORDER_ITEMS;

  COUNT(*)
----------
   4300510

SQL>

SELECT も完了や!ファイルも見てみると……

[oracle@localhost external]$ pwd
/home/oracle/work/external
[oracle@localhost external]$ ls -la ext_order_items*
-rw-r-----. 1 oracle oinstall 87388160 Nov 20 08:32 ext_order_items_01.dmp
-rw-r--r--. 1 oracle oinstall      164 Nov 20 08:33 ext_order_items_ctas_16530_000.log
[oracle@localhost external]$

しっかり出力されてるやね。彡(^)(^)

5. 作成された外部表定義を抽出(DBMS_METADATA.GET_DDL)

作成された外部表定義を DBMS_METADATA.GET_DDL で抽出してみます。

SET LONG 1000000
SET LONGC 100000;
SET LINESIZE 300;
SET PAGESIZE 1000;
SELECT DBMS_METADATA.GET_DDL('TABLE','EXT_ORDER_ITEMS','SOE') FROM DUAL;

DBMS_METADATA.GET_DDL('TABLE','EXT_ORDER_ITEMS','SOE')
------------------------------------------------------------------------

  CREATE TABLE "SOE"."EXT_ORDER_ITEMS"
   (    "ORDER_ID" NUMBER(12,0) NOT NULL ENABLE,
        "LINE_ITEM_ID" NUMBER(3,0) NOT NULL ENABLE,
        "PRODUCT_ID" NUMBER(6,0) NOT NULL ENABLE,
        "UNIT_PRICE" NUMBER(8,2),
        "QUANTITY" NUMBER(8,0),
        "DISPATCH_DATE" DATE,
        "RETURN_DATE" DATE,
        "GIFT_WRAP" VARCHAR2(20) COLLATE "USING_NLS_COMP",
        "CONDITION" VARCHAR2(20) COLLATE "USING_NLS_COMP",
        "SUPPLIER_ID" NUMBER(6,0),
        "ESTIMATED_DELIVERY" DATE
   )  DEFAULT COLLATION "USING_NLS_COMP"
   ORGANIZATION EXTERNAL
    ( TYPE ORACLE_DATAPUMP
      DEFAULT DIRECTORY "DIR_EXTERNAL"
      ACCESS PARAMETERS
      ( COMPRESSION ENABLED MEDIUM
    LOGFILE DIR_EXTERNAL:'ext_order_items_ctas_%p_%a.log'
  )
      LOCATION
       ( 'ext_order_items_01.dmp'
       )
    )
   REJECT LIMIT 0

内部構造が垣間見えるで!彡(゚)(゚)

6. 上手く行かなかったこと(PARALLELのアンロード) 11/21 追記:上手く行きました

下記コマンド、文法的には正しく通ったんやけど、ファイルが一つしか生成されんかった……彡(-)(-) 初期化パラメータの見直しで上手く行きました。

CREATE TABLE EXT_ORDER_ITEMS
ORGANIZATION EXTERNAL (
  TYPE ORACLE_DATAPUMP
  DEFAULT DIRECTORY DIR_EXTERNAL
  ACCESS PARAMETERS (
    COMPRESSION ENABLED MEDIUM
    LOGFILE DIR_EXTERNAL:'ext_order_items_ctas_%p_%a.log'
  )
  LOCATION (
      'ext_order_items_01.dmp'
    , 'ext_order_items_02.dmp'
  )
)
PARALLEL 2
AS
SELECT * FROM ORDER_ITEMS;

※11/21追記、検証に使った Database Virtual Box Appliance の初期化パラメータで parallel関連の数値が軒並み1になってました。修正して再実行で上手く行きました。

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
parallel_max_servers                 integer     1
parallel_min_degree                  string      1
parallel_min_percent                 integer     0
parallel_min_servers                 integer     1

↓

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
parallel_max_servers                 integer     24
parallel_min_degree                  string      1
parallel_min_percent                 integer     0
parallel_min_servers                 integer     4

[oracle@localhost external]$ ls -la ext_order_items*
-rw-r-----. 1 oracle oinstall 34627584 Nov 20 23:12 ext_order_items_01.dmp
-rw-r-----. 1 oracle oinstall 52772864 Nov 20 23:12 ext_order_items_02.dmp
-rw-r--r--. 1 oracle oinstall       41 Nov 20 23:12 ext_order_items_ctas_10116_000.log
-rw-r--r--. 1 oracle oinstall       41 Nov 20 23:12 ext_order_items_ctas_10118_001.log
[oracle@localhost external]$

7. まとめ

Datapumpコマンド(expdp/impdp)無しでも Datapump(アンロード) できる!
SQLだけで完結できるので、使い道は色々ありそうやで彡(^)(^)

ORACLE_LOADERアクセス・ドライバでも同様の事ができると、csvファイル出力が捗りそうなんやけどなぁ……
彡(゚)(゚)