SlideShare a Scribd company logo
Oracle Database 18c/19c 辛口新機能解説
Noriyoshi Shinoda
September 26, 2019
SPEAKER
篠田典良(しのだのりよし)
所属
日本ヒューレット・パッカード株式会社
現在の業務
Oracle ACE(2009年4月~)
Oracle DatabaseをはじめPostgreSQL, Microsoft SQL Server, Vertica等 RDBMS全般に関するシステムの
設計、移行、チューニング、コンサルティング
Oracle Database関連書籍15冊の執筆
オープンソース製品に関する調査、検証
関連する URL
Oracle ACEってどんな人?
http://www.oracle.com/technetwork/jp/database/articles/vivadeveloper/index-1838335-ja.html
「PostgreSQL 虎の巻」シリーズ
http://h30507.www3.hp.com/t5/user/viewprofilepage/user-id/838802
2
AGENDA
3
Active Data Guard DML Redirect
Log file segmentation
Sequence Enhancement
Hint Report
Hybrid Partition
Privilege Analysis
ACTIVE DATA GUARD DML REDIRECT
4
ACTIVE DATA GUARD DML REDIRECT
スタンバイで更新系DMLを実行
5
• スタンバイ・インスタンスで、INSERT/UPDATE/DELETE文が実行可能になります。
• 一部のBIツール等、作業履歴やメタデータの保存用にデータベースを更新するツールの利用が可能になります。
• 実行例
SQL> INSERT INTO data1 VALUES (100, 'Standby');
INSERT INTO data1 VALUES (100, 'Standby')
*
ERROR at line 1:
ORA-16000: database or pluggable database open for read-only access
SQL> ALTER SESSION ENABLE ADG_REDIRECT_DML;
Session altered.
SQL> INSERT INTO data1 VALUES (100, 'Standby');
1 row created.
ACTIVE DATA GUARD DML REDIRECT
スタンバイで更新系DMLを実行
6
• プライマリ・インスタンスにSQL文を自動的に送信(REDIRECT)する機能です。
Primary
Instance
Standby
Instance UPDATE Statement
UPDATE
fal_server
REDO & Apply
• DML はプライマリで実行された REDOがスタンバイに届くまで制御が戻りません。
• ARCHIVE Applyの場合はログスイッチ
• distributed_lock_timeout (Default 60s) 経過でタイムアウト・エラー
• 使い方
• ALTER SESSION ENABLE ADG_REDIRECT_DML文を実行します。
• 初期化パラメータ adg_redirect_dml をTRUEに設定(デフォルト値 FALSE)します。
ACTIVE DATA GUARD DML REDIRECT
スタンバイで更新系DMLを実行
7
• スタンバイ・インスタンスで実行したSQL
SQL> insert /*+ append */ into data1 select * from data2;
1 row created.
• プライマリ・インスタンスで実行されたSQL(トレース・ファイルから)
• ヒントは削除されます。
SELECT /*+ FULL(P) +*/ * FROM "DATA1" P ←Parseのみ実行
INSERT INTO "DATA1" "A1" ("C1","C2") SELECT "A2"."C1","A2"."C2" FROM "DATA2"@! "A2"
• トランザクションの制御も行うことができます。
• XAトランザクションを除く
ACTIVE DATA GUARD DML REDIRECT
スタンバイで更新系DMLを実行
8
• DDLの利用可能範囲は限定的です。
• CREATE GLOBAL TEMPORARY TABLE文はリダイレクトされます。
• TRUNCATE文は実行できません。
ACTIVE DATA GUARD DML REDIRECT
スタンバイで更新系DMLを実行
9
• スタンバイ・インスタンスで実行される更新系操作
• SEQUENCEの操作(NEXTVAL, CURRVAL)
• キャッシュも各インスタンスで管理されます。
• CREATE PRIVATE TEMPORARY TABLE文
• プライベート一時テーブルへの更新DMLもリダイレクトされます。
SQL> CREATE PRIVATE TEMPORARY TABLE ORA$PTT_TEMP1(key1 NUMBER, val1 VARCHAR2(10));
Table created.
SQL> INSERT INTO ORA$PTT_TEMP1 VALUES(100, 'temp1');
INSERT INTO ORA$PTT_TEMP1 VALUES(100, 'temp1')
*
ERROR at line 1:
ORA-00942: table or view does not exist
ORA-02063: preceding line from ADGREDIRECT
ACTIVE DATA GUARD DML REDIRECT
PL/SQL Redirect
10
• PL/SQLブロックをプライマリ・インスタンスにリダイレクトします。
• マニュアルの記載(「Oracle Data Guard概要および管理」マニュアル 10.2.2.1)
• 日本語
Active Data Guardスタンバイ・データベースで実行するPL/SQLブロックは、バインド変数が含まれていない
場合、プライマリ・データベースにリダイレクトして実行できます。
• 英語
Top-level PL/SQL blocks that you run on Active Data Guard standby databases can be redirected to and
run on the primary database, if they do not contain bind variables.
ACTIVE DATA GUARD DML REDIRECT
PL/SQL Redirect
11
• ALTER SESSION ENABLE ADG_REDIRECT_PLSQL文を実行します。
• 対応する初期化パラメータはありません。
• 使い方
SQL> ALTER SESSION ENABLE ADG_REDIRECT_PLSQL;
Session altered.
SQL> BEGIN
2 EXECUTE IMMEDIATE 'CREATE TABLE data2(key1 NUMBER, val1 VARCHAR2(10))’;
3 END;
4 /
PL/SQL procedure successfully completed.
LOG FILE SEGMENTATION
12
LOG FILE SEGMENTATION
ログファイルの自動ローテーション
13
• ネットワーク系ログファイルのローテーション機能です。
• リスナー / Connection Manager (CMAN) / Global Service Manager (GSM) などが対象。
• リスナー・ログのパラメーター(listener.ora)
パラメータ名 説明 デフォルト値
LOG_FILE_NUM_{listener} ログ・ファイルの最大個数 無制限
LOG_FILE_SIZE_{listener} ログ・ファイルの最大サイズ(MB) 300
• 設定例
• リスナー名: LISTENER
• ファイル・サイズ: 2 MB
• ファイル個数: 3 個
LOG_FILE_NUM_LISTENER=3
LOG_FILE_SIZE_LISTENER=2
LOG FILE SEGMENTATION
ログファイルの自動ローテーション
14
• ファイルの最大サイズは設定の半分になります(原因不明)。
• ファイルの個数は指定された値よりも1個多くなります。
• ファイル名には数字が付与されます。
• 最も古いファイルが切り詰められて最新のファイル(listener.log)となります。
• 例
$ ls -l
total 3024
-rw-r-----. 1 oracle oinstall 1001257 Jun 6 20:53 listener_19.log
-rw-r-----. 1 oracle oinstall 967651 Sep 8 00:38 listener_20.log
-rw-r-----. 1 oracle oinstall 1087375 Sep 8 00:49 listener_21.log
-rw-r-----. 1 oracle oinstall 21277 Sep 8 01:02 listener.log
SEQUENCE ENHANCEMENT
15
SEQUENCE ENHANCEMENT
シーケンス値のリセット
16
• シーケンス値を任意の値にリセットできるようになりました。
ALTER SEQUENCE sequence_name RESTART [START WITH value]
• マニュアルの記載(Oracle Database 19c SQL言語リファレンス / ALTER SEQUENCE)
• 日本語版
異なる順序番号で再開する場合、順序を削除して再作成する必要があります。
• 英語版
To restart the sequence at a different number, you must drop and re-create it.
• 管理者ガイドには記述があります。
順序の開始点を変更するには、順序を削除してから再作成するか、指定した値から順序を再開する
RESTART句を使用します。RESTART句で指定する値は、順序のMINVALUEパラメータとMAXVALUEパラ
メータの値の間にする必要があります。
SEQUENCE ENHANCEMENT
シーケンス値のリセット
17
• START WITHを省略した場合はデフォルト値(=MINVALUE / MAXVALUE)にリセットされます。
SQL> CREATE SEQUENCE seq1 START WITH 100;
Sequence created.
SQL> SELECT seq1.NEXTVAL FROM DUAL;
NEXTVAL
----------
100
SQL> ALTER SEQUENCE seq1 RESTART;
Sequence altered.
SQL> SELECT seq1.NEXTVAL FROM DUAL;
NEXTVAL
----------
1
SEQUENCE ENHANCEMENT
Scalable Sequence
18
• シーケンス値にインスタンスIDとセッションIDを付加することでロックを回避します。
• EXTENDを指定すると最大値が 6 桁増加します(MAXVALUE を指定しない場合)。
SQL> CREATE SEQUENCE exseq1 SCALE EXTEND;
Sequence created.
SQL> SELECT exseq1.NEXTVAL FROM DUAL;
NEXTVAL
------------------------------------------
1012880000000000000000000000000001
SELECT MOD(SYS_CONTEXT('USERENV', 'SID'), 1000) FROM DUAL;
SELECT MOD(SYS_CONTEXT('USERENV', 'INSTANCE'), 100) + 100 FROM DUAL;
EXTEND
HINT REPORT
19
HINT REPORT
指定されたヒントが使われているか
20
• SQL文に指定されたヒントが有効かを確認できる機能です。
SQL> SELECT /*+ INDEX(data1 idx1_data1) */ * FROM data1 t1 WHERE c1 = 100;
C1 C2
---------- ----------
100 data1
SQL> SELECT * FROM TABLE(dbms_xplan.display_cursor());
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 4 (100)|
| 1 | TABLE ACCESS BY INDEX ROWID BATCHED| DATA1 | 1 | 11 | 4 (0)|
|* 2 | INDEX RANGE SCAN | IDX1_DATA1 | 1 | | 3 (0)|
• 上記の例はオプティマイザがたまたまインデックスを選択しただけです。
• 実はヒントが間違っています。
HINT REPORT
21
パラメータ指定 説明 備考
HINT_REPORT ヒント・レポート全体を出力
HINT_REPORT_USED 使われているヒントのみ出力
HINT_REPORT_UNUSED 使われていないヒントのみ出力 デフォルト
• DBMS_XPLAN.DISPLAY*ファンクションのFORMATパラメーターに指定できる値
指定されたヒントが使われているか
SQL> SELECT * FROM TABLE(dbms_xplan.display_cursor(FORMAT=>'+HINT_REPORT'));
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID 0fftdrrfs0qym, child number 0
…
Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 1 (E - Syntax error (1))
---------------------------------------------------------------------------
• 使い方
HINT REPORT
22
• 構文エラー
SELECT /*+ FULL */ * FROM data1 t1 WHERE c1 = 100;
ヒントレポートの表示
• ヒントレポート
Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 1 (E - Syntax error (1))
---------------------------------------------------------------------------
1 - SEL$1
E - FULL
• 構文エラーとなる条件
• ヒントに括弧が無い、パラメーターが無いなど。
HINT REPORT
23
• 矛盾したヒントの指定
SELECT /*+ FULL(t1) INDEX(t1 idx1_data1) */ * FROM data1 t1 WHERE c1 = 100;
ヒントレポートの表示
• ヒントレポート
Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 2 (U - Unused (2))
---------------------------------------------------------------------------
1 - SEL$1 / T1@SEL$1
U - FULL(t1) / hint conflicts with another in sibling query block
U - INDEX(t1 idx1_data1) / hint conflicts with another in sibling query block
• 使われなかったヒント
• 使われなかった理由が説明されます。
HINT REPORT
24
• ヒントを使わない設定
ALTER SESSION SET optimizer_ignore_hints = TRUE;
ALTER SESSION SET optimizer_ignore_parallel_hints = TRUE;
SELECT /*+ INDEX(t1 idx1_data1) PARALLEL(100) */ * FROM data1 t1 WHERE c1 = 100;
ヒントレポートの表示
• ヒントレポート
Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 2 (U - Unused (2))
---------------------------------------------------------------------------
0 - STATEMENT
U - PARALLEL(100) / because of _optimizer_ignore_parallel_hints
1 - SEL$1 / T1@SEL$1
U - INDEX(t1 idx1_data1) / rejected by IGNORE_OPTIM_EMBEDDED_HINTS
HINT REPORT
25
• リソース不足
SELECT /*+ PARALLEL(1000000) */ COUNT(*) FROM data1;
ヒントレポートの表示
• ヒントレポート
Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 1 (U - Unused (1))
---------------------------------------------------------------------------
0 - STATEMENT
U - PARALLEL(1000000)
Note
-----
- Degree of Parallelism is 65535 because of hint
• Unused にはなっていますが、実際には並列度が下がった状態でパラレル・クエリーが実行されてい
ます。
HINT REPORT
26
• 対象未解決
SELECT /*+ FULL(data1) */ * FROM data1 t1 WHERE c1=100;
ヒントレポートの表示
• ヒントレポート
Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 1 (N - Unresolved (1))
---------------------------------------------------------------------------
1 - SEL$1
N - FULL(data1)
HINT REPORT
27
• SQLチューニングガイド
• 「19.3.3 ヒントに関するレポート」に説明があります。
• PL/SQLパッケージおよびタイプ・リファレンス
• 「206.5 DBMS_XPLANパッケージ」には説明がありません。
マニュアル
HYBRID PARTITION
28
HYBRID PARTITION
テーブル内で外部データとセグメントの混在
29
• パーティション単位に外部データとセグメントを混在できます。
• 使い方 (CREATE TABLE)
CREATE TABLE hybrid_part1 (id1 NUMBER NOT NULL, val1 VARCHAR2(10))
EXTERNAL PARTITION ATTRIBUTES (
TYPE ORACLE_LOADER
DEFAULT DIRECTORY dir1
ACCESS PARAMETERS (FIELDS TERMINATED BY ',' (id1, val1))
REJECT LIMIT UNLIMITED)
PARTITION BY RANGE (id1) (
PARTITION p1000 VALUES LESS THAN (1000),
PARTITION p2000 VALUES LESS THAN (2000),
PARTITION e3000 VALUES LESS THAN (3000) EXTERNAL LOCATION ('e3000.txt'),
PARTITION e4000 VALUES LESS THAN (4000) EXTERNAL DEFAULT DIRECTORY dir2 LOCATION
('e4000.txt'));
HYBRID PARTITION
テーブル内で外部データとセグメントの混在
30
• 既存のパーティション・テーブルにEXTERNAL PARTITION ATTRIBUTEを追加できます。
• 使い方 (ALTER TABLE)
ALTER TABLE hybrid_part2
ADD EXTERNAL PARTITION ATTRIBUTES (
TYPE ORACLE_LOADER
DEFAULT DIRECTORY dir1
ACCESS PARAMETERS (FIELDS TERMINATED BY ',' (id1, val1)));
ALTER TABLE hybrid_part2 ADD PARTITION e1000 EXTERNAL LOCATION ('e1000.txt');
HYBRID PARTITION
テーブル内で外部データとセグメントの混在
31
• インデックスは作成できません。
• インデックス付のパーティション・テーブルにはEXTERNAL PARTITION ATTRIBUTEを設定できません。
• 部分インデックス(INDEXING OFF)指定もエラーになります。
SQL> CREATE INDEX idx1_hybrid_part1 ON hybrid_part1(id1) LOCAL;
CREATE INDEX idx1_hybrid_part1 ON hybrid_part1(id1) LOCAL
*
ERROR at line 1:
ORA-14354: operation not supported for a hybrid-partitioned table
SQL> CREATE INDEX idx1_hybrid_part1 ON hybrid_part1(id1) GLOBAL;
CREATE INDEX idx1_hybrid_part1 ON hybrid_part1(id1) GLOBAL
*
ERROR at line 1:
ORA-14354: operation not supported for a hybrid-partitioned table
PRIVILEGE ANALYSIS
32
PRIVILEGE ANALYSIS
権限の適正化を視覚化
33
• 使用している権限と使用していない権限を表示することができます。
• Oracle Database 12c Release 1の新機能ですが、Database Vaultライセンスが不要になりました。
• DBMS_PRIVILEGE_CAPTUREパッケージを使います。
サブプログラム 説明 備考
CREATE_CAPTURE 権限収集ポリシーの定義
タイプに以下を指定します。
G_DATABASE: SYS以外の全権限
G_ROLE: 指定されたロールの権限
G_CONTEXT: 条件に合致した権限
G_ROLE_AND_CONTEXT:条件に合致したロール
ENABLE_CAPTURE 権限収集ポリシーの有効化
DISABLE_CAPTURE 権限収集ポリシーの無効化
GENERATE_RESULT 結果の収集
DROP_CAPTURE 権限収集ポリシーの削除
PRIVILEGE ANALYSIS
権限の適正化を視覚化
34
• 使い方
SQL> EXEC DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(name=>'db_pol', -
type=> DBMS_PRIVILEGE_CAPTURE.G_DATABASE);
PL/SQL procedure successfully completed.
SQL> EXEC DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE('db_pol');
PL/SQL procedure successfully completed.
-- 別セッションでアプリケーション実行
SQL> EXEC DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE('db_pol');
PL/SQL procedure successfully completed.
SQL> EXEC DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT('db_pol');
PL/SQL procedure successfully completed.
PRIVILEGE ANALYSIS
権限の適正化を視覚化
35
• 結果を確認できるディクショナリ・ビュー
ビュー名 説明 備考
DBA_USED_* 使用した権限 PRIVS | OBJPRIVS | SYSPRIVS など
DBA_UNUSED_* 使用しなかった権限 PRIVS | OBJPRIVS | SYSPRIVS など
• 結果確認
• CAPTUREされた権限はSYSAUX表領域に一時的に格納されます。
• 結果確認例
SQL> SELECT SYS_PRIV,OBJECT_NAME FROM DBA_USED_PRIVS WHERE CAPTURE='db_pol';
SYS_PRIV OBJECT_NAME
---------------------------------------- ------------------------------
DBMS_STANDARD
CREATE TABLE
CREATE SEQUENCE
CREATE SESSION
UNLIMITED TABLESPACE
参考資料
参考になるWeb情報
36
• Oracle Database Technology Night
http://otndnld.oracle.co.jp/ondemand/technight/20190422-TechNight28-1_19c_NewFeatures_DL_final.pdf
• Oracle Database 19cの注目ポイント15
http://cosol.jp/techdb/oradb_19c_newft_jpoug_in15m8_v190723.pdf
• 津島博士のパフォーマンス講座
https://www.oracle.com/technetwork/jp/database/articles/tsushima/index.html
• ORACLE-BASE Oracle 19c Articles
https://oracle-base.com/articles/19c/articles-19c
• OracleDBPro
http://oracledbpro.blogspot.com/
THANK YOU
Mail: noriyoshi.shinoda@hpe.com
Twitter: @nori_shinoda
Qiita: @plusultra

More Related Content

PDF
しばちょう先生による特別講義! RMANバックアップの運用と高速化チューニング
PDF
Zero Data Loss Recovery Applianceによるデータベース保護のアーキテクチャ
PDF
Oracle GoldenGate アーキテクチャと基本機能
PDF
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
PDF
Oracle GoldenGate R12.2 セットアップガイド
PDF
Oracle Data Guard による高可用性
PPT
DataGuard体験記
PDF
Oracle Database: リリースモデルとアップグレード・パッチ計画 (2021年2月版)
しばちょう先生による特別講義! RMANバックアップの運用と高速化チューニング
Zero Data Loss Recovery Applianceによるデータベース保護のアーキテクチャ
Oracle GoldenGate アーキテクチャと基本機能
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
Oracle GoldenGate R12.2 セットアップガイド
Oracle Data Guard による高可用性
DataGuard体験記
Oracle Database: リリースモデルとアップグレード・パッチ計画 (2021年2月版)

What's hot (20)

PPTX
Oracle Data Guard basics and how to create manually 18c plus
PDF
Oracle GoldenGateでの資料採取(トラブル時に採取すべき資料)
PDF
[Oracle DBA & Developer Day 2012] 高可用性システムに適した管理性と性能を向上させるASM と RMAN の魅力
PDF
Oracle Cloud Infrastructure:2022年1月度サービス・アップデート
PDF
Oracle GoldenGate FAQ
PPT
障害とオペミスに備える! ~Oracle Databaseのバックアップを考えよう~
PDF
Oracle GoldenGate 19c を使用した 簡単データベース移行ガイド_v1.0
PDF
[Oracle Cloud Days Tokyo 2015] Oracle Database 12c最新情報 ~Maximum Availability ...
PDF
オンプレミスからクラウドへ:Oracle Databaseの移行ベストプラクティスを解説 (Oracle Cloudウェビナーシリーズ: 2021年2月18日)
PDF
Oracle GoldenGate Veridata概要
PDF
Hadoopのシステム設計・運用のポイント
PDF
Migration to Oracle Multitenant
PDF
[Oracle DBA & Developer Day 2016] しばちょう先生の特別講義!!ストレージ管理のベストプラクティス ~ASMからExada...
PDF
[A31]AWS上でOracleを利用するためのはじめの一歩!by Masatoshi Yoshida
PDF
PostgreSQL 15の新機能を徹底解説
PDF
GoldenGateテクニカルセミナー3「Oracle GoldenGate Technical Deep Dive」(2016/5/11)
PDF
これからLDAPを始めるなら 「389-ds」を使ってみよう
PDF
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略
PDF
とっておきの方法! Oracle Databaseの自動アップグレードのお勧め手法 省力・最新化 概要編 (Oracle Cloudウェビナーシリーズ: ...
PPTX
Zero Data Loss Recovery Appliance 設定手順例
Oracle Data Guard basics and how to create manually 18c plus
Oracle GoldenGateでの資料採取(トラブル時に採取すべき資料)
[Oracle DBA & Developer Day 2012] 高可用性システムに適した管理性と性能を向上させるASM と RMAN の魅力
Oracle Cloud Infrastructure:2022年1月度サービス・アップデート
Oracle GoldenGate FAQ
障害とオペミスに備える! ~Oracle Databaseのバックアップを考えよう~
Oracle GoldenGate 19c を使用した 簡単データベース移行ガイド_v1.0
[Oracle Cloud Days Tokyo 2015] Oracle Database 12c最新情報 ~Maximum Availability ...
オンプレミスからクラウドへ:Oracle Databaseの移行ベストプラクティスを解説 (Oracle Cloudウェビナーシリーズ: 2021年2月18日)
Oracle GoldenGate Veridata概要
Hadoopのシステム設計・運用のポイント
Migration to Oracle Multitenant
[Oracle DBA & Developer Day 2016] しばちょう先生の特別講義!!ストレージ管理のベストプラクティス ~ASMからExada...
[A31]AWS上でOracleを利用するためのはじめの一歩!by Masatoshi Yoshida
PostgreSQL 15の新機能を徹底解説
GoldenGateテクニカルセミナー3「Oracle GoldenGate Technical Deep Dive」(2016/5/11)
これからLDAPを始めるなら 「389-ds」を使ってみよう
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略
とっておきの方法! Oracle Databaseの自動アップグレードのお勧め手法 省力・最新化 概要編 (Oracle Cloudウェビナーシリーズ: ...
Zero Data Loss Recovery Appliance 設定手順例
Ad

Similar to db tech showcase 2019 D10 Oracle Database New Features (20)

PDF
Introduction of Oracle Database Architecture
PDF
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
PDF
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
PPTX
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
PDF
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
PDF
PostgreSQL 12の話
PDF
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
PDF
固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-
PPT
Maatkit で MySQL チューニング
PPTX
Azure SQLデータベース最新動向&TIPS
KEY
オリジナルからデータ・ポンプに移植するツボ
PPT
Handlersocket 20110517
PDF
PostgreSQL Unconference #5 ICU Collation
PDF
RouterBOARD with OpenFlow
PPT
プロとしてのOracleアーキテクチャ入門 ~番外編~
PPTX
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PPT
HandlerSocket plugin for MySQL
PDF
Let's scale-out PostgreSQL using Citus (Japanese)
PDF
PostgreSQL13 新機能紹介
PDF
PostgreSQL Conference Japan 2021 B2 Citus 10
Introduction of Oracle Database Architecture
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
PostgreSQL 12の話
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
固定化か?最新化か?オプティマイザ統計の運用をもう一度考える。 -JPOUG Tech Talk Night #6-
Maatkit で MySQL チューニング
Azure SQLデータベース最新動向&TIPS
オリジナルからデータ・ポンプに移植するツボ
Handlersocket 20110517
PostgreSQL Unconference #5 ICU Collation
RouterBOARD with OpenFlow
プロとしてのOracleアーキテクチャ入門 ~番外編~
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
HandlerSocket plugin for MySQL
Let's scale-out PostgreSQL using Citus (Japanese)
PostgreSQL13 新機能紹介
PostgreSQL Conference Japan 2021 B2 Citus 10
Ad

More from Noriyoshi Shinoda (20)

PDF
Babelfish Compatibility
PDF
PostgreSQL Unconference #29 Unicode IVS
PDF
Citus 10 verification result (Japanese)
PDF
PostgreSQL Unconference #26 No Error on PostgreSQL
PDF
PostgreSQL 14 Beta1 New Features with Examples (Japanese)
PDF
PostgreSQL 14 Beta 1 New Features with Examples (English)
PDF
Add PLEASE clause to Oracle Database
PDF
PostgreSQL 12 New Features with Examples (English) GA
PDF
EDB Postgres Vision 2019
PDF
PostgreSQL 12 Beta 1 New Features with Examples (Japanese)
PDF
PostgreSQL 12 Beta 1 New Features with Examples (English)
PDF
Let's scale-out PostgreSQL using Citus (English)
PDF
PostgreSQL 11 New Features With Examples (Japanese)
PDF
PostgreSQL 11 New Features With Examples (English)
PDF
Citus 7.5 Beta 検証結果
PDF
PostgreSQL 11 New Features Japanese version (Beta 1)
PDF
PostgreSQL 11 New Features English version (Beta 1)
PDF
PGConf.ASIA 2017 Logical Replication Internals (English)
PDF
PostgreSQL 10 New Features (English)
PDF
PostgreSQL 10 Beta1 New Features (Japanese)
Babelfish Compatibility
PostgreSQL Unconference #29 Unicode IVS
Citus 10 verification result (Japanese)
PostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL 14 Beta1 New Features with Examples (Japanese)
PostgreSQL 14 Beta 1 New Features with Examples (English)
Add PLEASE clause to Oracle Database
PostgreSQL 12 New Features with Examples (English) GA
EDB Postgres Vision 2019
PostgreSQL 12 Beta 1 New Features with Examples (Japanese)
PostgreSQL 12 Beta 1 New Features with Examples (English)
Let's scale-out PostgreSQL using Citus (English)
PostgreSQL 11 New Features With Examples (Japanese)
PostgreSQL 11 New Features With Examples (English)
Citus 7.5 Beta 検証結果
PostgreSQL 11 New Features Japanese version (Beta 1)
PostgreSQL 11 New Features English version (Beta 1)
PGConf.ASIA 2017 Logical Replication Internals (English)
PostgreSQL 10 New Features (English)
PostgreSQL 10 Beta1 New Features (Japanese)

db tech showcase 2019 D10 Oracle Database New Features

  • 1. Oracle Database 18c/19c 辛口新機能解説 Noriyoshi Shinoda September 26, 2019
  • 2. SPEAKER 篠田典良(しのだのりよし) 所属 日本ヒューレット・パッカード株式会社 現在の業務 Oracle ACE(2009年4月~) Oracle DatabaseをはじめPostgreSQL, Microsoft SQL Server, Vertica等 RDBMS全般に関するシステムの 設計、移行、チューニング、コンサルティング Oracle Database関連書籍15冊の執筆 オープンソース製品に関する調査、検証 関連する URL Oracle ACEってどんな人? http://www.oracle.com/technetwork/jp/database/articles/vivadeveloper/index-1838335-ja.html 「PostgreSQL 虎の巻」シリーズ http://h30507.www3.hp.com/t5/user/viewprofilepage/user-id/838802 2
  • 3. AGENDA 3 Active Data Guard DML Redirect Log file segmentation Sequence Enhancement Hint Report Hybrid Partition Privilege Analysis
  • 4. ACTIVE DATA GUARD DML REDIRECT 4
  • 5. ACTIVE DATA GUARD DML REDIRECT スタンバイで更新系DMLを実行 5 • スタンバイ・インスタンスで、INSERT/UPDATE/DELETE文が実行可能になります。 • 一部のBIツール等、作業履歴やメタデータの保存用にデータベースを更新するツールの利用が可能になります。 • 実行例 SQL> INSERT INTO data1 VALUES (100, 'Standby'); INSERT INTO data1 VALUES (100, 'Standby') * ERROR at line 1: ORA-16000: database or pluggable database open for read-only access SQL> ALTER SESSION ENABLE ADG_REDIRECT_DML; Session altered. SQL> INSERT INTO data1 VALUES (100, 'Standby'); 1 row created.
  • 6. ACTIVE DATA GUARD DML REDIRECT スタンバイで更新系DMLを実行 6 • プライマリ・インスタンスにSQL文を自動的に送信(REDIRECT)する機能です。 Primary Instance Standby Instance UPDATE Statement UPDATE fal_server REDO & Apply • DML はプライマリで実行された REDOがスタンバイに届くまで制御が戻りません。 • ARCHIVE Applyの場合はログスイッチ • distributed_lock_timeout (Default 60s) 経過でタイムアウト・エラー • 使い方 • ALTER SESSION ENABLE ADG_REDIRECT_DML文を実行します。 • 初期化パラメータ adg_redirect_dml をTRUEに設定(デフォルト値 FALSE)します。
  • 7. ACTIVE DATA GUARD DML REDIRECT スタンバイで更新系DMLを実行 7 • スタンバイ・インスタンスで実行したSQL SQL> insert /*+ append */ into data1 select * from data2; 1 row created. • プライマリ・インスタンスで実行されたSQL(トレース・ファイルから) • ヒントは削除されます。 SELECT /*+ FULL(P) +*/ * FROM "DATA1" P ←Parseのみ実行 INSERT INTO "DATA1" "A1" ("C1","C2") SELECT "A2"."C1","A2"."C2" FROM "DATA2"@! "A2" • トランザクションの制御も行うことができます。 • XAトランザクションを除く
  • 8. ACTIVE DATA GUARD DML REDIRECT スタンバイで更新系DMLを実行 8 • DDLの利用可能範囲は限定的です。 • CREATE GLOBAL TEMPORARY TABLE文はリダイレクトされます。 • TRUNCATE文は実行できません。
  • 9. ACTIVE DATA GUARD DML REDIRECT スタンバイで更新系DMLを実行 9 • スタンバイ・インスタンスで実行される更新系操作 • SEQUENCEの操作(NEXTVAL, CURRVAL) • キャッシュも各インスタンスで管理されます。 • CREATE PRIVATE TEMPORARY TABLE文 • プライベート一時テーブルへの更新DMLもリダイレクトされます。 SQL> CREATE PRIVATE TEMPORARY TABLE ORA$PTT_TEMP1(key1 NUMBER, val1 VARCHAR2(10)); Table created. SQL> INSERT INTO ORA$PTT_TEMP1 VALUES(100, 'temp1'); INSERT INTO ORA$PTT_TEMP1 VALUES(100, 'temp1') * ERROR at line 1: ORA-00942: table or view does not exist ORA-02063: preceding line from ADGREDIRECT
  • 10. ACTIVE DATA GUARD DML REDIRECT PL/SQL Redirect 10 • PL/SQLブロックをプライマリ・インスタンスにリダイレクトします。 • マニュアルの記載(「Oracle Data Guard概要および管理」マニュアル 10.2.2.1) • 日本語 Active Data Guardスタンバイ・データベースで実行するPL/SQLブロックは、バインド変数が含まれていない 場合、プライマリ・データベースにリダイレクトして実行できます。 • 英語 Top-level PL/SQL blocks that you run on Active Data Guard standby databases can be redirected to and run on the primary database, if they do not contain bind variables.
  • 11. ACTIVE DATA GUARD DML REDIRECT PL/SQL Redirect 11 • ALTER SESSION ENABLE ADG_REDIRECT_PLSQL文を実行します。 • 対応する初期化パラメータはありません。 • 使い方 SQL> ALTER SESSION ENABLE ADG_REDIRECT_PLSQL; Session altered. SQL> BEGIN 2 EXECUTE IMMEDIATE 'CREATE TABLE data2(key1 NUMBER, val1 VARCHAR2(10))’; 3 END; 4 / PL/SQL procedure successfully completed.
  • 13. LOG FILE SEGMENTATION ログファイルの自動ローテーション 13 • ネットワーク系ログファイルのローテーション機能です。 • リスナー / Connection Manager (CMAN) / Global Service Manager (GSM) などが対象。 • リスナー・ログのパラメーター(listener.ora) パラメータ名 説明 デフォルト値 LOG_FILE_NUM_{listener} ログ・ファイルの最大個数 無制限 LOG_FILE_SIZE_{listener} ログ・ファイルの最大サイズ(MB) 300 • 設定例 • リスナー名: LISTENER • ファイル・サイズ: 2 MB • ファイル個数: 3 個 LOG_FILE_NUM_LISTENER=3 LOG_FILE_SIZE_LISTENER=2
  • 14. LOG FILE SEGMENTATION ログファイルの自動ローテーション 14 • ファイルの最大サイズは設定の半分になります(原因不明)。 • ファイルの個数は指定された値よりも1個多くなります。 • ファイル名には数字が付与されます。 • 最も古いファイルが切り詰められて最新のファイル(listener.log)となります。 • 例 $ ls -l total 3024 -rw-r-----. 1 oracle oinstall 1001257 Jun 6 20:53 listener_19.log -rw-r-----. 1 oracle oinstall 967651 Sep 8 00:38 listener_20.log -rw-r-----. 1 oracle oinstall 1087375 Sep 8 00:49 listener_21.log -rw-r-----. 1 oracle oinstall 21277 Sep 8 01:02 listener.log
  • 16. SEQUENCE ENHANCEMENT シーケンス値のリセット 16 • シーケンス値を任意の値にリセットできるようになりました。 ALTER SEQUENCE sequence_name RESTART [START WITH value] • マニュアルの記載(Oracle Database 19c SQL言語リファレンス / ALTER SEQUENCE) • 日本語版 異なる順序番号で再開する場合、順序を削除して再作成する必要があります。 • 英語版 To restart the sequence at a different number, you must drop and re-create it. • 管理者ガイドには記述があります。 順序の開始点を変更するには、順序を削除してから再作成するか、指定した値から順序を再開する RESTART句を使用します。RESTART句で指定する値は、順序のMINVALUEパラメータとMAXVALUEパラ メータの値の間にする必要があります。
  • 17. SEQUENCE ENHANCEMENT シーケンス値のリセット 17 • START WITHを省略した場合はデフォルト値(=MINVALUE / MAXVALUE)にリセットされます。 SQL> CREATE SEQUENCE seq1 START WITH 100; Sequence created. SQL> SELECT seq1.NEXTVAL FROM DUAL; NEXTVAL ---------- 100 SQL> ALTER SEQUENCE seq1 RESTART; Sequence altered. SQL> SELECT seq1.NEXTVAL FROM DUAL; NEXTVAL ---------- 1
  • 18. SEQUENCE ENHANCEMENT Scalable Sequence 18 • シーケンス値にインスタンスIDとセッションIDを付加することでロックを回避します。 • EXTENDを指定すると最大値が 6 桁増加します(MAXVALUE を指定しない場合)。 SQL> CREATE SEQUENCE exseq1 SCALE EXTEND; Sequence created. SQL> SELECT exseq1.NEXTVAL FROM DUAL; NEXTVAL ------------------------------------------ 1012880000000000000000000000000001 SELECT MOD(SYS_CONTEXT('USERENV', 'SID'), 1000) FROM DUAL; SELECT MOD(SYS_CONTEXT('USERENV', 'INSTANCE'), 100) + 100 FROM DUAL; EXTEND
  • 20. HINT REPORT 指定されたヒントが使われているか 20 • SQL文に指定されたヒントが有効かを確認できる機能です。 SQL> SELECT /*+ INDEX(data1 idx1_data1) */ * FROM data1 t1 WHERE c1 = 100; C1 C2 ---------- ---------- 100 data1 SQL> SELECT * FROM TABLE(dbms_xplan.display_cursor()); PLAN_TABLE_OUTPUT ------------------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | | | 4 (100)| | 1 | TABLE ACCESS BY INDEX ROWID BATCHED| DATA1 | 1 | 11 | 4 (0)| |* 2 | INDEX RANGE SCAN | IDX1_DATA1 | 1 | | 3 (0)| • 上記の例はオプティマイザがたまたまインデックスを選択しただけです。 • 実はヒントが間違っています。
  • 21. HINT REPORT 21 パラメータ指定 説明 備考 HINT_REPORT ヒント・レポート全体を出力 HINT_REPORT_USED 使われているヒントのみ出力 HINT_REPORT_UNUSED 使われていないヒントのみ出力 デフォルト • DBMS_XPLAN.DISPLAY*ファンクションのFORMATパラメーターに指定できる値 指定されたヒントが使われているか SQL> SELECT * FROM TABLE(dbms_xplan.display_cursor(FORMAT=>'+HINT_REPORT')); PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- SQL_ID 0fftdrrfs0qym, child number 0 … Hint Report (identified by operation id / Query Block Name / Object Alias): Total hints for statement: 1 (E - Syntax error (1)) --------------------------------------------------------------------------- • 使い方
  • 22. HINT REPORT 22 • 構文エラー SELECT /*+ FULL */ * FROM data1 t1 WHERE c1 = 100; ヒントレポートの表示 • ヒントレポート Hint Report (identified by operation id / Query Block Name / Object Alias): Total hints for statement: 1 (E - Syntax error (1)) --------------------------------------------------------------------------- 1 - SEL$1 E - FULL • 構文エラーとなる条件 • ヒントに括弧が無い、パラメーターが無いなど。
  • 23. HINT REPORT 23 • 矛盾したヒントの指定 SELECT /*+ FULL(t1) INDEX(t1 idx1_data1) */ * FROM data1 t1 WHERE c1 = 100; ヒントレポートの表示 • ヒントレポート Hint Report (identified by operation id / Query Block Name / Object Alias): Total hints for statement: 2 (U - Unused (2)) --------------------------------------------------------------------------- 1 - SEL$1 / T1@SEL$1 U - FULL(t1) / hint conflicts with another in sibling query block U - INDEX(t1 idx1_data1) / hint conflicts with another in sibling query block • 使われなかったヒント • 使われなかった理由が説明されます。
  • 24. HINT REPORT 24 • ヒントを使わない設定 ALTER SESSION SET optimizer_ignore_hints = TRUE; ALTER SESSION SET optimizer_ignore_parallel_hints = TRUE; SELECT /*+ INDEX(t1 idx1_data1) PARALLEL(100) */ * FROM data1 t1 WHERE c1 = 100; ヒントレポートの表示 • ヒントレポート Hint Report (identified by operation id / Query Block Name / Object Alias): Total hints for statement: 2 (U - Unused (2)) --------------------------------------------------------------------------- 0 - STATEMENT U - PARALLEL(100) / because of _optimizer_ignore_parallel_hints 1 - SEL$1 / T1@SEL$1 U - INDEX(t1 idx1_data1) / rejected by IGNORE_OPTIM_EMBEDDED_HINTS
  • 25. HINT REPORT 25 • リソース不足 SELECT /*+ PARALLEL(1000000) */ COUNT(*) FROM data1; ヒントレポートの表示 • ヒントレポート Hint Report (identified by operation id / Query Block Name / Object Alias): Total hints for statement: 1 (U - Unused (1)) --------------------------------------------------------------------------- 0 - STATEMENT U - PARALLEL(1000000) Note ----- - Degree of Parallelism is 65535 because of hint • Unused にはなっていますが、実際には並列度が下がった状態でパラレル・クエリーが実行されてい ます。
  • 26. HINT REPORT 26 • 対象未解決 SELECT /*+ FULL(data1) */ * FROM data1 t1 WHERE c1=100; ヒントレポートの表示 • ヒントレポート Hint Report (identified by operation id / Query Block Name / Object Alias): Total hints for statement: 1 (N - Unresolved (1)) --------------------------------------------------------------------------- 1 - SEL$1 N - FULL(data1)
  • 27. HINT REPORT 27 • SQLチューニングガイド • 「19.3.3 ヒントに関するレポート」に説明があります。 • PL/SQLパッケージおよびタイプ・リファレンス • 「206.5 DBMS_XPLANパッケージ」には説明がありません。 マニュアル
  • 29. HYBRID PARTITION テーブル内で外部データとセグメントの混在 29 • パーティション単位に外部データとセグメントを混在できます。 • 使い方 (CREATE TABLE) CREATE TABLE hybrid_part1 (id1 NUMBER NOT NULL, val1 VARCHAR2(10)) EXTERNAL PARTITION ATTRIBUTES ( TYPE ORACLE_LOADER DEFAULT DIRECTORY dir1 ACCESS PARAMETERS (FIELDS TERMINATED BY ',' (id1, val1)) REJECT LIMIT UNLIMITED) PARTITION BY RANGE (id1) ( PARTITION p1000 VALUES LESS THAN (1000), PARTITION p2000 VALUES LESS THAN (2000), PARTITION e3000 VALUES LESS THAN (3000) EXTERNAL LOCATION ('e3000.txt'), PARTITION e4000 VALUES LESS THAN (4000) EXTERNAL DEFAULT DIRECTORY dir2 LOCATION ('e4000.txt'));
  • 30. HYBRID PARTITION テーブル内で外部データとセグメントの混在 30 • 既存のパーティション・テーブルにEXTERNAL PARTITION ATTRIBUTEを追加できます。 • 使い方 (ALTER TABLE) ALTER TABLE hybrid_part2 ADD EXTERNAL PARTITION ATTRIBUTES ( TYPE ORACLE_LOADER DEFAULT DIRECTORY dir1 ACCESS PARAMETERS (FIELDS TERMINATED BY ',' (id1, val1))); ALTER TABLE hybrid_part2 ADD PARTITION e1000 EXTERNAL LOCATION ('e1000.txt');
  • 31. HYBRID PARTITION テーブル内で外部データとセグメントの混在 31 • インデックスは作成できません。 • インデックス付のパーティション・テーブルにはEXTERNAL PARTITION ATTRIBUTEを設定できません。 • 部分インデックス(INDEXING OFF)指定もエラーになります。 SQL> CREATE INDEX idx1_hybrid_part1 ON hybrid_part1(id1) LOCAL; CREATE INDEX idx1_hybrid_part1 ON hybrid_part1(id1) LOCAL * ERROR at line 1: ORA-14354: operation not supported for a hybrid-partitioned table SQL> CREATE INDEX idx1_hybrid_part1 ON hybrid_part1(id1) GLOBAL; CREATE INDEX idx1_hybrid_part1 ON hybrid_part1(id1) GLOBAL * ERROR at line 1: ORA-14354: operation not supported for a hybrid-partitioned table
  • 33. PRIVILEGE ANALYSIS 権限の適正化を視覚化 33 • 使用している権限と使用していない権限を表示することができます。 • Oracle Database 12c Release 1の新機能ですが、Database Vaultライセンスが不要になりました。 • DBMS_PRIVILEGE_CAPTUREパッケージを使います。 サブプログラム 説明 備考 CREATE_CAPTURE 権限収集ポリシーの定義 タイプに以下を指定します。 G_DATABASE: SYS以外の全権限 G_ROLE: 指定されたロールの権限 G_CONTEXT: 条件に合致した権限 G_ROLE_AND_CONTEXT:条件に合致したロール ENABLE_CAPTURE 権限収集ポリシーの有効化 DISABLE_CAPTURE 権限収集ポリシーの無効化 GENERATE_RESULT 結果の収集 DROP_CAPTURE 権限収集ポリシーの削除
  • 34. PRIVILEGE ANALYSIS 権限の適正化を視覚化 34 • 使い方 SQL> EXEC DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(name=>'db_pol', - type=> DBMS_PRIVILEGE_CAPTURE.G_DATABASE); PL/SQL procedure successfully completed. SQL> EXEC DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE('db_pol'); PL/SQL procedure successfully completed. -- 別セッションでアプリケーション実行 SQL> EXEC DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE('db_pol'); PL/SQL procedure successfully completed. SQL> EXEC DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT('db_pol'); PL/SQL procedure successfully completed.
  • 35. PRIVILEGE ANALYSIS 権限の適正化を視覚化 35 • 結果を確認できるディクショナリ・ビュー ビュー名 説明 備考 DBA_USED_* 使用した権限 PRIVS | OBJPRIVS | SYSPRIVS など DBA_UNUSED_* 使用しなかった権限 PRIVS | OBJPRIVS | SYSPRIVS など • 結果確認 • CAPTUREされた権限はSYSAUX表領域に一時的に格納されます。 • 結果確認例 SQL> SELECT SYS_PRIV,OBJECT_NAME FROM DBA_USED_PRIVS WHERE CAPTURE='db_pol'; SYS_PRIV OBJECT_NAME ---------------------------------------- ------------------------------ DBMS_STANDARD CREATE TABLE CREATE SEQUENCE CREATE SESSION UNLIMITED TABLESPACE
  • 36. 参考資料 参考になるWeb情報 36 • Oracle Database Technology Night http://otndnld.oracle.co.jp/ondemand/technight/20190422-TechNight28-1_19c_NewFeatures_DL_final.pdf • Oracle Database 19cの注目ポイント15 http://cosol.jp/techdb/oradb_19c_newft_jpoug_in15m8_v190723.pdf • 津島博士のパフォーマンス講座 https://www.oracle.com/technetwork/jp/database/articles/tsushima/index.html • ORACLE-BASE Oracle 19c Articles https://oracle-base.com/articles/19c/articles-19c • OracleDBPro http://oracledbpro.blogspot.com/
  • 37. THANK YOU Mail: [email protected] Twitter: @nori_shinoda Qiita: @plusultra