osc16tk でOracleとPostgreSQLを比較


11/5にオープンソースカンファレンス 2016 Tokyo/Fallに行って、PostgreSQL中心に聴いてきました。 
総合ハッシュタグは [#osc16tk](https://twitter.com/hashtag/osc16tk)

# 「生誕20周年を迎えたPostgreSQLを使ってみよう」

JPUG中国支部長、曽根壮大氏

[Speaker Deckのスライド](https://speakerdeck.com/soudai/sheng-dan-20zhou-nian-woying-etapostgresqlwoshi-tutemiyou)

## 実況tweet拾い上げ

- データ分析やるならPythonでしょ。で、PythonとPostgreSQLはPL/Pythonあって使いやすい。例えばPythonの機械学習LibraryをPL/Pythonから呼べる。パラレルクエリもある。
- Pythonでストアド書いてSQLで関数呼ぶだけでデータ分析
- バックアップ・可用性でもPostgreSQLはOracleに追いついたんじゃない？
- PostgreSQLと商用DBの違い。RDBの基本的な部分ではだいたい追いついた。パラレルクエリ、SQL構文、バックアップや冗長化、全文検索などの拡張
- パラレルクエリに対応したのは大きい。コアを増やすと性能が上がるようになった
- 弱いのは監査ログ、Windows系のGUI操作、DWHの列指向INDEX、自動更新マテリアルビュー
- 負けている部分。GUI上での操作、運用系や監査系の機能、列志向INDEXや自動更新マテビューのようなDWHの機能
- PostgreSQLのよいところ。ライセンスの自由度、JSONB型などの豊富な型、拡張性の高さ、WAFとの相性の良さ
- OSSDBはすみわけが進んできた。MySQL（Web系）、SQLite（組み込み）、Firebird
- OracleからPostgreSQLへの移行。SE1からはだいたいいける。ストアド使ってる、自動更新マテビューを使ってないならいける。PGEConfに資料アリ。EEから移行するならアシストさんとかSRAさんに聞いてみよう
- MySQL→PostgreSQLはだいたいいける。
PostgreSQL→MySQLはきつい
商用DBの高いやつは難しい

## OracleからPostgreSQLへの移行

- Software Design 2016-10月号の特集記事
- Oracle Standard Edition からなら移行可能だろう

SD誌に特集記事を書いたばかりだったので、このテーマにもふれていました。

### PostgreSQLの弱いところ

- GUI上での操作
- 運用系機能
- 監査系の機能
- 列指向INDEX
- 自動更新マテリアライズド・ビュー

# 「PostgreSQL活用に役立つ厳選ドキュメントTOP3のご紹介」

（株）アシストの竹内尚也氏

PGECons（PostgreSQL エンタープライズ・コンソーシアム）の成果文書のうち、PostgreSQLサポートエンジニア視点で、役立ち度が高いもの

1. [異種DBMSからPostgreSQLへの移行ガイド 2013年度WG2](https://www.pgecons.org/download/works_2013/)
 - 移行時のデータ型についての必要な知識が網羅されていて完全性高い。
2. [PostgreSQL セキュリティガイド](https://www.pgecons.org/wp-content/uploads/PGECons/2015/WG3/PGECons_2015_WG3_Security.pdf)
 - 標準機能でセキュリティ要件を満たせないときの代替対応策まで詳細に記述。
  - 拡張機能pgaudit使えばいけるよ、とか。
 - セキュリティ要件を実施したときの性能検証もやったよ。
3. [2013 年度 WG3 活動報告書 -走り続ける PostgreSQL システム構築のために-](https://www.pgecons.org/wp-content/uploads/PGECons/2013/WG3/pgecons-wg3-2013-report.pdf)

AWS RDS のようなManaged Service を利用できる現代でも、PostgreSQL入りのサーバー管理者なら読んでおかないといけない気がする。

# 「Oracleもいいぞ」

PostgreSQLが弱くて、Oracleの強いところを、もう少し具体的に、自分用の覚え書きとしてまとめました。

##  運用系

- [Flashback Technology](https://docs.oracle.com/cd/E49329_01/appdev.121/b71295/adfns_flashback.htm) (EE)
 - ヒューマンエラーでDB壊してしまったときなどのフォールバックの機能
 - Point-In-Time Recovery がシングル・コマンドで所要時間数分
 - 「シングル・コマンド」になっているのが強い
- [RAC One Node](http://www.oracle.com/technetwork/jp/database/options/clustering/rac-one-node-wp-12c-1896130-ja.pdf) (EE+RAC One)
 - Real Application Cluster を組むほどの予算はないが高可用性は欲しい
 - Oracleライセンスは1つで、Active - Standby をRAC技術を応用して実現
 - 共有ディスク・アーキテクチャの ASMが前提
- [ASM Automatic Storage Management](http://www.oracle.com/technetwork/jp/database/database-technologies/cloud-storage/oracle-12c-asm-overview-1965430-ja.pdf) (SE,EE)
 - 共有ディスク・アーキテクチャ
 - 統合クラスタ・ファイル・システム+ボリューム・マネージャ
 - リバランシング機能
 - 自己修復機能を備えた自動ミラー再構築
- [RMAN Recovery Manager](https://docs.oracle.com/cd/E16338_01/backup.112/b56269/rcmquick.htm) (SE,EE)
 - 高速増分バックアップ
 - パラレルバックアップ
- [Data Pump](http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19211-01/dp_overview.html) (SE,EE)
 - 高速export/import
 - 並列処理でさらに高速化。9-13倍速
- [自動メモリ管理](https://docs.oracle.com/cd/E16338_01/server.112/b56301/memory.htm) (SE,EE)
 - リリース11gから、インスタンスで使用される合計メモリー・サイズを指定するだけで、Oracle Databaseが必要に応じてSGAとインスタンスPGAの間でメモリーを動的に交換し、処理ニーズに対応します。

## セキュリティ
- 透過的データ暗号化 (EE+ASO)
 - 表領域単位
 - アプリケーション変更不要
 - CPU命令セットAES-NI使うと性能劣化ほとんどなし

## 監査系

- [Unified Auditing](https://docs.oracle.com/cd/E49329_01/network.121/b71285/auditing.htm#CHDDGDHB) (SE,EE)
 - 必要なすべての監査設定を定義する統合監査ポリシー
 - ファイングレイン監査：特定の条件を定義して、内容に基づいてデータ・アクセスを監視

## DWH系

- [ロー型フォーマットとカラム型フォーマットの両立を実現](http://www.oracle.com/technetwork/jp/database/articles/pickup/database-in-memory-2283690-ja.html) (EE+IM)
 - OLTP処理を得意とするロー型
 - 集計や分析処理などのクエリー処理が高速になるカラム型
 - Oracle Database In-Memoryは、ロー型とカラム型の2つのフォーマットを同時にメモリー上にロードして利用
- [自動更新マテリアライズド・ビュー](https://docs.oracle.com/cd/E57425_01/121/DWHSG/basicmv.htm#g1028195) (SE,EE)
 - 効率が悪い結合および集計操作を事前に計算し、その結果をデータベース内の表に格納しておく
 - すべてのマテリアライズド・ビューに最新データが確実に含まれるようにするリフレッシュ機能
 - マテリアライズド・ビューを高速リフレッシュ可能にする方法

いいぞ、と思う機能を全部入れるとEnterprise Edition にオプションてんこ盛りになってしまって、ライセンス正価が、8core用で5000万円くらいですかね。