ねら~ITエンジニア雑記

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

ADW/ATP(Autonomous DB)でObject StorageにアップロードされたCSVファイル(gzip圧縮済)を外部表(EXTERNAL TABLE)として直接参照する。(OCI, Oracle Cloud Infrastructure)

表題の通り、ADW/ATP(Autonomous DB)でObject Storageにアップロードされた
CSVファイル(gzip圧縮済)を外部表(EXTERNAL TABLE)として参照してみるやで彡(゚)(゚)

下記マニュアルを参照しています。

Using Oracle Autonomous Data Warehouse
Query External Data
https://docs.oracle.com/en/cloud/paas/autonomous-data-warehouse-cloud/user/query-external.html#GUID-72DC8BB6-5245-4262-A100-C35A2E553F70

1. サンプルのCSVファイル(gzip圧縮済み)

下記のCSVファイル(gzip圧縮済み)をサンプルとします。

$ ls -la
total 16
drwxrwxr-x.  2 opc opc 4096 Mar 10 16:16 .
drwxrwxr-x. 23 opc opc 4096 Mar 10 15:15 ..
-rw-rw-r--.  1 opc opc   47 Mar 10 16:00 sample1.csv.gz
-rw-rw-r--.  1 opc opc   44 Mar 10 16:16 sample2.csv.gz
$ zcat sample1.csv.gz
1,a
2,b
3,c

$ zcat sample2.csv.gz
4,d
5,e
6,f

2. CSVファイル(gzip圧縮済)をObject Storageにアップロード

OCI CLICSVファイル(gzip圧縮済)をObject Storageにアップロードします。
OCI CLI のセットアップ方法はこちらの記事のリンク先を参照してね彡(゚)(゚)

oci os object bulk-upload -ns namespace -bn bucket-name --src-dir ./

Uploaded sample1.csv.gz  [####################################]  100%
{
  "skipped-objects": [],
  "upload-failures": {},
  "uploaded-objects": {
    "sample1.csv.gz": {
      "etag": "f4484cbe-48a3-4533-98f8-3e7d927bbd92",
      "last-modified": "Sun, 10 Mar 2019 16:27:33 GMT",
      "opc-content-md5": "Y9kGzFq93i/9X/f+jkmo0Q=="
    },
    "sample2.csv.gz": {
      "etag": "4c92564c-bffb-4f1d-a637-a09a3cff85b8",
      "last-modified": "Sun, 10 Mar 2019 16:27:33 GMT",
      "opc-content-md5": "K0TW745KejkBs9vRuciT2A=="
    }
  }
}

3. ADW/ATPにCREDENTIALを作成

DBMS_CLOUD.CREATE_CREDENTIALプロシージャでADW/ATPにCREDENTIALを
作成します。作り方はこちらの記事やリンク先のマニュアルを参照してね彡(゚)(゚)

4. 外部表の作成(DBMS_CLOUD.CREATE_EXTERNAL_TABLEプロシージャ)

DBMS_CLOUD.CREATE_EXTERNAL_TABLEプロシージャで外部表を作成します。

BEGIN
   DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
     table_name      => 'EXT_SAMPLE_CSV_GZ',
     credential_name => 'OCI_CLI_AYS_ATP',
     file_uri_list   => 'https://swiftobjectstorage.region.oraclecloud.com/v1/namespace/bucket-name/sample*.csv.gz',
     format          => '{ "type" : "CSV" , "compression" : "gzip" }' ,
     column_list     => 'ITEM_ID   NUMBER, ' ||
                        'ITEM_NAME VARCHAR2(30)'
   );
END;
/

それぞれのパラメータの意味は下記の通りです。

  • table_name:外部表名を指定しています。
  • credential_name:上記3. で作成したCREDENTAILを指定しています。
  • file_url_list:Object Storage上のファイルURLをワイルドカード(*)で指定しています。URL形式の詳細は "こちら"
  • format:幾つか指定方法がありますが、本ケースではJSON形式でtype属性(CSV)とcompression属性(gzip)を指定しています。詳細は "こちら"
  • column_list:カラム定義を外部表(EXTERNAL TABLE)形式で指定します。

下記マニュアルも参照やで彡(゚)(゚)

A Packages DBMS_CLOUD and DBMS_CLOUD_ADMIN
CREATE_EXTERNAL_TABLE Procedure
https://docs.oracle.com/en/cloud/paas/autonomous-data-warehouse-cloud/user/dbmscloud-reference.html#GUID-2AFBEFA4-992E-4F53-96DB-F560084C7DA9

5. 作成した外部表の参照

上記4. で作成した外部表を参照してみます。

SELECT * FROM EXT_SAMPLE_CSV_GZ;

   ITEM_ID ITEM_NAME
---------- ------------------------------
         1 a
         2 b
         3 c
         4 d
         5 e
         6 f

6 rows selected.

Object Storage にアップロードしたCSVファイル(gzip圧縮済)のファイルを参照できたやで!彡(^)(^)

6. まとめ

ADW/ATPはObject Storage にアップロードしたファイルを直接参照できる!

という事は、Object StorageをData Lakeとしてデータを貯めこみながら参照しつつ、
使用頻度が高いデータはAutonomous DB(ADW/ATP)上にロード&加工して
Data Warehouse, Data Mart的に使えるということ彡(゚)(゚)

f:id:gonsuke777:20190311021233j:plain

皆さん、どんどん活用してね彡(^)(^)

Autonomous DB(ADW/ATP) に Java の JDBC Thin Driver で接続してみる。(OCI, Oracle Cloud Infrastructure)

表題の通り、Autonomous DB(ADW/ATP) に JavaJDBC Thin Driver で
接続してみます。下記の構成で試すやで彡(゚)(゚)

Compute(Java, JDBC Thin Driver) ⇒ Autonomous DB(ADW/ATP)

前回の記事の続きになります。

OCI Database(DBaaS) の PDBJavaJDBC Thin Driver で
接続してみる。(Oracle Cloud Infrastructure)
https://gonsuke777.hatenablog.com/entry/2019/02/21/014614

1. Autonomous DB(ADW/ATP) とは?

Autonomous DB は ORACLE が提供する Full Managed なデータベースの Cloud Service です。

DWH向きの ADW(Autonomous Data Warehouse) と
OLTP向きの ATP(Autonomous Transaction Processing) が有るんやで彡(゚)(゚)

Autonomous Data Warehouse
https://docs.oracle.com/cd/E83857_01/paas/autonomous-data-warehouse-cloud/

Autonomous Transaction Processing
https://docs.oracle.com/cd/E83857_01/paas/atp-cloud/

2. Autonomous DB(ADW/ATP) に接続する時のポイント(※ウォレットが必須)

通常のOracle Databaseへの接続 と Autonomous DB(ADW/ATP)への接続 の違いとして、
ウォレットによる暗号化通信が必須である点が挙げられます。

Autonomous Data Warehouse Instanceへの接続について
https://docs.oracle.com/cd/E83857_01/paas/autonomous-data-warehouse-cloud/user/connect-intorduction.html#GUID-CD4C10A6-1C1E-4969-8F67-1433B6CE626A

Autonomous Transaction Processing Instanceへの接続について
https://docs.oracle.com/cd/E83857_01/paas/atp-cloud/atpug/connect-intorduction.html#GUID-CD4C10A6-1C1E-4969-8F67-1433B6CE626A

sqlplus や SQL Developer での接続については下記マニュアルを参照彡(゚)(゚)

Oracle SQL Developer (18.2)以上で接続
https://docs.oracle.com/cd/E83857_01/paas/autonomous-data-warehouse-cloud/user/connect-sql-dev182.html#GUID-14217939-3E8F-4782-BFF2-021199A908FD

Connect with SQL*Plus
https://docs.oracle.com/cd/E83857_01/paas/autonomous-data-warehouse-cloud/user/connect-sqlplus.html#GUID-A3005A6E-9ECF-40CB-8EFC-D1CFF664EC5A

何かしらの手段でウォレットを指定する事が、ADW/ATP接続の必須事項となります。
本記事では JDBC Thin driver + TNS_ADMIN による接続を幾つか試してみますやで彡(゚)(゚)

3. ウォレット、JDBC Driver Full版 のダウンロードと展開

手順は幾つか有りますが、下記マニュアルの「Plain JDBC using Oracle Wallets」を実行します。

Java Connectivity with Autonomous Database (ATP or ADW) using 18.3 JDBC
https://www.oracle.com/technetwork/database/application-development/jdbc/documentation/atp-5073445.html

ウォレットのダウンロードと展開は下記が参考になります。

自律型データベース(Autonomous Transaction Processing)に Golang を使って接続
https://qiita.com/sugimount/items/69e11c116a895c9feb97

# Autonomous DB の Wallet を展開
unzip Wallet_xxxxxx.zip

JDBC Driver の最新版(18.3)は現時点(2019/2/26)で下記ですが、最新版を参照して下さい。

Oracle Database 18c (18.3) JDBC Driver & UCP Downloads
https://www.oracle.com/technetwork/database/application-development/jdbc/downloads/jdbc-ucp-183-5013470.html

ojdbc8-full.tar.gz をダウンロードして、Compute上に展開(tar xvzf ~)します。

# JDBC Driver Full版を展開
tar xvzf ojdbc8-full.tar.gz

ウォレットは/home/opc/app/opc/product/18.0.0/client_1/network/adminに、
JDBC Driver は/home/opc/work/ojdbc8-full にそれぞれ展開したものとします。

# Wallet(TNS_ADMIN)
ls -la /home/opc/app/opc/product/18.0.0/client_1/network/admin

total 76
drwxr-xr-x.  3 opc opc  4096 Feb 25 16:26 .
drwxr-xr-x. 10 opc opc  4096 Jan 17 06:46 ..
-rw-rw-r--.  1 opc opc  6661 Feb 25 15:01 cwallet.sso
-rw-rw-r--.  1 opc opc  6616 Feb 25 15:01 ewallet.p12
-rw-rw-r--.  1 opc opc  3242 Feb 25 15:01 keystore.jks
-rw-rw-r--.  1 opc opc    87 Feb 25 15:01 ojdbc.properties
drwxr-xr-x.  2 opc opc  4096 Jan 17 06:44 samples
-rw-r--r--.  1 opc opc  1441 Aug 26  2015 shrept.lst
-rw-rw-r--.  1 opc opc   114 Feb 25 15:01 sqlnet.ora
-rw-rw-r--.  1 opc opc   155 Feb  4 11:23 sqlnet.ora.bak
-rw-rw-r--.  1 opc opc  2771 Feb 25 15:01 tnsnames.ora
-rw-rw-r--.  1 opc opc  3336 Feb 25 15:01 truststore.jks
-rw-rw-r--.  1 opc opc 19823 Feb 25 15:01 Wallet_xxxxxx.zip

# JDBC Driver full
ls -la /home/opc/work/ojdbc8-full

total 8328
drwx------.  2 opc opc    4096 Aug 20  2018 .
drwxrwxr-x. 22 opc opc    4096 Feb 25 15:33 ..
-r--r--r--.  1 opc opc 4161744 Aug  2  2018 ojdbc8.jar
-r-xr-xr-x.  1 opc opc   11596 Aug  2  2018 ojdbc.policy
-r--r--r--.  1 opc opc  144428 Aug  2  2018 ons.jar
-r--r--r--.  1 opc opc  307817 Aug  2  2018 oraclepki.jar
-r--r--r--.  1 opc opc 1661545 Aug  2  2018 orai18n.jar
-r--r--r--.  1 opc opc  205152 Aug  2  2018 osdt_cert.jar
-r--r--r--.  1 opc opc  306854 Aug  2  2018 osdt_core.jar
-rw-r--r--.  1 opc opc    2595 Aug 20  2018 README.txt
-r--r--r--.  1 opc opc   29103 Aug  2  2018 simplefan.jar
-r--r--r--.  1 opc opc 1398331 Aug  2  2018 ucp.jar
-r--r--r--.  1 opc opc  262415 Aug  2  2018 xdb6.jar

4. 方法1:ウォレットのパス(TNS_ADMIN) を JDBC URL に記述

JDBC 18.3 では ウォレットのパスを TNS_ADMIN として
JDBC URL に記述できるようになっています。

URLに指定されています。 次に例を示します。
https://docs.oracle.com/cd/E83857_01/paas/atp-cloud/atpug/connect-jdbc-thin-wallet.html#GUID-F1D7452F-5E67-4418-B16B-B6A7B92F26A4
final static String DB_URL="jdbc:oracle:thin:@atpconnection_low?TNS_ADMIN=.";

この書き方の場合、接続文字列はtnsnames.oraの記述子を使用します。サンプルは下記

import java.sql.*;

public class GetContainerName {
    public static void main(String[] args) {
        final String path = "jdbc:oracle:thin:@xxxxxx_high?TNS_ADMIN=/home/opc/app/opc/product/18.0.0/client_1/network/admin";
        final String id = "ADMIN";  //ID
        final String pw = "xxxxxxxxxxxxx";  //password

        try (
            Connection conn = DriverManager.getConnection(path, id, pw);
            Statement  stmt = conn.createStatement();
            ResultSet  rs   = stmt.executeQuery("SELECT NAME FROM V$CONTAINERS");
        ) {
            while (rs.next()) {
                String cn = rs.getString("name");
                System.out.println("Container Name => " + cn);
            }
        } catch(SQLException ex) {
            ex.printStackTrace();  //Error
        }
    }
}

コンパイルと実行は下記。マニュアルの記述の通り oraclepki.jar,
osdt_core.jar, osdt_cert.jarを classpath に含めておくんやで彡(゚)(゚)

export JAVA_HOME=/home/opc/work/jdk-11.0.2
export PATH=${JAVA_HOME}/bin:${PATH}

javac GetContainerName.java

java -classpath /home/opc/work/ojdbc8-full/ojdbc8.jar:\
/home/opc/work/ojdbc8-full/ucp.jar:\
/home/opc/work/ojdbc8-full/oraclepki.jar:\
/home/opc/work/ojdbc8-full/osdt_core.jar:\
/home/opc/work/ojdbc8-full/osdt_cert.jar:. \
GetContainerName

Container Name => VRWV9351YZ4NXNS_XXXXXX

成功(`・ω・)Ъ

5. 方法2:ウォレットのパス(TNS_ADMIN) を 環境変数に指定

ウォレットのパスをTNS_ADMIN環境変数に指定します。
この場合は JDBC URL に TNS_ADMIN の記述は不要で、ソースは下記彡(゚)(゚)

import java.sql.*;

public class GetContainerName {
    public static void main(String[] args) {
        final String path = "jdbc:oracle:thin:@xxxxxx_high";
        final String id = "ADMIN";  //ID
        final String pw = "xxxxxxxxxxxxx";  //password

        try (
            Connection conn = DriverManager.getConnection(path, id, pw);
            Statement  stmt = conn.createStatement();
            ResultSet  rs   = stmt.executeQuery("SELECT NAME FROM V$CONTAINERS");
        ) {
            while (rs.next()) {
                String cn = rs.getString("name");
                System.out.println("Container Name => " + cn);
            }
        } catch(SQLException ex) {
            ex.printStackTrace();  //Error
        }
    }
}

コンパイルと実行結果は以下の通りです。

export JAVA_HOME=/home/opc/work/jdk-11.0.2
export PATH=${JAVA_HOME}/bin:${PATH}

javac GetContainerName.java

export TNS_ADMIN=/home/opc/app/opc/product/18.0.0/client_1/network/admin

java -classpath /home/opc/work/ojdbc8-full/ojdbc8.jar:\
/home/opc/work/ojdbc8-full/ucp.jar:\
/home/opc/work/ojdbc8-full/oraclepki.jar:\
/home/opc/work/ojdbc8-full/osdt_core.jar:\
/home/opc/work/ojdbc8-full/osdt_cert.jar:. \
GetContainerName

Container Name => VRWV9351YZ4NXNS_XXXXXX

再び成功(`・ω・)Ъ

6. 方法3:ウォレットのパス(TNS_ADMIN) を -D でシステム・プロパティとして指定

ウォレットのパスをシステム・プロパティoracle.net.tns_admin として
-Dオプションで指定します。javaソースは上記 5. と同じなので省略。

実行コマンドは下記となります。

export JAVA_HOME=/home/opc/work/jdk-11.0.2
export PATH=${JAVA_HOME}/bin:${PATH}

javac GetContainerName.java

unset TNS_ADMIN

java -classpath /home/opc/work/ojdbc8-full/ojdbc8.jar:\
/home/opc/work/ojdbc8-full/ucp.jar:\
/home/opc/work/ojdbc8-full/oraclepki.jar:\
/home/opc/work/ojdbc8-full/osdt_core.jar:\
/home/opc/work/ojdbc8-full/osdt_cert.jar:. \
-Doracle.net.tns_admin=/home/opc/app/opc/product/18.0.0/client_1/network/admin \
GetContainerName

Container Name => VRWV9351YZ4NXNS_XXXXXX

三たび成功(`・ω・)Ъ

7. まとめ

oraclepki.jar, osdt_core.jar, osdt_cert.jar の classpath指定で
くっそハマった……まずはマニュアルの通りにやるのが、王道ですやね彡(-)(-)

OCI Database(DBaaS) の PDB に Java の JDBC Thin Driver で接続してみる。(Oracle Cloud Infrastructure)

表題の通り、OCI(Oracle Cloud Infrastructure) Database(DBaaS) の PDB
JavaJDBC Thin Driver で接続してみます。下記の構成で試すやで彡(゚)(゚)

Compute(Java, JDBC Thin Driver) ⇒ (Private Subnet) ⇒ DBaaS(PDB)

前回の記事の続きになります。

OCI Database(DBaaS) の PDB に sqlplus で接続してみる。(Oracle Cloud Infrastructure)
https://gonsuke777.hatenablog.com/entry/2019/02/19/211953

1. 接続先情報の確認

以下のPDBに接続します。

ホスト名(Private):dbname.subnetname.vcnname.oraclevcn.com
ポート番号    :1521
PDBサービス名  :ayspdb2.subnetname.vcnname.oraclevcn.com
JDBC URL(thin) :jdbc:oracle:thin:@//dbname.subnetname.vcnname.oraclevcn.com:1521/ayspdb2.subnetname.vcnname.oraclevcn.com

2. Javaソースコード

PDBに接続してV$CONTAINERSビューからPDB名を取得してます。
接続文字列は前回同様の簡易接続(ホスト名:ポート番号/サービス名)やで彡(゚)(゚)

import java.sql.*;

public class GetContainerName {
    public static void main(String[] args) {
        final String path = "jdbc:oracle:thin:@//" +
                            "dbname.subnetname.vcnname.oraclevcn.com:" + //hostname
                            "1521/" + //port
                            "ayspdb2.subnetname.vcnname.oraclevcn.com"; //PDB Service
        final String id = "xxxxxxxx";  //ID
        final String pw = "yyyyyyyy";  //password
        
        try (
            Connection conn = DriverManager.getConnection(path, id, pw);
            Statement  stmt = conn.createStatement();
            ResultSet  rs   = stmt.executeQuery("SELECT NAME FROM V$CONTAINERS");
        ) {
            while (rs.next()) {
                String cn = rs.getString("name");
                System.out.println("Container Name => " + cn);
            }
        } catch(SQLException ex) {
            ex.printStackTrace();  //Error
        }
    }
}

3. コンパイルと実行

いつもの生コンパイルなスタイル彡(゚)(゚)

export JAVA_HOME=/home/opc/work/jdk1.8.0_191
export ORACLE_HOME=/home/opc/app/opc/product/18.0.0/client_1
export PATH=${JAVA_HOME}/bin:${PATH}

javac GetContainerName.java
java -classpath .:${ORACLE_HOME}/jdbc/lib/ojdbc8.jar GetContainerName

Container Name => AYSPDB2 ★←PDB名

PDB名が出力されてるで!彡(^)(^)

4. まとめ

PDBのサービス名さえ分かっていれば、至ってフツー彡(゚)(゚)
次回は Autonomous DB(ADW/ATP) の接続を書いてみるやで。

OCI Database(DBaaS) の PDB に sqlplus で接続してみる。(Oracle Cloud Infrastructure)

表題の通り、OCI(Oracle Cloud Infrastructure) Database(DBaaS) の PDB
sqlplus で接続してみます。下記の構成で試すやで彡(゚)(゚)

Compute(Oracle Client, sqlplus) ⇒ (Private Subnet) ⇒ DBaaS(PDB)

1. PDB, MTA(Multitenant Architecuture) とは?

PDB, MTA(multitenant architecture) は Oracle Database 12cR1以降の機能で、
一つの管理用DB(CDB)上に複数のコンテナ・データベース(PDB)を作成できる機能なんやで彡(゚)(゚)

詳細やメリットはマニュアルや公開資料を参照してね。

Oracle Database 12c マルチテナント・アーキテクチャとプラガブル・データベース
https://www.oracle.com/technetwork/jp/ondemand/branch/dosanko-3rd-mta-2844750-ja.pdf

Oracle Databaseデータベース概要, 18c
マルチテナント・アーキテクチャ
https://docs.oracle.com/cd/E96517_01/cncpt/introduction-to-oracle-database.html#GUID-ED16D715-761B-4F8B-8503-BC058E216D2F

2. OCI Database(DBaaS)の作成

ここはマニュアルや他の方のブログを見ませう彡(゚)(゚)

クラウドOracle Databaseを使う - Oracle Cloud Infrastructureを使ってみよう(その7)
https://community.oracle.com/docs/DOC-1019568

データベース・デプロイメントの作成
https://docs.oracle.com/cd/E83857_01/paas/database-dbaas-cloud/csdbi/create-db-deployment-overview.html

3. DBaaSのIPアドレス/管理サービス(CDB)名の参照とポート開放

ここは下記ブログを参照やで彡(゚)(゚)

[Oracle Cloud] SQL DeveloperでDBaaSに接続してみた
http://itedge.stars.ne.jp/oracle-cloud-dbaas_sql-developer/

OCIコンソールの下記から簡易接続(ホスト名:ポート番号/サービス名)の接続文字列として確認可能です。

f:id:gonsuke777:20190219210718j:plain
OCIコンソール

下記のホスト名/ポート番号/管理サービスに接続するものとします。
※これらのホスト名/管理サービス(CDB)名は架空のものです。

ホスト名(Private) :dbname.subnetname.vcnname.oraclevcn.com
ポート番号     :1521
管理サービス(CDB)名:dbname_cdb32r.subnetname.vcnname.oraclevcn.com
管理サービス(CDB)への接続文字列(簡易接続):dbname.subnetname.vcnname.oraclevcn.com:1521/dbname_cdb32r.subnetname.vcnname.oraclevcn.com

4. 管理サービス(CDB)への接続確認とPDB名(PDBサービス名)確認

Compute への Oracle Client のインストールは下記記事を参照彡(゚)(゚)

Oracle Cloud(OCI)のIaaSからDbaaSへSQLPlusで接続してみた
https://qiita.com/feifo/items/d21b7050d0d4799f5d47

Compute にインストールした Oracle Client の sqlplus から管理サービス(CDB)にSYSで接続してみます。
なおこの後は特に断りが無い限り、接続文字列は簡易接続(ホスト名:ポート番号/サービス名)です。

8.1 簡易接続ネーミング・メソッドの理解
https://docs.oracle.com/cd/E96517_01/netag/configuring-naming-methods.html#GUID-B0437826-43C1-49EC-A94D-B650B6A4A6EE

export ORACLE_HOME=/home/opc/app/opc/product/18.0.0/client_1
export LD_LIBRARY_PATH=${ORACLE_HOME}/lib
export TNS_ADMIN=${ORACLE_HOME}/network/admin
export PATH=${ORACLE_HOME}/bin:${PATH}

sqlplus /nolog
CONNECT SYS/xxxxxxxxxxxxxxx@dbname.subnetname.vcnname.oraclevcn.com:1521/dbname_cdb32r.subnetname.vcnname.oraclevcn.com AS SYSDBA
SHOW CON_NAME
SHOW PDBS

結果は以下の通り。CDB(CDB$ROOT)に接続できてるやね彡(゚)(゚)

SQL> CONNECT SYS…
Connected.

SQL> SHOW CON_NAME

CON_NAME
------------------------------
CDB$ROOT

SQL> SHOW PDBS

    CON_ID CON_NAME   OPEN MODE  RESTRICTED
---------- ---------- ---------- ----------
         2 PDB$SEED   READ ONLY  NO
         3 AYSPDB2    READ WRITE NO ★これに接続する。
SQL>

上記のPDB名と管理サービス(CDB)名より、PDBサービス名は下記の通りとなります。

■管理サービス(CDB)名
dbname_cdb32r.subnetname.vcnname.oraclevcn.com
^^^^^^^^^^^^^

PDBサービス名
ayspdb2.subnetname.vcnname.oraclevcn.com

なお DBaaS の OS にログイン可能な場合は、DBaaS OS の opcユーザーで接続して、
gridユーザーにsu後に lsnrctl statusコマンドを実行すれば、より確実にPDBサービス名を確認できます。

# DBaaS の OS に opcユーザーで接続
sudo su - grid
lsnrctl status

LSNRCTL for Linux: Version 18.0.0.0.0 - Production on 19-FEB-2019 11:20:38

Copyright (c) 1991, 2017, Oracle.  All rights reserved.
:
Services Summary...
:
Service "dbname_cdb32r.subnetname.vcnname.oraclevcn.com" has 1 instance(s).
  Instance "dbname", status READY, has 2 handler(s) for this service...
Service "ayspdb2.subnetname.vcnname.oraclevcn.com" has 1 instance(s). ★このPDBサービスに接続する。
  Instance "dbname", status READY, has 2 handler(s) for this service...
:
The command completed successfully

5. PDBにSYSで接続してユーザー作成&権限付与

上記で確認したPDBサービスにSYSで接続して、PDBに一般ユーザーを作成&権限付与します。

sqlplus /nolog
CONNECT SYS/xxxxxxxxxxxxxxx@dbname.subnetname.vcnname.oraclevcn.com:1521/ayspdb2.subnetname.vcnname.oraclevcn.com AS SYSDBA
                                                                         ^^^^^^^ここが違う
SHOW CON_NAME
CREATE USER AYSHIBAT IDENTIFIED BY xxxxxxxxxxxxxxx
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;
GRANT DBA TO AYSHIBAT;

結果は下記の通りです。

$ sqlplus /nolog

SQL*Plus: Release 18.0.0.0.0 - Production on Tue Feb 19 11:43:26 2019
Version 18.5.0.0.0

Copyright (c) 1982, 2018, Oracle.  All rights reserved.

SQL> CONNECT SYS/xxxxxxxxxxxxxxx@dbname.subnetname.vcnname.oraclevcn.com:1521/ayspdb2.subnetname.vcnname.oraclevcn.com AS SYSDBA
Connected.
SQL> SHOW CON_NAME

CON_NAME
------------------------------
AYSPDB2
SQL> CREATE USER AYSHIBAT IDENTIFIED BY xxxxxxxxxxxxxxx
  2  DEFAULT TABLESPACE USERS
  3  TEMPORARY TABLESPACE TEMP;

User created.

SQL> GRANT DBA TO AYSHIBAT;

Grant succeeded.

6. PDBに作成した一般ユーザーで接続

PDBに作成した一般ユーザーで接続してみます。

sqlplus /nolog
CONNECT AYSHIBAT/xxxxxxxxxxxxxxx@dbname.subnetname.vcnname.oraclevcn.com:1521/ayspdb2.subnetname.vcnname.oraclevcn.com
SHOW CON_NAME

結果は下記の通りです。

sqlplus /nolog

SQL*Plus: Release 18.0.0.0.0 - Production on Tue Feb 19 11:47:58 2019
Version 18.5.0.0.0

Copyright (c) 1982, 2018, Oracle.  All rights reserved.

SQL> CONNECT AYSHIBAT/xxxxxxxxxxxxxxx@dbname.subnetname.vcnname.oraclevcn.com:1521/ayspdb2.subnetname.vcnname.oraclevcn.com
Connected.
SQL> SHOW CON_NAME

CON_NAME
------------------------------
AYSPDB2

DBaaS の PDB に一般ユーザーで接続できたやで!彡(^)(^)

7. まとめ

上記 4. の PDB名(PDBサービス名)確認がひと手間ですやね!彡(゚)(゚)

管理サービス(CDB)名への接続文字列はコンソール画面に表示できてるんやから、
PDBへの接続文字列も同様にコンソール画面に表示して欲しいもんです(゚ε゚`)

なおこの記事は 生Java(JDBC Thin) to DBaaS接続編、
Java(JDBC Thin) to Autonomous(ADW/ATP)接続編に続く予定……彡(゚)(゚)

ADW(Autonomous Data Warehouse) に OCI の Object Storage にアップロードした dmp を インポート(impdp)してみる。

ADW(Autonomous Data Warehouse) は ORACLE が提供する
Full Managed なデータベースの Cloud Service なんやで彡(゚)(゚)

Autonomous Data Warehouse
https://docs.oracle.com/en/cloud/paas/autonomous-data-warehouse-cloud/

今回はこの ADW に OCI(Oracle Cloud Infrastructure) の Object Storage に
アップロードした dmp をインポート(impdp)してみます。

1. データのエクスポート(expdp)

まずはデータをエクスポート(expdp)します。オプションは下記参照彡(゚)(゚)

Export Your Existing Oracle Database to Import into Autonomous Data Warehouse
https://docs.oracle.com/en/cloud/paas/autonomous-data-warehouse-cloud/user/load-data.html#GUID-7068E963-C464-4ABB-AC60-BA56DFC98650

実際に流したコマンドは下記です。index は exclude してません。
Object Storage に置けるファイルは 1ファイルあたり5GB までという制限があるので、
FILESIZEパラメータでdmpファイルのサイズを制限します。

expdp xxxxxxxx/yyyyyyyy@zzzzzzzz \
exclude=cluster,indextype,materialized_view,materialized_view_log,materialized_zonemap,db_link \
data_options=group_partition_table_data \
parallel=4 \
schemas=soe \
directory=DATA_PUMP_DIR \
LOGFILE=exp_soe.log \
DUMPFILE=exp_soe%U.dmp \
FILESIZE=4900MB \
REUSE_DUMPFILES=YES \
VERSION=12.2.0

expdpの実行結果は下記の通りです。

Export: Release 18.0.0.0.0 - Production on Mon Jan 21 16:25:09 2019
Version 18.2.0.0.0

Copyright (c) 1982, 2018, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Starting "PDBADMIN"."SYS_EXPORT_SCHEMA_01":  PDBADMIN/********@10.0.2.3:1521/ayspdb2.sub12070931432.vcnayshibat.oraclevcn.com exclude=cluster,indextype,materialized_view,materialized_view_log,materialized_zonemap,db_link data_options=group_partition_table_data parallel=4 schemas=soe directory=DATA_PUMP_DIR LOGFILE=exp_soe.log DUMPFILE=exp_soe%U.dmp FILESIZE=4900MB REUSE_DUMPFILES=YES VERSION=12.2.0
Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_BODY
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/FUNCTIONAL_INDEX/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
:
:
  /u01/app/oracle/product/18.2/dbhome_1/rdbms/log/7C6D751E07A94BB2E0530302000AFD1F/exp_soe01.dmp
  /u01/app/oracle/product/18.2/dbhome_1/rdbms/log/7C6D751E07A94BB2E0530302000AFD1F/exp_soe02.dmp
  /u01/app/oracle/product/18.2/dbhome_1/rdbms/log/7C6D751E07A94BB2E0530302000AFD1F/exp_soe03.dmp
  /u01/app/oracle/product/18.2/dbhome_1/rdbms/log/7C6D751E07A94BB2E0530302000AFD1F/exp_soe04.dmp
Job "xxxxxxxx"."SYS_EXPORT_SCHEMA_01" successfully completed at Mon Jan 21 16:27:24 2019 elapsed 0 00:02:13

2. dmpファイルの Object Storage へのアップロード

dmpファイルを Object Storage にアップロードします。ブラウザ画面から
アップロードすることも可能なんですが、今回は OCI CLI
コマンド(oci os object bulk-upload ...)で Object Storage にアップロードしてしまいました。

oci os object bulk-upload -ns xxxxxxxx -bn yyyyyyyy-objs001 --src-dir /u01/app/oracle/product/18.2/dbhome_1/rdbms/log/7C6D751E07A94BB2E0530302000AFD1F/
Uploaded exp_soe02.dmp  [####################################]  100%
{
  "skipped-objects": [],
  "upload-failures": {},
  "uploaded-objects": {
    "exp_soe01.dmp": {
      "etag": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "last-modified": "Mon, 21 Jan 2019 16:35:00 GMT",
      "opc-multipart-md5": "yyyyyyyyyyyyyyyyyyyyyyyyyyy"
:
}

成功するとアップロードされたファイルの情報がJSON形式で返ってきます。

OCI CLIのセットアップ方法は下記のブログ群が参考になります。

コマンドライン(CLI)でOCIを操作する - Oracle Cloud Infrastructureアドバンスド
https://community.oracle.com/docs/DOC-1019624#jive_content_id_3_CLI

Oracle Cloud Infrastructure CLIの導入 (後編:環境設定)
https://cloudii.atomitech.jp/entry/2018/08/01/104038

[Oracle Cloud] OCI DatabaseにCLIを設定してみた
http://itedge.stars.ne.jp/http-itedge-stars-ne-jp-oracle-cloud-oci-database-cli/

3. Object Storage にアップロードしたdmpファイルの Pre-authenticated URL生成

※(追記)2019年8月現在では Object Storage の Native な URL で impdp できるようになったため、本手順によるPRA-URLの生成は不要です。

下記ドキュメント(※要アカウント)の記載の通り、Object Storage に
アップロードした dmpファイル の Pre-authenticated URL を生成します。

ATP : Import to ATP From Object Store Fails with
'ORA-17500: ODM Err:ODM HTTP Unauthorized' (ドキュメントID 2446550.1)
https://support.oracle.com/epmos/faces/DocumentDisplay?id=2446550.1

これもブラウザ画面から生成可能なんですが、今回は OCI CLI
コマンド(oci os preauth-request create ...)で生成してしまいました。

oci os preauth-request create -ns xxxxxxxx -bn yyyyyyyy-objs001 --access-type ObjectRead --name prauth_exp_soe01 --time-expires 2099-12-31 -on exp_soe01.dmp
oci os preauth-request create -ns xxxxxxxx -bn yyyyyyyy-objs001 --access-type ObjectRead --name prauth_exp_soe02 --time-expires 2099-12-31 -on exp_soe02.dmp
oci os preauth-request create -ns xxxxxxxx -bn yyyyyyyy-objs001 --access-type ObjectRead --name prauth_exp_soe03 --time-expires 2099-12-31 -on exp_soe03.dmp
oci os preauth-request create -ns xxxxxxxx -bn yyyyyyyy-objs001 --access-type ObjectRead --name prauth_exp_soe04 --time-expires 2099-12-31 -on exp_soe04.dmp

下記が実行ログです。成功すると生成された Pre-authenticated URL が
JSON形式で出力されます。後からは参照不可なので、テキストファイル等に保全しておきます。

oci os preauth-request create -ns xxxxxxxx -bn yyyyyyyy-objs001 --access-type ObjectRead --name prauth_exp_soe01 --time-expires 2099-12-31 -on exp_soe01.dmp
{
  "data": {
    "access-type": "ObjectRead",
    "access-uri": "/p/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/n/xxxxxxx/b/yyyyyyyy-objs001/o/exp_soe01.dmp",
    "id": "...exp_soe01.dmp",
    "name": "prauth_exp_soe01",
    "object-name": "exp_soe01.dmp",
    "time-created": "2019-01-21T16:38:20.118000+00:00",
    "time-expires": "2099-12-31T00:00:00+00:00"
  }
}
:
}

4. OCIユーザーの作成とGROUP設定、Auth Token生成

Menu => Identity => Users => Create User で OCIユーザーを作成します。

f:id:gonsuke777:20190122160735j:plain
ユーザー作成

作成したOCIユーザーをクリック => Groups で Administrator を付与します。

f:id:gonsuke777:20190122160847j:plain
グループ設定

作成したOCIユーザーをクリック => Auth Tokens で Auth Token を生成します。
後から参照する事はできないので、テキストファイル等に保全しておきます。

f:id:gonsuke777:20190122160914j:plain
Auth Token生成

5. DBMS_CLOUDパッケージで ADW に Credential を作成

下記マニュアルの手順を元に ADW に Credantial を作成します。

Import Data Using Oracle Data Pump Version 18.3 or Later
https://docs.oracle.com/en/cloud/paas/autonomous-data-warehouse-cloud/user/load-data.html#GUID-297FE3E6-A823-4F98-AD50-959ED96E6969

ADW に接続して DBMS_CLOUD.CREATE_CREDENTIALプロシージャを実行します。

credential_name には任意の文字列、username には上記 4. で作成したOCIユーザー名、
passwordには上記 4. で生成した Auth Token をセットします。

CONNECT ADMIN/xxxxxxxxxxxxx@yyyyyy_high

BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'OCI_CLI_AYS_ADW', -- 任意の文字列
    username => 'aysapi',                 -- OCIユーザー名
    password => 'xxxxxxxxxxxxxxxxxxxx'    -- 生成したAuth Token
  );
END;
/

PL/SQL procedure successfully completed.

6. インポート(impdp)の実行

impdpを実行してADWにデータをロードします。dumpfileパラメータには
3. で生成した Pre-authenticated URL を ,(カンマ)区切りで指定します。

impdp ADMIN/xxxxxxxxxxxxx@yyyyyy_high \
  credential=OCI_CLI_AYS_ADW \
  directory=data_pump_dir \
  dumpfile=https://objectstorage.us-ashburn-1.oraclecloud.com/p/zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz/n/xxxxxxxx/b/yyyyyyyy-objs001/o/exp_soe01.dmp,\
  https://objectstorage.us-ashburn-1.oraclecloud.com/p/zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz/n/xxxxxxxx/b/yyyyyyyy-objs001/o/exp_soe02.dmp,\
  https://objectstorage.us-ashburn-1.oraclecloud.com/p/zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz/n/xxxxxxxx/b/yyyyyyyy-objs001/o/exp_soe03.dmp,\
  https://objectstorage.us-ashburn-1.oraclecloud.com/p/zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz/n/xxxxxxxx/b/yyyyyyyy-objs001/o/exp_soe04.dmp \
  parallel=2 \
  partition_options=merge \
  transform=segment_attributes:n \
  exclude=cluster, indextype, materialized_view, materialized_view_log, materialized_zonemap, db_link \
  logfile=impdp_schema_SOE.log

impdpの実行結果は以下の通りです。

Import: Release 18.0.0.0.0 - Production on Tue Jan 22 06:24:47 2019
Version 18.3.0.0.0

Copyright (c) 1982, 2018, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 18c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Master table "ADMIN"."SYS_IMPORT_FULL_03" successfully loaded/unloaded
:
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
:
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "SOE"."ORDERS"                              1.289 GB 14298586 rows
. . imported "SOE"."ORDER_ITEMS"                         2.236 GB 42511747 rows
:

Job "ADMIN"."SYS_IMPORT_FULL_03" completed with 1 error(s) at Tue Jan 22 06:42:27 2019 elapsed 0 00:17:25

データを確認してみると。。。

sqlplus /nolog
connect SOE/yyyyyyyy@xxxxxx_high

SELECT COUNT(*) FROM ORDERS;

  COUNT(*)
----------
  14298586

データがセットされてるで!彡(^)(^)

7. まとめ

上記3. の Pre-authenticated URL生成 がハマりポイントかも。つかワイはハマった彡(-)(-)
※(追記)2019年8月現在では Object Storage の Native な URL で impdp できるようになったため、PRA-URLの生成は不要です。
だがコレでexpdp/impdpでデータ移行して、ADWをバリバリ(死語)使うんや!彡(゚)(゚)

まとめ:Oracle Database or GoldenGate Advent Calendar 2018 を振り返る!【Day 25】

このエントリは Oracle Database or GoldenGate Advent Calendar 2018 の Day 25 の
記事となります。最後も一日遅れてしまいました。本当にスミマセン……:(;゙゚'ω゚'):

Oracle Database or GoldenGate Advent Calendar 2018
https://adventar.org/calendars/3525

執筆して頂いた皆さん、ありがとうございました!彡(^)(^)
最終日は各記事を振り返りつつ、一言コメントをしていきますやで。彡(゚)(゚)

Day 1. SQL性能計測1

Oracle DatabaseでSQLの性能計測1(SET AUTOTRACE TRACEONLY と SET TIMING ON編)
https://gonsuke777.hatenablog.com/entry/2018/12/01/210651

Day 1 はワイのSET AUTOTRACE TRACEONLY と SET TIMING ON による SQL性能計測記事や!

記事にも書いてますが、SET TIMING と AUTOTRACE は sqlplus だけで
操作が完結するんで、SQLチューニングで超高速PDCAを廻してる
タイミングでは重宝するんやで彡(゚)(゚)

Day 2. Data Guard 奮闘記

Data Guard 奮闘記
[Oracle Database or GoldenGate Advent Calendar 2018] Oracle on Hyper-V 2018
http://charade.seesaa.net/article/462984231.html

Day 2 は charade_oo4oさん の Data Guard記事となります。12cR2(12.2) の Data Gurad の
主に PDB にフォーカスして、便利な使い方やハマりポイントを解説してくれています。
PDBフラッシュバック中は REDO適用 が止まるの、知らんかったやで…彡(-)(-)

Day 3. MOSナレッジをWeb検索

[Oracle] My Oracle Supportのナレッジ記事がWeb検索可能になった話
http://itedge.stars.ne.jp/tips_my-oracle-support/

Day 3 は itedgeblogさん のMOSナレッジがWeb検索できるようになった話です。
Google検索とかで My Oracle Support のナレッジが引っかかるようになったのはエエですね彡(^)(^)
公開状況はナレッジにより様々ですが、どんどん公開していって欲C。

Day 4. GoldenGate布教活動①

GoldenGate布教活動① ~GoldenGateの基本のキ~ - Qiita
https://qiita.com/ch0c0bana0/items/0567de420c2a40128e94

Day 4 は Unoki Yoshifumiさん の GoldenGate記事となります。
ORACLEレプリケーション製品である Oracle GoldenGate について、
基本的なところを語ってくれてます。Capture! Datapump! Replicat!彡(゚)(゚)

Day 5. VirtualBox で DB 18c環境を楽々構築

OTN の VirtualBoxイメージ で Oracle DB 18c環境 を 楽々構築
https://gonsuke777.hatenablog.com/entry/2018/12/05/231350

Day 5 はワイの VirtualBox による Oracle DB 18c環境の構築記事。
ovaイメージをダウンロードしてきてポチポチするだけなんで、めっちゃ楽彡(^)(^)

なお VirtualBox の NAT(ポートフォワード)は知らなかった、と云う声も頂きました。
Terminalソフトによるssh接続は馴染みが有るんで、ワイ好きなんすよね彡(゚)(゚)

Day 6. GoldenGate布教活動②

GoldenGate布教活動② ~GoldenGateのインストール~
https://qiita.com/ch0c0bana0/items/a57debf29a8d907e9feb

Day 6 は Unoki Yoshifumiさん の GoldenGate記事で、Day 4 の続き。
GoldenGate のインストールについて書いてくれています。
zip展開してrunInstaller実行するだけなんで、めっちゃ楽。

まあ昔はzip展開だけだったんですけどね……パッチとか色々事情は有りまして(゚ε゚ )

Day 7. GoldenGate布教活動③

GoldenGate布教活動③ ~GoldenGateを使ってみよう 事前準備編~
https://qiita.com/ch0c0bana0/items/2486c8481305ecf5de6f

Day 7 は引き続き Unoki Yoshifumiさん の GoldenGate記事。
サプリメンタルロギング設定、Capture/Datapump/Replicatの各プロセス構成など、
レプリケーションへの準備は着々や!彡(゚)(゚)

Day 8. SQL性能計測2

Oracle DatabaseでSQLの性能計測2(DBMS_XPLAN&DBMS_SQLTUNE編)
https://gonsuke777.hatenablog.com/entry/2018/12/08/215428

Day 8. はワイの DBMS_XPLAN と DBMS_SQLTUNE による SQL性能計測記事や!

特に DBMS_SQLTUNE は最高や~~。コイツが有ると無いとでSQLチューニングの
効率が全く違う。要オプションなんやけど、有る所ではどんどん使おうな彡(゚)(゚)
過去講演(DDD 2013)の資料もよろしくや~~彡(^)(^)

Day 9. GoldenGate布教活動④

GoldenGate布教活動④ ~GoldenGateプロセスの構成~
https://qiita.com/ch0c0bana0/items/651e8378a74ba9c0059e

Day 9 は Day 7 から続く Unoki Yoshifumiさん の GoldenGate記事。
ついにレプリケーション(データ伝播)が現実のものに!彡(゚)(゚)

GoldenGateは比較的シンプルな製品で、レプリケーションの構成も
堅牢かつ柔軟に組み立てられるので、ガンガン使ってやで彡(^)(^)

Cloud の Data Integration Platform Cloud(DIPC) でもお手軽に使えますよ!

Day 10. GoldenGate布教活動⑤

GoldenGate布教活動⑤ ~GoldenGateスターターキット~
https://qiita.com/jimaz/items/f6b45d1400306b4dfc79

Day 10 は jimaz26さん のエントリで、GoldenGate関連のマニュアル、
セミナー資料、ホワイトペーパーのリンクをまとめてくれてますやで彡(^)(^)

Day 11. SDW(SQL Developer Web) on DBCS

SDW(SQL Developer Web) on DBCS をお試ししてみる。
https://gonsuke777.hatenablog.com/entry/2018/12/11/230110

Day 11 はワイが DBCS上で動作する SDW(SQL Developer Web) について、
セットアップ方法のサンプルや一部画面のお試しをしています。彡(゚)(゚)

まだまだ未完成なところも有りますが、SDW の今後に期待や!

Day 12. GoldenGate用Datapump(expdp)新機能 インスタンス化SCN

インスタンス化SCNを使ってお手軽初期移行
https://qiita.com/kurouuuron/items/118afdc6b6d15d46e7dd

Day 12 は kurouuuron1さんがDatapump(expdp)のGoldenGate用新機能となる
インスタンス化SCN(instantiation scn)について、解説&サンプル提示してくれてます。

こいつが有ればexpdp時のflashback_scn指定やそのORA-1555から開放されて、
Replicat起動時のaftercsn指定も不要になって、いいこと尽くめや!彡(^)(^)

Day 13. Python で Statspack を見える(グラフ)化

PythonでStatspackのTOP5待機イベントを見える化する
https://qiita.com/kngsym2018/items/feee8c43db8399821365

Day 13 は kngsym2018さんが Statspack の Top5待機イベント を
Python で見える(グラフ)化する方法を書いてくれています。

こいつが有れば Standard Edition でも闘えるんや!彡(゚)(゚)

Day 14. CDBフリート管理

CDBフリート管理
http://cosol.jp/techdb/2018/12/cdbfreet.html

Day 14 は moritaxp_oironさん が Oracle Database 18c 新機能 の
CDBフリート管理について検証記事を書いてくれています。

フリートとは艦隊の意味なので、CDB艦隊の意味……
複数CDBを1つの艦隊として捉えて、その中をPDBがグルグルするイメージですやね彡(゚)(゚)

Day 15. Oracle text の Create index を LogMiner

ログマイナーを活用した内部処理の検証・出力方法~Oracle text のcreate indexを例に~
http://ectogre.hatenablog.com/entry/2018/12/15/000000

Day 15 は SPIRYTUS_alc96さん が Oracle Text の create index時の
ORA-1031エラーを、ログマイナー(LogMiner)によって深堀りしてくれています。

LogMinerはワイも過去何回か使った事が有りますが、初めて使った時には
「ま、まさか…!!」「こんなことが…!!」「物理的に可能なのか」(マッスルドッキング並感
てな感じの衝撃を受けた記憶が彡(゚)(゚)

Day 16. Oracle Database 18c XE on Docker

Oracle Database 18c XE をDockerで動かしてみる。
http://knopp.hatenablog.jp/entry/2018/12/16/162002

Day 16 はあらゆるプラットフォーム(AWS, Azure, GCP, Docker, etc...)で
RAC を動作させる事で有名な、RACウィザード の s4r_agent(KNOPP)さん が
Oracle Database 18c XE を Docker上で動作させるサンプルを書いてくれてます。

ワイも Docker はやらないとなぁ… VirtualBox や Multitenant(MTA, PDB) で
代替できてしまうので、つい後回しになっちゃうんよね彡(-)(-)

Day 17. OCI VM DB の バックアップ構成

OCI Virtual Machine DBシステムのバックアップ構成
http://cosol.jp/techdb/2018/12/oci-virtual-machine-db-system-backup-config.html

Day 17 は wrcsus4さん が OCI(Oracle Cloud Infrastructure)の
VM Database の バックアップ構成を紐解いてくれています。

OCI上の DB では Object Storage が テープデバイス(sbt_tape)として
構成されていて、その Object Storage にバックアップが取られるんですやね。

Object Storage は確かにテープデバイスと似た、巨大ファイルの
Sequential Access が得意という特性が有るので、納得の構成ですやね彡(゚)(゚)

Day 18. GoldenGate布教活動⑥

GoldenGate布教活動⑥ ~GoldenGate管理コマンド編1~
https://qiita.com/jimaz/items/5a0271255b021a9af50d

Day 18 は jimaz26さん が GoldenGate の 管理コマンド、
INFOコマンドやSTATSコマンド等について解説してくれています。

twitterでも呟いたんやけど、GoldenGateの管理コマンドと云えば
LAGは外せないでしょ。Capture の LAG! Datapump の LAG! Replicat の LAG! 彡(゚)(゚)

来たる GoldenGate管理コマンド編2 に期待ですやね彡(^)(^)

Day 19. Oracle Database to EnterprisePostgres

Oracle Database Advent Calendar2018 Day 19
https://ameblo.jp/shinogi-gogo/entry-12428728474.html

Day 19 は Naotaka Shinogiさん がOracle Database から EnterprisePostgres への
移行についての エントリを書かれています。移行しちゃいやん……彡(゚)(゚)

Day 20. SQL性能計測3

Oracle DatabaseでSQLの性能計測3(SQLトレース編)
https://gonsuke777.hatenablog.com/entry/2018/12/21/190057

Day 20. はワイの SQLトレースによる SQL性能計測記事や!

DBMS_SQLTUNEが無くたって、SQLトレースが有れば同等レベルの分析は可能なんや!
こいつが有れば Standard Edition でも闘える!彡(゚)(゚)

あとは TRCSESSユーティリティとか V$DIAG_TRACE_FILE や
V$DIAG_TRACE_FILE_CONTENTS からのトレース採取など、
ネタはまだまだ有るやね。

Day 21. RAC One Nodeアラートログ

Oracle】押さえておきたいRAC One Nodeのアラートログの仕組み | アシスト
https://www.ashisuto.co.jp/db_blog/article/201812-rac-one-alert.html

Day 21 は satoayu_twさん が RAC One Node の
アラートログの仕組みについて解説してくれています。

記事を読むとよく解るんですが、なるほどちょっとクセが有る……彡(゚)(゚)

Day 22. キャンディちゃんが語る投票ディスク

キャンディちゃんに叱られる!~どうして投票ディスクは奇数個がいいの?~ -
https://qiita.com/HIROKAZU_MIRUMIRU/items/1162fbbeccd7fa273538

Day 22 は HIROKAZU YATSUNAMIさん が RAC の投票ディスクは
なぜ奇数個が良いのか、可愛く説明してくれてます。

可愛さに嫉妬……!彡(゚)(゚)

Day 23. Oracle DB 18c マニュアルのマニュアル

Oracle Database 18c マニュアルのマニュアル(※よく使うマニュアルのリンク集)
https://gonsuke777.hatenablog.com/entry/2018/12/24/232621

Day 23 はワイが Oracle Database 18c のマニュアルで、
頻繁に見るマニュアルのリンクを簡単に解説しつつ、貼っていってます彡(゚)(゚)

記事にも書いたんですが、書くのが意外と大変だった割りに地味wwwww

Day 24. Oracle Databaseバージョン考察2018師走

もし師走に『Oracle Databaseバージョン選択における考察’18』を創るなら
https://wmo6hash.hatenablog.jp/entry/2018/12/24/000000

Day 24 は wmo6hashさん が Oracle Databaseバージョンの選択について、
2018年師走版の考察を書いてくれています。

LTS(Long Term Support) の DB 19c か、取り敢えず DB 18c を採用するか……彡(゚)(゚)

Day 25. Oracle DB or OGG Advent Calendar 2018 振り返り

まとめ:Oracle Database or GoldenGate Advent Calendar 2018 を振り返る!
https://gonsuke777.hatenablog.com/entry/2018/12/26/195137

この記事や!いったん投稿して、URLを確定させないとURLを書けない罠……:(;゙゚'ω゚'):

お隣 Advent Calendar

Oracle Cloud Advent Calendar 2018
https://adventar.org/calendars/3077


Oracle Cloud その2 Advent Calendar 2018
https://adventar.org/calendars/3522


(全部俺) Oracle Cloud Infrastructure Advent Calendar 2018
※一人Advent Calendar
https://adventar.org/calendars/3088


Oracle OpenStack R5 への道。 Advent Calendar 2018
※一人Advent Calendar
https://adventar.org/calendars/3716


Oracle絡みの Advent Calendar です。どれも必見や!彡(゚)(゚)
一人Advent Calendar は侠気(狂喜)に満ち溢れているので、オススメですwwwww

過去の JPOUG Advent Calendar

JPOUG Advent Calendar 2017
https://jpoug.doorkeeper.jp/events/67051


JPOUG Advent Calendar 2016
https://jpoug.doorkeeper.jp/events/53797


JPOUG Advent Calendar 2015
https://jpoug.doorkeeper.jp/events/33345


JPOUG Advent Calendar 2014
https://jpoug.doorkeeper.jp/events/17313


※JPOUG Advent Calendar 2013 と JPOUG Advent Calendar 2012 は消えちゃってますね(´・ω・`)

まとめ&お礼

繰り返しになりますが、執筆して頂いた皆さん、
本当にありがとうございました!彡(^)(^)

スタートダッシュ時の状況から、埋まらないかな~~?と感じてましたが、
皆様のご協力のお陰で埋まりました。感謝感激雨霰(`・ω・)ゞ

それでは皆様、良いお年を!

Oracle Database 18c マニュアルのマニュアル(※よく使うマニュアルのリンク集)【Oracle Database or GoldenGate Advent Calendar 2018 Day 23】

※(追記)19c版も書いたのでご覧くださいね。彡(^)(^)
https://qiita.com/ora_gonsuke777/items/5da877698ac681806175

このエントリは Oracle Database or GoldenGate Advent Calendar 2018 の Day 23 の
記事となります。またまた一日遅れてしまいました。ほんとスミマセンスミマセン……:(;゙゚'ω゚'):

Oracle Database or GoldenGate Advent Calendar 2018
https://adventar.org/calendars/3525

Oracle Database のマニュアルは、ワイ的には良くできてると思うんですが、
いかんせん数と種類が多過ぎる……彡(-)(-)

そこで今日は「Oracle Database 18c マニュアルのマニュアル」と称して、
ワイが頻繁に見る Oracle Database のマニュアルのリンクを張りつつ、
簡単な解説をしていくやで! 彡(゚)(゚)
※下記リンクは2018年12月時点のものです。リンク切れの際はご容赦下さい。

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

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

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


Oracle Database Cloud Service ブック
https://docs.oracle.com/cd/E83857_01/paas/database-dbaas-cloud/books.html

こちらは DB の PaaS(DBaaS) のマニュアルなんやで。現在は Cloud の時代、ここも要チェックやで。

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

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

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


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

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

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

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

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


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

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


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

文字コード系、NLS_~ほにゃらら、タイムゾーンサマータイム、年号元号とかはここ彡(゚)(゚)


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

実はそこまで馴染みは無いんですが、JSONは避けては通れない道なんで彡(゚)(゚)
12cR1あたりから滅茶苦茶強化されてます。

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

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

Datapump(expdp, impdp), SQL*Loader(sqlldr), 外部表(EXTERNAL TABLE), LogMiner, ADRCI, 従来型エクスポート/インポート(exp, imp) などがこちら彡(゚)(゚)


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

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

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

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

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


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

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


Oracle Database VLDBおよびパーティショニング・ガイド 18c
https://docs.oracle.com/cd/E96517_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リファレンス 18c
https://docs.oracle.com/cd/E96517_01/netrf/index.html

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


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

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

7. DBA系のマニュアル

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

Oracle Database に詳しくなくても、この画像は見たこと有る人も多いかも。RDBMSの成り立ちから始まり、トランザクションの説明、データベースとインスタンスの関係、プロセス構造、メモリ構造、記憶域構造、読取一貫性、etc...
アーキテクチャのお勉強や!彡(゚)(゚)


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

DBA の一連の作業を広く網羅的に。インストールから始まり、DBCAによるDB作成、ネットワーク構成(リスナー、tnsnames.oraなど)、インスタンスの起動/停止、表領域やREDO&UNDOの管理、バックアップ・リカバリ、監視、チューニング、パッチ適用


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

DBA の一連の作業の深めなところ。でもワイがこれで一番読んだのって、dbca の サイレント・モード の コマンド・リファレンスかなぁ…彡(゚)(゚)

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

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

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


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

こちらは RMAN によるバックアップ&リカバリアーキテクチャ、戦略等が解説されてます。フラッシュバックについても。RMANを使わない、ユーザー管理のバックアップ話も有るよ彡(゚)(゚)

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

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

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


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

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


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

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

10. Data Guard系のマニュアル

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

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


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

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

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

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

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


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

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


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

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

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

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

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


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

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


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

主に暗号化に関するマニュアル。いつの間にかこんなのが彡(゚)(゚) Oracle Cloudでは暗号化がデフォルトなんで、新しく作られたのかね彡(゚)(゚)

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

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

新機能と言えばまずはこのガイド。つらつらと眺めていると、意外な発見が有りますやね彡(^)(^)


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

既存の Oracle Database を直接アップグレードするためのガイド。でもこのやり方のアップグレードは、昔よりは少なくなったなぁ……彡(-)(-)

14. その他のマニュアル

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

各種Editionやオプション、Cloudのサービスで使用可能な機能を
俯瞰できるマニュアル。何気に重要な情報が満載彡(゚)(゚)


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

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

15. まとめ

このエントリ、書くのが意外と大変だった割りに地味やなぁwwwww
さりながら、めくるめくOracle Databaseの世界を巡る手助けになれば、本望ですやで!彡(^)(^)