Oracle® Database

管理者リファレンス

11g リリース2(11.2) for Linux and UNIX-Based Operating Systems

B56317-12(原本部品番号:E10839-25)

2017年9月

Oracle Database管理者リファレンス, 11gリリース2(11.2) for Linux and UNIX-Based Operating Systems

B56317-12

Copyright © 2006, 2017, Oracle and/or its affiliates. All rights reserved.

原本著者: Bharathi Jayathirtha

原本協力者:  Kevin Flood、Pat Huey、Clara Jaeckel、Emily Murphy、Terri Winters、Tanaya Bhattacharjee、Prakash Jashnani、Ashmita Bose、Namrata Bhakthavatsalam、Reema Khosla

協力者: Subhranshu Banerjee、Mark Bauer、Robert Chang、Jonathan Creighton、Sudip Datta、Thirumaleshwara Hasandka、Joel Kallman、George Kotsovolos、Richard Long、Rolly Lv、Padmanabhan Manavazhi、Matthew Mckerley、Krishna Mohan、Rajendra Pingte、Hanlin Qian、Janelle Simmons、Roy Swonger、Douglas Williams、Joseph Therrattil Koonen、Binoy Sukumaran、Sumanta Chatterjee

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

- コマンド構文

- 用語

- ドキュメントへのアクセス

Oracle Database 11gリリース2 (11.2)の新機能

- Oracle Database 11gリリース2 (11.2.0.3)の新機能

- Oracle Database 11gリリース2 (11.2.0.2)の新機能

1 Oracle Databaseの管理

- 1.1 概要

- 1.2 環境変数

- 1.2.1 Oracle Databaseの環境変数

- 1.2.2 UNIX環境変数

- 1.2.3 共通の環境設定

- 1.2.4 システム・タイム・ゾーンの設定

- 1.3 初期化パラメータ

- 1.3.1 DB_BLOCK_SIZE初期化パラメータ

- 1.3.2 ASM_DISKSTRING初期化パラメータ

- 1.3.3 LOG_ARCHIVE_DEST_n初期化パラメータ

- 1.3.4 DISK_ASYNCH_IO初期化パラメータ(HP-UX)

- 1.4 オペレーティング・システムのアカウントとグループ

- 1.4.1 オペレーティング・システム・アカウントの追加

- 1.4.2 Oracleユーザーのアカウントの構成

- 1.5 トレース・ファイルの使用

2 Oracleソフトウェアの停止と起動

- 2.1 Oracle Restart

- 2.2 Oracleプロセスの停止と起動

- 2.2.1 Oracle Databaseインスタンスおよび自動ストレージ管理インスタンスの停止と起動

- 2.2.1.1 Oracle Databaseインスタンスまたは自動ストレージ管理インスタンスの停止

- 2.2.1.2 Oracle Databaseインスタンスまたは自動ストレージ管理インスタンスの再起動

- 2.2.2 Oracle Restartの停止と起動

- 2.2.3 Oracle Enterprise Manager Database Controlの停止と起動

- 2.2.4 Oracle Management Agentの停止と起動

3 Oracle Databaseの構成

- 3.1 スタンドアロン・ツールとしてのコンフィギュレーション・アシスタントの使用

- 3.1.1 Oracle Net Configuration Assistantの使用

- 3.1.2 Oracle Database Upgrade Assistantの使用

- 3.1.3 Oracle Database Configuration Assistantの使用

- 3.1.4 新規またはアップグレード済データベースの構成

- 3.2 実行可能ファイルの再リンク

4 SQL*Plusの管理

- 4.1 コマンドラインSQL*Plusの管理

- 4.1.1 設定ファイルの使用

- 4.1.2 PRODUCT_USER_PROFILE表の使用

- 4.1.3 Oracle Databaseサンプル・スキーマの使用

- 4.1.4 SQL*Plusのコマンドライン・ヘルプのインストールと削除

- 4.1.4.1 SQL*Plusのコマンドライン・ヘルプのインストール

- 4.1.4.2 SQL*Plusのコマンドライン・ヘルプの削除

- 4.2 コマンドラインSQL*Plusの使用

- 4.2.1 SQL*Plusからのシステム・エディタの使用

- 4.2.2 SQL*Plusからのオペレーティング・システム・コマンドの実行

- 4.2.3 SQL*Plusへの割込み

- 4.2.4 SPOOLコマンドの使用

- 4.3 SQL*Plusの制限事項

- 4.3.1 ウィンドウのサイズ変更

- 4.3.2 リターン・コード

- 4.3.3 パスワードの非表示

5 Oracle Net Servicesの構成

- 5.1 Oracle Net Services構成ファイルの保存場所

- 5.2 Adaptersユーティリティ

- 5.3 Oracle Protocol Support

- 5.3.1 IPCプロトコル・サポート

- 5.3.2 TCP/IPプロトコル・サポート

- 5.3.3 Secure Sockets Layer付きTCP/IPプロトコル・サポート

- 5.4 TCP/IPまたはSecure Sockets Layer付きTCP/IP用のリスナーの設定

6 OracleプリコンパイラおよびOracle Call Interfaceの使用

- 6.1 Oracleプリコンパイラの概要

- 6.1.1 プリコンパイラ構成ファイル

- 6.1.2 プリコンパイラ実行可能ファイルの再リンク

- 6.1.3 プリコンパイラのREADMEファイル

- 6.1.4 すべてのプリコンパイラに共通の問題

- 6.1.5 静的および動的リンク

- 6.1.6 クライアント共有ライブラリとクライアント静的ライブラリ

- 6.2 クライアント・アプリケーションのビット長サポート

- 6.3 Pro*C/C++プリコンパイラ

- 6.3.1 Pro*C/C++のデモ・プログラム

- 6.3.2 Pro*C/C++のユーザー・プログラム

- 6.4 Pro*COBOLプリコンパイラ

- 6.4.1 Pro*COBOLの環境変数

- 6.4.1.1 Micro Focus Server Express COBOLコンパイラ

- 6.4.1.2 Acucorp ACUCOBOL-GT COBOLコンパイラ

- 6.4.2 Pro*COBOLのOracleランタイム・システム

- 6.4.3 Pro*COBOLのデモ・プログラム

- 6.4.4 Pro*COBOLのユーザー・プログラム

- 6.4.5 FORMATプリコンパイラ・オプション

- 6.5 Pro*FORTRANプリコンパイラ

- 6.5.1 Pro*FORTRANのデモ・プログラム

- 6.5.2 Pro*FORTRANのユーザー・プログラム

- 6.6 SQL*Module for ADA

- 6.6.1 SQL*Module for Adaデモ・プログラム

- 6.6.2 SQL*Module for Adaユーザー・プログラム

- 6.7 OCIとOCCI

- 6.7.1 OCIとOCCIのデモ・プログラム

- 6.7.2 OCIとOCCIのユーザー・プログラム

- 6.8 64ビット・ドライバを使用するOracle JDBC/OCIプログラム

- 6.9 カスタムMakeファイル

- 6.10 未定義シンボルの修正

- 6.11 マルチスレッド・アプリケーション

- 6.12 シグナル・ハンドラの使用

- 6.13 XA機能

7 SQL*LoaderおよびPL/SQLのデモ

- 7.1 SQL*Loaderのデモ

- 7.2 PL/SQLのデモ

- 7.3 64ビットOracle Database PL/SQLからの32ビット外部プロシージャのコール

8 Oracle Databaseのチューニング

- 8.1 チューニングの重要性

- 8.2 オペレーティング・システムのツール

- 8.2.1 vmstat

- 8.2.2 sar

- 8.2.3 iostat

- 8.2.4 swap、swapinfo、swaponまたはlsps

- 8.2.5 AIXのツール

- 8.2.5.1 Base Operation Systemツール

- 8.2.5.2 Performance Toolbox

- 8.2.5.3 System Management Interface Tool

- 8.2.6 HP-UXのツール

- 8.2.7 Linuxのツール

- 8.2.8 Solarisのツール

- 8.3 メモリー管理のチューニング

- 8.3.1 十分なスワップ領域の割当て

- 8.3.2 ページングの制御

- 8.3.3 Oracleブロック・サイズの調整

- 8.3.4 メモリー・リソースの割当て

- 8.4 ディスク入出力のチューニング

- 8.4.1 自動ストレージ管理の使用

- 8.4.2 適切なファイル・システム・タイプの選択

- 8.5 ディスク・パフォーマンスの監視

- 8.5.1 その他のオペレーティング・システムでのディスク・パフォーマンスの監視

- 8.5.2 ディスク再同期化の使用による自動ストレージ管理ディスク・グループの監視

- 8.6 システム・グローバル領域

- 8.6.1 SGAサイズの確認

- 8.6.2 システム・リソース検証ユーティリティ

- 8.6.2.1 sysresvユーティリティの目的

- 8.6.2.2 sysresvを使用するための条件

- 8.6.2.3 sysresvの構文

- 8.6.2.4 sysresvの使用例

- 8.6.3 AIXの共有メモリー

- 8.7 オペレーティング・システムのバッファ・キャッシュのチューニング

A AIXシステムでのOracle Databaseの管理

- A.1 メモリーおよびページング

- A.1.1 バッファ・キャッシュのページング・アクティビティの制御

- A.1.2 AIXファイル・バッファ・キャッシュのチューニング

- A.1.3 十分なページング領域の割当て

- A.1.4 ページングの制御

- A.1.5 データベース・ブロック・サイズの設定

- A.1.6 ログ・アーカイブ・バッファのチューニング

- A.1.7 入出力バッファおよびSQL*Loader

- A.2 ディスク入出力の問題

- A.2.1 AIX論理ボリューム・マネージャ

- A.2.2 RAW論理ボリュームと比較した場合のジャーナル・ファイル・システムの使用

- A.2.3 非同期入出力の使用

- A.2.4 入出力スレーブ

- A.2.5 DB_FILE_MULTIBLOCK_READ_COUNTパラメータの使用

- A.2.6 後書きの使用

- A.2.7 順次先読みのチューニング

- A.2.8 ディスク入出力ペーシングのチューニング

- A.2.9 Oracle Databaseによるミラー復元

- A.3 CPUのスケジューリングおよびプロセスの優先順位

- A.3.1 プロセスのランタイム・スライスの変更

- A.3.2 SMPシステムでのプロセッサ・バインディングの使用

- A.4 環境変数AIXTHREAD_SCOPEの設定

- A.5 ネットワーク情報サービスの外部ネーミングのサポート

- A.6 AIX 5.3以上のバージョンでのマルチスレッド同時処理

- A.7 Oracle JDBC Thinドライバを使用したIBM JSSE Providerの構成

B LinuxシステムでのOracle Databaseの管理

- B.1 拡張バッファ・キャッシュのサポート

- B.2 LinuxでのHugePagesの使用

- B.3 非同期入出力サポート

- B.4 直接入出力サポート

- B.5 マルチスレッド同時処理

- B.6 共有リソースの割当て

- B.7 32ビットLinuxから64ビットLinuxへのデータベースの移行

- B.7.1 RMANを使用したデータベースのオンライン・バックアップ

- B.7.2 32ビットLinuxデータベースから64ビットLinuxデータベースへの移行

- B.7.2.1 データファイルのディレクトリ構造が同一の32ビット・データベースから64ビット・データベースへの移行

- B.7.2.2 データファイルのディレクトリ構造が異なる32ビット・データベースから64ビット・データベースへの移行

- B.7.3 データのASMへの移行およびASMからの移行

C HP-UXシステムでのOracle Databaseの管理

- C.1 Oracleインスタンス用のHP-UX共有メモリー・セグメント

- C.2 HP-UX SCHED_NOAGEスケジュール・ポリシー

- C.2.1 Oracle Database用のSCHED_NOAGEの有効化

- C.3 軽量タイマーの実装

- C.4 非同期入出力

- C.4.1 MLOCK権限

- C.4.2 非同期入出力の実装

- C.4.3 非同期入出力の検証

- C.4.3.1 HP-UX非同期ドライバがOracle Database用に構成されているかの検証

- C.4.3.2 Oracle Databaseが非同期入出力を使用しているかの検証

- C.4.4 SGAの非同期フラグ

- C.5 大規模メモリーの割当てとOracle Databaseのチューニング

- C.5.1 デフォルトの大規模仮想メモリー・ページ・サイズ

- C.5.2 チューニングに関する推奨事項

- C.5.3 チューニング可能なベース・ページ・サイズ

- C.6 CPU_COUNT初期化パラメータおよびHP-UX動的プロセッサ再構成

- C.7 ネットワーク情報サービスの外部ネーミングのサポート

- C.8 拡張ホスト名および拡張ノード名のアクティブ化と設定

D SolarisシステムでのOracle Databaseの管理

- D.1 緊密共有メモリー

E Oracle ODBC Driverの使用

- E.1 Oracle ODBCドライバの動作保証

- E.2 サポートされていない機能

- E.3 データ型の実装

- E.4 データ型に関する制限事項

- E.5 SQLDriverConnect関数の接続文字列の書式

- E.6 プログラムでのロック・タイムアウトの削減

- E.7 ODBCアプリケーションのリンク

- E.8 ROWIDに関する情報の取得

- E.9 WHERE句のROWID

- E.10 結果セットの有効化

- E.11 EXEC構文の有効化

- E.12 サポートされている機能

- E.12.1 APIへの準拠

- E.12.2 ODBC API関数の実装

- E.12.3 ODBC SQL構文の実装

- E.12.4 データ型の実装

- E.13 Unicodeのサポート

- E.13.1 ODBC環境内でのUnicodeのサポート

- E.13.2 ODBC APIでのUnicodeのサポート

- E.13.3 SQLGetDataのパフォーマンス

- E.13.4 Unicodeのサンプル

- E.14 パフォーマンスとチューニング

- E.14.1 ODBCプログラミングの一般的なガイドライン

- E.14.2 データソース構成オプション

- E.14.3 DATEおよびTIMESTAMPデータ型

- E.15 エラー・メッセージ

F データベースの制限

- F.1 データベースの制限

G Very Large MemoryおよびHugePages

- G.1 Linux x86のVery Large Memory

- G.1.1 32ビットLinuxでのVLM実装

- G.1.2 VLM実装のための前提条件

- G.1.3 SGAの制限を拡大する方法

- G.1.3.1 Hugememカーネル

- G.1.3.2 HugememカーネルとVery Large Memory

- G.1.4 Oracle DatabaseのVery Large Memoryの構成

- G.1.5 Very Large Memoryの実装に関する制限

- G.2 HugePagesの概要

- G.2.1 HugePagesによるSGAのチューニング

- G.2.2 LinuxでのHugePagesの構成

- G.2.3 HugePages構成の制限

- G.2.4 透過的なHugePagesの無効化

索引

はじめに

このマニュアルでは、次の各プラットフォームでOracle Database 11gリリース2(11.2)を管理および構成する方法について、プラットフォームごとに説明します。

- IBM AIX on POWER Systems

- HP-UX

- Linux

- Oracle Solaris

このマニュアルでは、『Oracle Database管理者ガイド』を補足的に説明します。

対象読者

このマニュアルは、Oracle Database 11gリリース2 (11.2)の管理および構成を担当する方を対象としています。Oracle RACを構成する場合は、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

サポートをご購入のOracleのお客様は、My Oracle Supportにアクセスして電子サポートを受けることができます。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info)か、聴覚に障害のあるお客様は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。

関連ドキュメント

次に示すプラットフォーム固有のOracle Database 11gドキュメントの該当する項を参照してください。

- IBM AIX on POWER Systemsドキュメント

- HP-UXドキュメント

- Linuxドキュメント

- Oracle Solarisドキュメント

IBM AIX on POWER Systemsドキュメント

- Oracle Database

- 『Oracle Databaseリリース・ノート』

- 『Oracle Databaseインストレーション・ガイド for IBM AIX on POWER Systems(64-Bit)』

- 『Oracle Databaseクイック・インストレーション・ガイド for IBM AIX on POWER Systems(64-Bit)』

- 『Oracle Grid Infrastructureインストレーション・ガイド for IBM AIX on POWER Systems』

- 『Oracle Real Application Clustersインストレーション・ガイド for Linux and UNIX Systems』

- Oracle Database Client

- 『Oracle Database Clientインストレーション・ガイド for IBM AIX on POWER Systems(64-Bit)』

- 『Oracle Database Clientクイック・インストレーション・ガイド for IBM AIX on POWER Systems(64-Bit)』

- Oracle Database Examples

- 『Oracle Database Examplesインストレーション・ガイド』

HP-UXドキュメント

- Oracle Database

- 『Oracle Databaseリリース・ノート for HP-UX』

- 『Oracle Databaseインストレーション・ガイド for HP-UX』

- 『Oracle Databaseクイック・インストレーション・ガイド for HP-UX PA-RISC(64-Bit)』

- 『Oracle Databaseクイック・インストレーション・ガイド for HP-UX Itanium』

- 『Oracle Grid Infrastructure for HP-UX』

- 『Oracle Real Application Clustersインストレーション・ガイド for Linux and UNIX Systems』

- Oracle Database Client

- 『Oracle Database Clientインストレーション・ガイド for HP-UX』

- 『Oracle Database Clientクイック・インストレーション・ガイド for HP-UX PA-RISC』

- 『Oracle Database Clientクイック・インストレーション・ガイド for HP-UX Itanium』

- Oracle Database Examples

- 『Oracle Database Examplesインストレーション・ガイド』

Linuxドキュメント

- Oracle Database

- 『Oracle Databaseリリース・ノート for Linux』

- 『Oracle Databaseインストレーション・ガイド for Linux』

- 『Oracle Databaseクイック・インストレーション・ガイド for Linux x86』

- 『Oracle Databaseクイック・インストレーション・ガイド for Linux x86-64』

- 『Oracle Grid Infrastructureインストレーション・ガイド for Linux』

- 『Oracle Real Application Clustersインストレーション・ガイド for Linux and UNIX Systems』

- 『Oracle Enterprise Manager Grid Controlの基本インストレーション・ガイド』

- Oracle Database Client

- 『Oracle Database Clientインストレーション・ガイド for Linux』

- 『Oracle Database Clientクイック・インストレーション・ガイド for Linux x86』

- 『Oracle Database Clientクイック・インストレーション・ガイド for Linux x86-64』

- Oracle Database Examples

- 『Oracle Database Examplesインストレーション・ガイド』

Oracle Solarisドキュメント

- Oracle Database

- 『Oracle Databaseリリース・ノート for Oracle Solaris』

- 『Oracle Databaseインストレーション・ガイド for Oracle Solaris』

- 『Oracle Databaseクイック・インストレーション・ガイド for Oracle Solaris on SPARC (64-Bit)』

- 『Oracle Databaseクイック・インストレーション・ガイド for Oracle Solaris on x86-64 (64-Bit)』

- 『Oracle Grid Infrastructureインストレーション・ガイド for Solaris Operating System』

- 『Oracle Real Application Clustersインストレーション・ガイド for Linux and UNIX Systems』

- Oracle Database Client

- 『Oracle Database Clientインストレーション・ガイド for Oracle Solaris』

- 『Oracle Database Clientクイック・インストレーション・ガイド for Oracle Solaris on SPARC (64-Bit)』

- 『Oracle Database Clientクイック・インストレーション・ガイド for Oracle Solaris on x86-64 (64-Bit)』

- Oracle Database Examples

- 『Oracle Database Examplesインストレーション・ガイド』

このマニュアルのリリース時に記載されなかった重要な情報は、各プラットフォームのリリース・ノートを参照してください。Oracle Databaseのリリース・ノートは定期的に更新されます。最新バージョンは、次のURLから入手できます。

http://docs.oracle.com/en/database/

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ドキュメントのタイトル、強調またはユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

コマンド構文

UNIXのコマンド構文は、固定幅フォントで表示されます。ドル記号($)、シャープ記号(#)、パーセント記号(%)はUNIXのコマンド・プロンプトです。これらの記号をコマンドの一部として入力しないでください。このマニュアルでは、コマンド構文に次の表記規則を使用しています。

規則

説明

バックスラッシュ \

バックスラッシュは、UNIXコマンドの行の継続を表す記号です。コマンド例が1行に入りきらない場合に使用します。コマンドは、表示どおりにバックスラッシュを付けて入力するか、またはバックスラッシュなしで1行に入力します。

dd if=/dev/rdsk/c0t1d0s6 of=/dev/rst0 bs=10b \
count=10000

中カッコ { }

中カッコは、必須の入力項目を表します。

.DEFINE {macro1}

大カッコ [ ]

大カッコは、カッコ内の項目を任意に選択することを表します。

cvtcrt termname [outfile]

省略記号 ...

省略記号は、同じ項目を任意の数だけ繰り返すことを表します。

CHKVAL fieldname value1 value2 ... valueN

イタリック体

イタリック体は、変数を表します。変数には値を代入します。

library_name

縦線 |

縦線は、大カッコまたは中カッコ内の複数の選択項目の区切りに使用します。

FILE filesize [K|M]

用語

このマニュアルではUNIXオペレーティング・システムの名前を短縮して使用しています。次のようになります。

オペレーティング・システム

短縮名

IBM AIX on POWER Systems

AIX

HP-UX PA-RISC(64-bit)
HP-UX Itanium

HP-UX
注意: 特定のアーキテクチャにおけるHP-UXの情報の違いについては、本文中に記載されています。

Linux x86
Linux x86-64
IBM: Linux on System z

Linux
注意: 特定のアーキテクチャにおけるLinuxの情報の違いについては、本文中に記載されています。

Oracle Solaris on SPARC(64-Bit)
Oracle Solaris on x86-64(64-bit)

Solaris
注意: 特定のアーキテクチャにおけるSolarisの情報の違いについては、本文中に記載されています。

ドキュメントへのアクセス

このリリースのドキュメントには、プラットフォーム固有のドキュメントおよび汎用製品のドキュメントがあります。プラットフォーム固有のドキュメントには、Oracle製品を特定のプラットフォームにインストール、構成および使用する方法が記載されています。ドキュメントには、Adobe Portable Document Format(PDF)形式とHTML形式があります。

インストール・メディアのプラットフォーム固有のドキュメントにアクセスするには、Webブラウザを使用して、トップレベル・ディレクトリにあるwelcome.htmlファイルを開きます。

次のURLからすべてのOracleドキュメントにアクセスできます。

http://docs.oracle.com/en/

注意:
プラットフォーム固有のドキュメントは、リリース時点のものです。Oracle Technology NetworkのWebサイトから最新の情報を入手することをお薦めします。

Oracle Database 11gリリース2(11.2)の新機能

この項では、Oracle Database 11gリリース2 (11.2)で使用可能な新機能について説明します。

Oracle Database 11gリリース2(11.2.0.3)の新機能

Oracle Database 11gリリース2 (11.2.0.3)の新機能を次に示します。

Oracle Solaris用TDEハードウェア・アクセラレーション

Oracle Database 11gリリース2 (11.2.0.3)以降では、TDEの暗号ハードウェア・アクセラレーションが、SPARC T3、SPARC T4、およびIntel Xeon (AES-NI搭載)で実行されているSolaris 11でも機能します。

Oracle Database 11gリリース2(11.2.0.2)の新機能

Oracle Database 11gリリース2 (11.2.0.2)の新機能を次に示します。

Linux用TDEハードウェア・アクセラレーション

透過的データ暗号化(TDE)では、データベース・ホスト・システムに暗号化および復号化処理を高速化する専用の暗号シリコンが搭載されているかどうかを自動的に検出します。検出されると、TDEは専用のシリコンを使用して暗号処理を実行し、暗号パフォーマンス全体を高速化します。

Oracle Database 11gリリース2 (11.2.0.2)では、TDEの暗号ハードウェア・アクセラレーションは、AES-NIを搭載したIntel Xeonでのみ使用でき、Oracle Linux 5およびRed Hat Enterprise Linux 5のLinux x86およびLinux x86-64に対応しています。

1 Oracle Databaseの管理

この章では、UNIXベースのオペレーティング・システムでOracle Databaseを管理する方法について説明します。内容は次のとおりです。

- 概要

- 環境変数

- 初期化パラメータ

- オペレーティング・システムのアカウントとグループ

- トレース・ファイルの使用

関連項目:
Oracle Databaseの管理に関するプラットフォーム固有の情報は、このマニュアルの付録を参照してください。

1.1 概要

Oracle Databaseを使用するには、Oracle Databaseの環境変数、パラメータおよびユーザー設定を設定する必要があります。この章では、Oracle Databaseの各種設定について説明します。

Oracle Databaseのファイルおよびプログラムでは、疑問符(?)は環境変数ORACLE_HOMEの値を表します。たとえば、Oracle Databaseでは、次のSQL文中の疑問符は、Oracleホーム・ディレクトリのフルパス名に展開されます。

SQL> ALTER TABLESPACE TEMP ADD DATAFILE '?/dbs/temp02.dbf' SIZE 200M

同様に、アットマーク(@)記号は環境変数ORACLE_SIDを表します。たとえば、ファイルが現行のインスタンスに属していることを示す場合は、次のコマンドを実行します。

SQL> ALTER TABLESPACE tablespace_name ADD DATAFILE tempfile@.dbf

Syslog監査証跡を作成して、管理アクティビティを追跡できます。

関連項目:
監査証跡の詳細は、『Oracle Databaseセキュリティ・ガイド』の、UNIXシステムでSyslog監査証跡を使用してシステム管理者を監査する方法に関する項を参照してください。

1.2 環境変数

この項では、通常使用されるOracle Databaseおよびオペレーティング・システムの環境変数について説明します。Oracle Databaseをインストールする前に、いくつかの環境変数を定義する必要があります。この項では、次の項目について説明します。

- Oracle Databaseの環境変数

- UNIXの環境変数

- 共通の環境設定

- システム・タイム・ゾーンの設定

環境変数の現在の設定値を表示するには、envコマンドを使用します。たとえば、環境変数ORACLE_SIDの値を表示するには、次のコマンドを実行します。

$ env | grep ORACLE_SID

すべての環境変数の現在の設定値を表示するには、envコマンドを次のように実行します。

$ env | more

1.2.1 Oracle Databaseの環境変数

表1-1に、Oracle Databaseで使用する一部の環境変数を示します。

表1-1 Oracle Databaseの環境変数

変数

項目

定義

NLS_LANG

機能

クライアント環境の言語、地域およびキャラクタ・セットを指定します。NLS_LANGで指定するクライアント・キャラクタ・セットは、端末または端末エミュレータのキャラクタ・セットと一致している必要があります。必要に応じて、非対話型バッチ・プログラムを起動する前にNLS_LANGを一時的にリセットして別のキャラクタ・セットに変更し、そのプログラムで処理されるファイルおよびスクリプトのキャラクタ・セットに一致させることができます。NLS_LANGで指定されたキャラクタ・セットがデータベースのキャラクタ・セットと異なる場合、そのキャラクタ・セットは自動的に変換されます。

この変数の値リストの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

構文

language_territory.characterset

例

french_france.we8iso8859p15

ORA_NLS10

機能

言語、地域、キャラクタ・セットおよび言語の定義ファイルが保存されているディレクトリを指定します。

構文

directory_path

例

$ORACLE_HOME/nls/data

ORA_TZFILE

機能

タイム・ゾーン・ファイルのフルパスおよびファイル名を指定します。Oracle Database Serverでは、常に大規模タイム・ゾーン・ファイル($ORACLE_HOME/oracore/zoneinfo/timezlrg_number.dat)が使用されます。クライアント側で小規模タイム・ゾーン・ファイルを使用する場合、この環境変数を小規模タイム・ゾーン・ファイルのフルパス($ORACLE_HOME/oracore/zoneinfo/timezone_number.dat)に設定する必要があります。クライアント側で小規模タイム・ゾーン・ファイルを使用する場合、アクセスするデータベースでは、必ず小規模タイム・ゾーン・ファイルで認識されるタイム・ゾーン・リージョンのみにデータが含まれるようにする必要があります。

構文

directory_path

例

$ORACLE_HOME/oracore/zoneinfo/timezlrg_11.dat

ORACLE_BASE

機能

Optimal Flexible Architectureに準拠したインストールのOracleディレクトリ構造の基本となるディレクトリを指定します。

構文

directory_path

例

/u01/app/oracle

ORACLE_HOME

機能

Oracleソフトウェアが格納されているディレクトリを指定します。

構文

directory_path

例

$ORACLE_BASE/product/11.2.0/dbhome_1

ORACLE_PATH

機能

SQL*PlusなどのOracleアプリケーションが使用するファイルの検索パスを指定します。ファイルのフルパス名が指定されていない場合やファイルが現行のディレクトリにない場合、Oracleアプリケーションでは、ORACLE_PATHを使用してそのファイルの場所を特定します。

構文

ディレクトリをコロンで区切ったリスト:

directory1:directory2:directory3

例

/u01/app/oracle/product/11.2.0/dbhome_1/bin:

注意: 最後にピリオドを付けることによって、検索パスに現行のディレクトリが追加されます。

ORACLE_SID

機能

Oracleシステムの識別子を指定します。

構文

英字で始まり、数字と英字で構成される文字列を指定します。システム識別子は、8文字以内で指定することをお薦めします。この環境変数の詳細は、『Oracle Databaseインストレーション・ガイド』を参照してください。

例

SAL1

ORACLE_TRACE

機能

インストール時のシェル・スクリプトのトレースを有効にします。この環境変数をTに設定した場合は、ほとんどのOracleシェル・スクリプトでset -xコマンドが使用されます。これによって、シェル・スクリプトの実行時にコマンドとそれらの引数が印刷されます。他の値を設定した場合、または値を設定しない場合、そのスクリプトでは、set -xコマンドが使用されません。

構文

TまたはT以外

例

T

ORAENV_ASK

機能

oraenvまたはcoraenvスクリプトで、環境変数ORACLE_SIDの値を入力するためのプロンプトを表示するかどうかを制御します。NOに設定した場合、環境変数ORACLE_SIDの値を入力するためのプロンプトは表示されません。他の値に設定した場合、または値を設定しない場合、スクリプトによって環境変数ORACLE_SIDの値を入力するためのプロンプトが表示されます。

構文

NOまたはNO以外

例

NO

SQLPATH

機能

SQL*Plusでのlogin.sqlファイルの検索先ディレクトリまたはディレクトリのリストを指定します。

構文

ディレクトリをコロンで区切ったリスト: directory1:directory2:directory3

例

/home:/home/oracle:/u01/oracle

TNS_ADMIN

機能

Oracle Net Services構成ファイルが格納されているディレクトリを指定します。

構文

directory_path

例

$ORACLE_HOME/network/admin

TWO_TASK

機能

接続文字列に使用するデフォルトの接続識別子を指定します。この環境変数が設定されている場合は、接続文字列に接続識別子を指定しないでください。たとえば、環境変数TWO_TASKがsalesに設定されている場合、次のコマンドを使用してデータベースに接続できます。

SQL> CONNECT USERNAME
Enter password: password

構文

任意の接続識別子

許容値

ネーミング・メソッドを使用して解決できる有効な接続識別子(tnsnames.oraファイルやディレクトリ・サーバーなど)

例

PRODDB_TCP

NLS_OS_CHARSET

機能

ファイル名およびユーザー名がオペレーティング・システムによりエンコードされるUNIXロケールのキャラクタ・セットに対応するOracleキャラクタ・セット名を指定します。UNIXロケール・キャラクタ・セットとOracleクライアントのキャラクタ・セットが異なる場合、環境変数NLS_OS_CHARSETを設定する必要があります。たとえば、NLS_LANGがSQLスクリプトのエンコードで使用する特定のキャラクタ・セットに設定されて、そのスクリプトがSQL*Plusセッションで実行される場合、これらの2つのキャラクタ・セットは異なる場合があります。通常、Oracleクライアントのキャラクタ・セットおよびオペレーティング・システムのキャラクタ・セットは同一で、NLS_OS_CHARSETを設定しなくでください。

構文

characterset

例

WE8ISO8859P1

注意:
競合を防ぐため、Oracle Databaseサーバーのプロセス名と同じ名前で環境変数を定義しないでください。Oracle Databaseサーバーのプロセス名には、ARCH、PMON、DBWRなどがあります。

1.2.2 UNIX環境変数

表1-2に、Oracle Databaseで使用するUNIX環境変数を示します。

表1-2 Oracle Databaseで使用する環境変数

変数

項目

定義

ADA_PATH(AIXのみ)

機能

Adaコンパイラが格納されているディレクトリを指定します。

構文

directory_path

例

/usr/lpp/powerada

ORA_FPU_PRECISION(Linux x86のみ)

機能

x86の浮動小数点ユニットの拡張精度を使用して計算が行われるプリコンパイルされたアプリケーションすべてについて、アプリケーションを実行する前にこの変数をEXTENDEDに設定する必要があります。

注意: この変数を設定すると、IEEE準拠ではない浮動小数点になります。したがって、My Oracle Support(以前のOracleMetaLink)Webサイトのnote 246916.1に記述されているデータ型BINARY_FLOATまたはBINARY_DOUBLEのいずれかを使用する場合、ORA_FPU_PRECISIONは設定しないでください。

https://support.oracle.com

CLASSPATH

機能

Javaアプリケーションで使用します。この環境変数に必要な設定は、Javaアプリケーションによって異なります。詳細は、Javaアプリケーション製品のドキュメントを参照してください。

構文

ディレクトリまたはファイルをコロンで区切ったリスト: directory1:directory2:file1:file2

例

デフォルトの設定はありません。CLASSPATHには、次のディレクトリが含まれている必要があります。

$ORACLE_HOME/jdk/jre/lib:$ORACLE_HOME/jlib

DISPLAY

機能

Xベースのツールで使用します。入出力に使用するディスプレイ・デバイスを指定します。詳細は、使用しているX Window Systemのドキュメントを参照してください。

構文

hostname:server[.screen]

hostnameはシステム名(IPアドレスまたは別名)、serverはサーバーの順次コード番号、screenは画面の順次コード番号です。使用するモニターが1つの場合は、サーバーと画面のどちらにも値0を使用します(0.0)。

注意: 使用するモニターが1つの場合、screenはオプションです。

例

135.287.222.12:0.0
bambi:0

HOME

機能

ユーザーのホーム・ディレクトリを指定します。

構文

directory_path

例

/home/oracle

LANGまたはLC_ALL

機能

メッセージなどの出力でオペレーティング・システムが使用する言語およびキャラクタ・セットを指定します。また、Oracle Universal Installer、Oracle Database Configuration AssistantなどのJavaでプログラムされているOracleツールでは、ユーザー・インタフェースの言語を判別するためにこの変数を使用することがあります。詳細は、オペレーティング・システムのドキュメントを参照してください。

LD_OPTIONS

機能

デフォルトのリンカー・オプションを指定します。この環境変数の詳細は、ldのmanページを参照してください。

LPDEST(Solarisのみ)

機能

デフォルトのプリンタの名前を指定します。

構文

string

例

docprinter

LD_LIBRARY_PATH

機能

UNIXおよびLinux上のライブラリの検索に使用するパスを指定する環境変数。環境変数の名前は、LIBPATH(AIXの場合)、SHLIB_PATH(HP-UXの場合)など、オペレーティング・システムにより異なる場合があります。

構文

ディレクトリをコロンで区切ったリスト: directory1:directory2:directory3

例

/usr/dt/lib:$ORACLE_HOME/lib

PATH

機能

シェルで、実行可能プログラムの場所を特定するために使用されます。$ORACLE_HOME/binディレクトリが含まれている必要があります。

構文

ディレクトリをコロンで区切ったリスト: directory1:directory2:directory3

例

/bin:/usr/bin:/usr/local/bin:/usr/bin/X11:$ORACLE_HOME/bin:
$HOME/bin:.

注意: 最後にピリオドを付けることによって、検索パスに現行のディレクトリが追加されます。

PRINTER

機能

デフォルトのプリンタの名前を指定します。

構文

string

例

docprinter

TEMP、TMPおよびTMPDIR

機能

一時ファイル用のデフォルト・ディレクトリを指定します。設定すると、一時ファイルを作成するツールは、指定したデフォルト・ディレクトリの1つに一時ファイルを作成します。

構文

directory_path

例

/u02/oracle/tmp

USER (HP-UX Itaniumシステムで接続にtelnetを使用する場合)

機能

ログインするユーザーの名前を指定します。

構文

string

例

oracle

1.2.3 共通の環境設定

この項では、デフォルト・シェルに応じてoraenvまたはcoraenvスクリプトを使用し、共通のオペレーティング・システム環境を設定する方法について説明します。

- Bourne、BashまたはKornシェルの場合は、oraenvコマンドを使用します。

- Cシェルの場合は、coraenvコマンドを使用します。

oraenvおよびcoraenvスクリプト・ファイル

oraenvおよびcoraenvスクリプトは、インストール時に作成されます。これらのスクリプトは、oratabファイルの内容に基づいて環境変数を設定し、次の機能を提供します。

- データベースの変更をすべてのユーザー・アカウントに反映して更新するための主な方法

- oratabファイルに指定されているデータベース間で切替えを行うためのメカニズム

開発システムからデータベースに対して頻繁に追加や削除を行ったり、同一システム上にインストールされた複数の異なるOracle Database間でユーザーが切替えを行う場合があります。oraenvまたはcoraenvスクリプトを使用すると、ユーザー・アカウントが更新されていることを確認し、データベース間で切替えを行うことができます。

注意:
oraenvまたはcoraenvスクリプトは、Oracleソフトウェア所有者(通常はoracle)ユーザーのシェル起動スクリプトからはコールしないでください。これらのスクリプトでは値の入力を促すプロンプトが表示されるため、システムの起動時にdbstartスクリプトが自動的にデータベースを起動できなくなります。

oraenvまたはcoraenvスクリプトは通常、ユーザーのシェル起動ファイル(.profileまたは.loginなど)からコールされます。これは、環境変数ORACLE_SIDおよびORACLE_HOMEを設定し、$ORACLE_HOME/binディレクトリを環境変数PATHの設定に含めます。データベース間で切替えを行う場合に、oraenvまたはcoraenvスクリプトを実行して、これらの環境変数を設定できます。

注意:
これらのスクリプトのいずれかを実行するには、適切なコマンドを使用します。

- coraenvスクリプトの場合:

% source /usr/local/bin/coraenv

- oraenvスクリプトの場合:

$ . /usr/local/bin/oraenv

ローカルbinディレクトリ

oraenv、coraenvおよびdbhomeスクリプトを含むディレクトリは、ローカルbinディレクトリと呼ばれます。すべてのデータベース・ユーザーは、このディレクトリへの読取りアクセス権が必要です。ローカルbinディレクトリのパスをユーザーの環境変数PATHの設定に追加してください。インストール後にroot.shスクリプトを実行すると、ローカルbinディレクトリのパスを要求するプロンプトが表示されます。指定したディレクトリに、oraenv、coraenvおよびdbhomeスクリプトが自動的にコピーされます。デフォルトのローカルbinディレクトリは、/usr/local/binです。root.shスクリプトを実行しない場合は、手動でoraenvまたはcoraenvスクリプトとdbhomeスクリプトを、$ORACLE_HOME/binディレクトリからローカルbinディレクトリにコピーできます。

1.2.4 システム・タイム・ゾーンの設定

環境変数TZは、タイム・ゾーンを設定します。これによって、時間を夏時間に変更したり、別のタイム・ゾーンにすることができます。

関連項目:
データベース・タイムゾーンの設定の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』および『Oracle Database管理者ガイド』を参照してください。

1.3 初期化パラメータ

次の各項では、Oracle Database初期化パラメータについて説明します。

- DB_BLOCK_SIZE初期化パラメータ

- ASM_DISKSTRING初期化パラメータ

- LOG_ARCHIVE_DEST_n初期化パラメータ

- DISK_ASYNCH_IO初期化パラメータ(HP-UX)

1.3.1 DB_BLOCK_SIZE初期化パラメータ

DB_BLOCK_SIZE初期化パラメータは、データベースの標準ブロック・サイズを指定します。このブロック・サイズはSYSTEM表領域に使用され、その他の表領域ではデフォルトで使用されます。

DB_BLOCK_SIZEに設定できる最大値は、Linux x86の場合16KBです。その他のプラットフォームの場合、32KBです。

注意:
DB_BLOCK_SIZE初期化パラメータの値は、データベースの作成後に変更することはできません。

1.3.2 ASM_DISKSTRING初期化パラメータ

注意:
ASM_DISKSTRING初期化パラメータをサポートしているのは、自動ストレージ管理インスタンスのみです。

ASM_DISKSTRING初期化パラメータに値を割り当てるための構文は、次のとおりです。

ASM_DISKSTRING = 'path1'[,'path2', . . .]

この構文のpathnは、RAWデバイスへのパスです。パスを指定する際は、ワイルドカード文字を使用できます。

表1-3に、ASM_DISKSTRING初期化パラメータに対するプラットフォーム固有のデフォルト値を示します。

表1-3 ASM_DISKSTRING初期化パラメータのデフォルト値

プラットフォーム

デフォルト検索文字列

AIX

/dev/rhdisk*

HP-UX

/dev/rdisk/*

Solaris

/dev/rdsk/*

Linux

/dev/raw/*

1.3.3 LOG_ARCHIVE_DEST_n初期化パラメータ

LOG_ARCHIVE_DEST_n初期化パラメータのASYNCに設定できる最大値は、UNIXプラットフォームでは次の表に示すように異なります。

プラットフォーム

最大値

HP-UX

51200

その他のオペレーティング・システム

102400

1.3.4 DISK_ASYNCH_IO初期化パラメータ(HP-UX)

DISK_ASYNCH_IO初期化パラメータは、データベース・ファイルがRAWディスクとファイル・システムのどちらに置かれるかを決定します。非同期I/Oは、データベース・ファイルの記憶域オプションとしてRAWパーティションを使用する自動ストレージ管理ディスク・グループでのみ使用できます。DISK_ASYNCH_IOパラメータには、ファイルが存在する場所に応じてTRUEまたはFALSEを設定できます。デフォルトでは、この値はTRUEに設定されます。

注意:
DISK_ASYNCH_IOパラメータは、データベース・ファイルがファイル・システム上に置かれる場合、FALSEに設定する必要があります。このパラメータをTRUEに設定する必要があるのは、データベース・ファイルがRAWパーティション上に置かれる場合のみです。

1.4 オペレーティング・システムのアカウントとグループ

この項では、次のOracle Databaseに必要な特殊なオペレーティング・システムのアカウントとグループについて説明します。

- オペレーティング・システム・アカウントの追加

- Oracleユーザーのアカウントの構成

1.4.1 オペレーティング・システム・アカウントの追加

オペレーティング・システム・アカウントは、必要に応じて作成します。管理者権限を使用してデータベースに接続するには、ユーザーがOSDBAまたはOSOPERグループのメンバーである必要があります。

1.4.2 Oracleユーザーのアカウントの構成

oracleユーザーおよびOracleユーザーのオペレーティング・システム・アカウントの起動ファイルを更新し、環境ファイルに適切な環境変数を指定します。

Bourne、BashまたはKornシェルの場合は、環境変数を.profileファイルに追加します(Red Hat Enterprise LinuxのBashシェルの場合は、.bash_profileファイルに追加します)。

Cシェルの場合は、環境変数を.loginファイルに追加します。

注意:
oraenvまたはcoraenvスクリプトを使用すると、Oracleユーザーのアカウントが更新されたことを確認できます。

1.5 トレース・ファイルの使用

この項では、操作上の問題を簡単に診断して解決できるように、Oracle Databaseが作成するトレース(ダンプ)について説明します。

各サーバーとバックグラウンド・プロセスでは、トレース・ファイルに情報を書き込みます。プロセスが内部エラーを検出すると、そのエラーに関する情報がトレース・ファイルに書き込まれます。トレース・ファイルのファイル名の形式はsid_processname_unixpid.trcです。各項目の説明は次のとおりです。

- sidは、インスタンスのシステム識別子です。

- processnameは、トレース・ファイルを作成したOracle Databaseプロセスを識別するための、3から4文字の短縮されたプロセス名(pmon、dbwr、ora、recoなど)です。

- unixpidは、オペレーティング・システム・プロセスのID番号です。

次に、トレース・ファイル名のサンプルを示します。

$ORACLE_BASE/diag/rdbms/mydb/mydb/trace/test_lgwr_1237.trc

トレース・ファイルのサイズはMAX_DUMP_FILE_SIZE初期化パラメータで制限されます。デフォルトでは、これはUNLIMITEDに設定され、トレース・ファイルは無制限に大きくなります。UNLIMITED以外の明示的な値に設定した場合、トレース・ファイルは複数のセグメントに分割されます。

2 Oracleソフトウェアの停止と起動

この章では、Oracle Databaseプロセスを識別する方法と、プロセスを停止および再起動する基本的な方法について説明します。また、Oracle Databaseの起動と停止を自動化する方法についても説明します。内容は次のとおりです。

- Oracle Restart

- Oracleプロセスの停止と起動

関連項目:
SRVCTLコマンドの詳細は、『Oracle Database管理者ガイド』および『Oracle Automatic Storage Management管理者ガイド』を参照してください。

2.1 Oracle Restart

Oracle Database 11gリリース2(11.2)から、データベースの起動と停止を自動化するために使用していたdbstartおよびdbshutスクリプトは、非推奨になりました。ハードウェア障害またはソフトウェア障害の発生後、あるいはデータベース・ホスト・コンピュータの再起動時に、Oracle Restart機能を使用してOracle Databaseを構成し、データベース、リスナー、Oracle Automatic Storage Management(Oracle ASM)およびその他のOracleコンポーネントを自動的に再起動します。

注意:
Oracle Restartを使用する場合、コマンドライン・インタフェースであるサービス制御ユーティリティ(SRVCTL)を使用して、Oracleプロセス(データベース・インスタンス、リスナー、ASMインスタンス)を管理できます。SRVCTLを使用すると、Oracle Restart構成の管理、Oracle Restartで管理されるプロセスのステータスの確認およびOracle Databaseなどのプロセスの起動または停止が可能になります。SRVCTLは、スタンドアロン・サーバーおよびOracle Clusterwareのあるクラスタ上のOracle Restartを使用する単一インスタンス・データベースをサポートするように拡張されました。

関連項目:
自動再起動の構成の詳細は、『Oracle Database管理者ガイド』のOracle Databaseの自動再起動の構成に関する説明を参照してください

2.2 Oracleプロセスの停止と起動

この項では、Oracleプロセスを停止および起動する方法について説明します。内容は次のとおりです。

- Oracle Databaseインスタンスおよび自動ストレージ管理インスタンスの停止と起動

- Oracle Restartの停止と起動

- Oracle Enterprise Manager Database Controlの停止と起動

- Oracle Management Agentの停止と起動

2.2.1 Oracle Databaseインスタンスおよび自動ストレージ管理インスタンスの停止と起動

この項では、Oracle Databaseインスタンスおよび自動ストレージ管理インスタンスを停止および起動する方法について説明します。

2.2.1.1 Oracle Databaseインスタンスまたは自動ストレージ管理インスタンスの停止

注意:
自動ストレージ管理を使用して記憶域を管理しているOracle Databaseインスタンスをすべて停止するまで、自動ストレージ管理インスタンスは停止しないでください。

Oracle Databaseインスタンスまたは自動ストレージ管理インスタンスを停止するには、次の手順を実行します。

1. 停止する必要があるインスタンスのSIDおよびOracleホーム・ディレクトリを識別する場合は、次のコマンドを実行します。

Solarisの場合

$ cat /var/opt/oracle/oratab

その他のオペレーティング・システムの場合

$ cat /etc/oratab

oratabファイルには、次のような行が含まれています。これによって、システム上の各データベース・インスタンスまたは自動ストレージ管理インスタンスのSIDおよび対応するOracleホーム・ディレクトリを識別します。

sid:oracle_home_directory:[Y|N]

注意:
自動ストレージ管理インスタンスのSIDには、1文字目にプラス記号(+)を使用することをお薦めします。

2. デフォルト・シェルに応じてoraenvまたはcoraenvスクリプトを実行し、停止する必要があるインスタンスの環境変数を設定します。

- Bourne、BashまたはKornシェルの場合

$ . /usr/local/bin/oraenv

- Cシェルの場合

% source /usr/local/bin/coraenv

プロンプトが表示されたら、インスタンスのSIDを指定します。

3. 次のコマンドを実行し、インスタンスを停止します。

$ sqlplus
SQL> CONNECT SYS as SYSASM
Enter password: sys_password
SQL> SHUTDOWN NORMAL

インスタンスの停止後、SQL*Plusを終了できます。

2.2.1.2 Oracle Databaseインスタンスまたは自動ストレージ管理インスタンスの再起動

注意:
データベース・インスタンスで記憶域管理に自動ストレージ管理を使用している場合は、データベース・インスタンスを起動する前に、自動ストレージ管理インスタンスを起動する必要があります。

Oracle Databaseインスタンスまたは自動ストレージ管理インスタンスを再起動するには、次の手順を実行します。

1. 必要に応じて、手順1と2を繰り返し、環境変数ORACLE_SIDおよびORACLE_HOMEを設定して、起動するインスタンスのSIDおよびOracleホーム・ディレクトリを識別します。

2. 次のコマンドを実行し、インスタンスを起動します。

$ sqlplus
SQL> CONNECT SYS as SYSASM
Enter password: sys_password
SQL> STARTUP

インスタンスの起動後、SQL*Plusを終了できます。

2.2.2 Oracle Restartの停止と起動

CRSCTLユーティリティは、Oracle Restartの起動と停止に役立ちます。Oracle Restartの起動または停止のために、srvctlコマンドは使用されなくなりました。

関連項目:
Oracle Restartの起動と停止の詳細は、『Oracle Database管理者ガイド』のOracle Restartの起動と停止に関する説明を参照してください

2.2.3 Oracle Enterprise Manager Database Controlの停止と起動

この項では、Oracle Enterprise Manager Database Controlを停止および起動する方法について説明します。

Oracle Enterprise Manager Database Controlの停止

Oracle Enterprise Manager Database Controlを停止するには、次の手順を実行します。

1. デフォルト・シェルに応じてoraenvまたはcoraenvスクリプトを実行し、停止するDatabase Controlで管理されているデータベースの環境を設定します。

- coraenvスクリプトの場合:

% source /usr/local/bin/coraenv

- oraenvスクリプトの場合:

$ . /usr/local/bin/oraenv

2. 次のコマンドを実行し、Database Controlを停止します。

$ $ORACLE_HOME/bin/emctl stop dbconsole

Oracle Enterprise Manager Database Controlの起動

Database Controlを起動するには、次の手順を実行します。

1. 環境変数ORACLE_SIDおよびORACLE_HOMEを設定し、起動するDatabase ControlのSIDおよびOracleホーム・ディレクトリを識別します。

- Bourne、BashまたはKornシェルの場合

$ ORACLE_HOME=oracle_home
$ ORACLE_SID=sid
$ export ORACLE_HOME ORACLE_SID

- Cシェルの場合

% setenv ORACLE_HOME oracle_home
% setenv ORACLE_SID sid

2. 次のコマンドを実行し、Database Controlを起動します。

$ $ORACLE_HOME/bin/emctl start dbconsole

2.2.4 Oracle Management Agentの停止と起動

Oracle Enterprise Manager Grid Controlを使用して複数のOracle製品を中央から管理する場合は、Oracle Management Agentが各ホスト・システムにインストールされている必要があります。通常、Oracle Management Agentは固有のOracleホーム・ディレクトリにインストールされます。

この項では、Oracle Management Agentを停止および起動する方法について説明します。

Oracle Management Agentの停止

Oracle Management Agentを停止するには、次の手順を実行します。

1. 次のコマンドを実行し、Oracle Management AgentのOracleホーム・ディレクトリを判別します。

$ ps -ef | grep emagent

このコマンドは、Oracle Management Agentプロセスに関する情報を表示します。このコマンドの出力は、次のようになります。

94248 ?? I 0:00.18 oracle_home/agent/bin/emagent ...

2. 必要に応じて環境変数ORACLE_HOMEを設定し、Oracle Management AgentのOracleホーム・ディレクトリを指定します。

- Bourne、BashまたはKornシェルの場合

$ ORACLE_HOME=oracle_home
$ export ORACLE_HOME

- Cシェルの場合

% setenv ORACLE_HOME oracle_home

3. 次のコマンドを実行し、Oracle Management Agentを停止します。

$ $ORACLE_HOME/agent/bin/emctl stop agent

Oracle Management Agentの起動

Oracle Management Agentを起動するには、次の手順を実行します。

1. 必要に応じて環境変数ORACLE_HOMEを設定し、Oracle Management AgentのOracleホーム・ディレクトリを指定します。

- Bourne、BashまたはKornシェルの場合

$ ORACLE_HOME=oracle_home
$ export ORACLE_HOME

- Cシェルの場合

% setenv ORACLE_HOME oracle_home

2. 次のコマンドを実行し、Oracle Management Agentを起動します。

$ $ORACLE_HOME/agent/bin/emctl start agent

3 Oracle Databaseの構成

この章では、Oracle製品に対するOracle Databaseの構成方法について説明します。内容は次のとおりです。

- スタンドアロン・ツールとしてのコンフィギュレーション・アシスタントの使用

- 実行可能ファイルの再リンク

3.1 スタンドアロン・ツールとしてのコンフィギュレーション・アシスタントの使用

コンフィギュレーション・アシスタントは通常、インストール・セッション中に実行されますが、スタンドアロン・モードでも実行できます。Oracle Universal Installerと同様にすべてのアシスタントは、応答ファイルを使用して非対話方式で起動できます。

この項では、次の項目について説明します。

- Oracle Net Configuration Assistantの使用

- Oracle Database Upgrade Assistantの使用

- Oracle Database Configuration Assistantの使用

- 新規またはアップグレード済データベースの構成

3.1.1 Oracle Net Configuration Assistantの使用

Oracle Net ServerまたはOracle Net Clientをインストールすると、Oracle Universal InstallerによってOracle Net Configuration Assistantが自動的に起動されます。

Oracle Database Clientのインストールを個別に実行した場合、Oracle Net Configuration Assistantが、インストール時の選択内容に沿う構成を自動的に作成します。Oracle Universal InstallerはOracle Net Configuration Assistantを自動的に実行し、クライアント・インストールの$ORACLE_HOME/network/adminディレクトリにあるローカル・ネーミング・ファイル内にネット・サービス名を設定します。

インストールの完了後、Oracle Net Configuration Assistantを使用して詳細な構成を作成できます。次のコマンドを入力します。

$ $ORACLE_HOME/bin/netca

注意:
Oracle Database Configuration Assistantを使用してデータベースを作成すると、ネットワーク構成ファイルが自動的に更新され、新しいデータベースに関する情報が追加されます。

3.1.2 Oracle Database Upgrade Assistantの使用

Oracle Databaseのインストール時に、データベースを以前のリリースから現在のリリースにアップグレードできます。ただし、インストール時にデータベースをアップグレードしない場合、または複数のデータベースをアップグレードする場合は、インストール後にOracle Database Upgrade Assistantを実行できます。

Oracle Database 11gをインストールし、インストール時にデータベースのアップグレードを選択しなかった場合は、マウントする前にデータベースをアップグレードする必要があります。

Oracle Database Upgrade Assistantを起動するには、次のコマンドを実行します。

$ $ORACLE_HOME/bin/dbua

Oracle Database Upgrade Assistantで使用できるコマンドライン・オプションに関する情報を取得するには、次のように、-helpまたは-hコマンドライン引数を使用します。

$ $ORACLE_HOME/bin/dbua -help

関連項目:
アップグレードの詳細は、『Oracle Databaseインストレーション・ガイド』および『Oracle Databaseアップグレード・ガイド』を参照してください。

3.1.3 Oracle Database Configuration Assistantの使用

Oracle Database Configuration Assistantを使用すると、次のことができます。

- デフォルトの、またはカスタマイズされたデータベースの作成

- Oracle製品を使用する既存のデータベースの構成

- 自動ストレージ管理のディスク・グループの作成

- 後のデータベース作成時に検査、修正および実行できるシェル・スクリプトとSQLスクリプトのセットの生成

Oracle Database Configuration Assistantを起動するには、次のコマンドを実行します。

$ $ORACLE_HOME/bin/dbca

Oracle Database Configuration Assistantで使用できるコマンドライン・オプションに関する情報を取得するには、次のように、-helpまたは-hコマンドライン引数を使用します。

$ $ORACLE_HOME/bin/dbca -help

3.1.4 新規またはアップグレード済データベースの構成

データベースを作成またはアップグレードした後は、utlrp.sqlスクリプトを実行することをお薦めします。このスクリプトを実行すると、無効な状態にある、パッケージ、プロシージャ、タイプなどのPL/SQLモジュールがすべて再コンパイルされます。これはオプションの手順ですが、後日ではなく、データベースの作成時に実行することをお薦めします。

utlrp.sqlスクリプトを実行するには、次の手順を実行します。

1. ユーザーをoracleに切り替えます。

2. oraenvまたはcoraenvスクリプトを使用して、utlrp.sqlスクリプトを実行するデータベースの環境を設定します。

- Bourne、BashまたはKornシェルの場合

$ . /usr/local/bin/oraenv

- Cシェルの場合

% source /usr/local/bin/coraenv

プロンプトが表示されたら、データベースのSIDを指定します。

3. 次のコマンドを実行し、SQL*Plusを起動します。

$ sqlplus "/ AS SYSDBA"

4. 必要に応じて次のコマンドを実行し、データベースを起動します。

SQL> STARTUP

5. utlrp.sqlスクリプトを実行します。

SQL> @?/rdbms/admin/utlrp.sql

3.2 実行可能ファイルの再リンク

$ORACLE_HOME/binディレクトリ内のrelinkシェル・スクリプトを使用して、製品の実行可能ファイルを手動で再リンクできます。製品の実行可能ファイルの再リンクは、オペレーティング・システムのパッチを適用するたびに、またはオペレーティング・システムのアップグレード後に必要となります。

注意:
実行可能ファイルの再リンク前に、Oracleホーム・ディレクトリで実行されている実行可能ファイルのうち、再リンクする実行可能ファイルをすべて停止する必要があります。また、Oracle共有ライブラリにリンクされているアプリケーションも停止してください。
relinkスクリプトは引数をとりません。

relinkスクリプトを使用すると、すべてのOracle製品の実行可能ファイルを再リンクできますが、その方法はOracleホーム・ディレクトリにインストールされている製品によって異なります。

関連項目:
自動ストレージ管理で再リンク・スクリプトを使用する方法の詳細は、『Oracle Databaseインストレーション・ガイド for Linux』のSQL*PlusでのOracle Databaseへのアクセスに関する説明を参照してください。

製品の実行可能ファイルを再リンクするには、次のコマンドを実行します。

$ relink

4 SQL*Plusの管理

この章では、SQL*Plusの管理方法について説明します。内容は次のとおりです。

- コマンドラインSQL*Plusの管理

- コマンドラインSQL*Plusの使用

- SQL*Plusの制限事項

関連項目:
SQL*Plusの詳細は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。

4.1 コマンドラインSQL*Plusの管理

この項では、コマンドラインSQL*Plusの管理方法について説明します。例では、SQL*Plusにより、疑問符(?)は環境変数ORACLE_HOMEの値に置き換えられています。

- 設定ファイルの使用

- PRODUCT_USER_PROFILE表の使用

- Oracle Databaseサンプル・スキーマの使用

- SQL*Plusのコマンドライン・ヘルプのインストールと削除

4.1.1 設定ファイルの使用

SQL*Plusを起動すると、最初にサイト・プロファイル設定ファイルglogin.sqlが実行され、次にユーザー・プロファイル設定ファイルlogin.sqlが実行されます。

サイト・プロファイル・ファイルの使用

グローバルなサイト・プロファイル・ファイルは、$ORACLE_HOME/sqlplus/admin/glogin.sqlです。この場所にサイト・プロファイル・ファイルが存在する場合は、SQL*Plusのインストール時にそのファイルが上書きされます。SQL*Plusを削除すると、そのサイト・プロファイル・ファイルも削除されます。

ユーザー・プロファイル・ファイルの使用

ユーザー・プロファイル・ファイルは、login.sqlです。SQL*Plusは、最初に現行のディレクトリを検索し、次に環境変数SQLPATHで指定したディレクトリを検索してこのファイルを検出します。この環境変数の値は、ディレクトリをコロンで区切ったリストです。SQL*Plusでは、これらのディレクトリを環境変数SQLPATHにリストされている順序で検索し、login.sqlファイルを検出します。

login.sqlファイルに設定されているオプションは、glogin.sqlファイルに設定されているオプションよりも優先されます。

関連項目:
プロファイル・ファイルの詳細は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。

4.1.2 PRODUCT_USER_PROFILE表の使用

Oracle Databaseには、指定したSQLコマンドやSQL*Plusコマンドを無効にするためのPRODUCT_USER_PROFILE表が用意されています。この表は、事前構成済データベースをインストールするインストール・タイプを選択した場合に、自動的に作成されます。

関連項目:
インストール・オプションの詳細は、『Oracle Databaseインストレーション・ガイド』を参照してください。

PRODUCT_USER_PROFILE表を再作成するには、SYSTEMスキーマにある$ORACLE_HOME/sqlplus/admin/pupbld.sqlスクリプトを実行します。たとえば、次のコマンドを実行します。SYSTEM_PASSWORDは、SYSTEMユーザーのパスワードです。

$ sqlplus
SQL> CONNECT SYSTEM
Enter password: system_password
SQL> @?/sqlplus/admin/pupbld.sql

また、$ORACLE_HOME/bin/pupbldシェル・スクリプトを使用して、手動でPRODUCT_USER_PROFILE表をSYSTEMスキーマに再作成することもできます。このスクリプトは、SYSTEMパスワードを要求するプロンプトを表示します。プロンプトを表示せずにpupbldスクリプトを実行する場合は、環境変数SYSTEM_PASSにSYSTEMユーザー名とパスワードを設定します。

4.1.3 Oracle Databaseサンプル・スキーマの使用

Oracle Databaseをインストールするか、またはOracle Database Configuration Assistantを使用してデータベースを作成する場合は、Oracle Databaseサンプル・スキーマをインストールできます。

関連項目:
Oracle Databaseサンプル・スキーマのインストールと使用方法は、『Oracle Databaseサンプル・スキーマ』を参照してください。

4.1.4 SQL*Plusのコマンドライン・ヘルプのインストールと削除

この項では、SQL*Plusのコマンドライン・ヘルプのインストール方法と削除方法について説明します。

- SQL*Plusのコマンドライン・ヘルプのインストール

- SQL*Plusのコマンドライン・ヘルプの削除

関連項目:
SQL*Plusのコマンドライン・ヘルプの詳細は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。

4.1.4.1 SQL*Plusのコマンドライン・ヘルプのインストール

SQL*Plusのコマンドライン・ヘルプは、次の3つの方法でインストールできます。

- 事前構成済データベースのインストールを完了します。
インストールの一部として事前構成済データベースをインストールすると、SQL*Plusのコマンドライン・ヘルプがSYSTEMスキーマに自動的にインストールされます。

- $ORACLE_HOME/bin/helpinsシェル・スクリプトを使用して、SYSTEMスキーマにコマンドライン・ヘルプを手動でインストールします。
helpinsスクリプトは、SYSTEMパスワードを要求するプロンプトを表示します。プロンプトを表示せずにこのスクリプトを実行する場合は、環境変数SYSTEM_PASSにSYSTEMユーザー名とパスワードを設定します。次に例を示します。

- Bourne、BashまたはKornシェルの場合

$ SYSTEM_PASS=SYSTEM/system_password; export SYSTEM_PASS

- Cシェルの場合

% setenv SYSTEM_PASS SYSTEM/system_password

- $ORACLE_HOME/sqlplus/admin/help/helpbld.sqlスクリプトを使用して、SYSTEMスキーマにコマンドライン・ヘルプを手動でインストールします。
たとえば、次のコマンドを実行します。system_passwordは、SYSTEMユーザーのパスワードです。

$ sqlplus
SQL> CONNECT SYSTEM
Enter password: system_password
SQL> @?/sqlplus/admin/help/helpbld.sql ?/sqlplus/admin/help helpus.sql

注意:
helpinsシェル・スクリプトおよびhelpbld.sqlスクリプトは、新しい表を作成する前に、既存のコマンドライン・ヘルプの表を削除します。

4.1.4.2 SQL*Plusのコマンドライン・ヘルプの削除

SYSTEMスキーマからSQL*Plusのコマンドライン・ヘルプの表を手動で削除するには、$ORACLE_HOME/sqlplus/admin/help/helpdrop.sqlスクリプトを実行します。このスクリプトには、次のコマンドを実行します。system_passwordは、SYSTEMユーザーのパスワードです。

$ sqlplus
SQL> CONNECT SYSTEM
Enter password: system_password
SQL> @?/sqlplus/admin/help/helpdrop.sql

4.2 コマンドラインSQL*Plusの使用

この項では、コマンドラインSQL*Plusの使用方法について説明します。内容は次のとおりです。

- SQL*Plusからのシステム・エディタの使用

- SQL*Plusからのオペレーティング・システム・コマンドの実行

- SQL*Plusへの割込み

- SPOOLコマンドの使用

4.2.1 SQL*Plusからのシステム・エディタの使用

SQL*PlusプロンプトでEDまたはEDITコマンドを実行すると、ed、emacs、ned、viなどのオペレーティング・システム・エディタが起動します。ただし、環境変数PATHには、エディタの実行可能ファイルが格納されているディレクトリを指定する必要があります。

エディタを起動すると、現行のSQLバッファがエディタに格納されます。エディタを終了すると、変更されたSQLバッファがSQL*Plusに戻されます。

SQL*Plusの_EDITOR変数を定義することにより、起動するエディタを指定できます。この変数は、glogin.sqlサイト・プロファイルまたはlogin.sqlユーザー・プロファイルに定義できます。また、SQL*Plusセッション時に定義することもできます。たとえば、デフォルト・エディタをviに設定するには、次のコマンドを実行します。

SQL> DEFINE _EDITOR=vi

_EDITOR変数を設定しない場合は、環境変数EDITORまたはVISUALのいずれかの値が使用されます。両方の環境変数が設定されている場合は、環境変数EDITORの値が使用されます。_EDITOR、EDITORおよびVISUALのいずれも指定されていない場合、デフォルト・エディタはedになります。

エディタを起動すると、SQL*Plusは一時ファイルafiedt.bufを使用してエディタにテキストを渡します。SET EDITFILEコマンドを使用すると、別のファイル名を指定できます。次に例を示します。

SQL> SET EDITFILE /tmp/myfile.sql

SQL*Plusは、一時ファイルを削除しません。

4.2.2 SQL*Plusからのオペレーティング・システム・コマンドの実行

SQL*Plusプロンプトの後の最初の文字としてHOSTコマンドまたは感嘆符(!)を使用すると、後続の文字がサブシェルに渡されます。オペレーティング・システム・コマンドを実行するときに使用するシェルは、環境変数SHELLによって設定されます。デフォルト・シェルはBourneシェルです。シェルが実行できない場合は、SQL*Plusによりエラー・メッセージが表示されます。

SQL*Plusに戻るには、exitコマンドを実行するか、[Ctrl]+[D]を押します。

たとえば、1つのコマンドを実行するには、次のコマンド構文を使用します。

SQL> ! command

この例のcommandは、実行するオペレーティング・システム・コマンドです。

SQL*Plusから複数のオペレーティング・システム・コマンドを実行するには、HOSTまたは!コマンドを実行します。オペレーティング・システム・プロンプトに戻るには、[Enter]を押します。

4.2.3 SQL*Plusへの割込み

SQL*Plusの実行中、[Ctrl]+[C]を押すと、レコードのスクロール表示を停止したり、SQL文を終了できます。

4.2.4 SPOOLコマンドの使用

SPOOLコマンドで生成されるファイルのデフォルトのファイル名拡張子は、.lstです。この拡張子を変更するには、ピリオド(.)を含めたスプール・ファイル名を指定します。たとえば、次のように入力します。

SQL> SPOOL query.txt

4.3 SQL*Plusの制限事項

この項では、次のSQL*Plusの制限事項を説明します。

- ウィンドウのサイズ変更

- リターン・コード

- パスワードの非表示

4.3.1 ウィンドウのサイズ変更

SQL*Plusのシステム変数LINESIZEおよびPAGESIZEのデフォルト値では、ウィンドウのサイズは自動的に調整されません。

4.3.2 リターン・コード

オペレーティング・システムのリターン・コードは1バイトですが、Oracleエラー・コードを返すには、1バイトでは不十分です。リターン・コードの範囲は、0から255です。

4.3.3 パスワードの非表示

環境変数SYSTEM_PASSにSYSTEMユーザーのユーザー名とパスワードを設定した場合は、psコマンドの出力にこの情報が表示される場合があります。権限のないアクセスを防ぐため、SQL*Plusによってプロンプトが表示された場合のみSYSTEMパスワードを入力してください。

スクリプトを自動的に実行する場合は、パスワードの格納が不要な認証方法の使用を考慮してください。たとえば、Oracle Databaseへの外部認証ログインなどがあります。セキュリティの低い環境では、スクリプト・ファイルにオペレーティング・システム・パイプを使用して、パスワードをSQL*Plusに渡すことを検討してください。次に例を示します。

$ echo system_password | sqlplus SYSTEM @MYSCRIPT

あるいは、次のコマンドを実行します。

$ sqlplus <<EOF
SYSTEM/system_password
SELECT ...
EXIT
EOF

この例のsystem_passwordは、SYSTEMユーザーのパスワードです。

5 Oracle Net Servicesの構成

この章では、Oracle Net Servicesを構成する方法について説明します。内容は次のとおりです。

- Oracle Net Services構成ファイルの保存場所

- Adaptersユーティリティ

- Oracle Protocol Support

- TCP/IPまたはSecure Sockets Layer付きTCP/IP用のリスナーの設定

関連項目:
Oracle Net Servicesの詳細は、『Oracle Database Net Services管理者ガイド』を参照してください。

5.1 Oracle Net Services構成ファイルの保存場所

Oracle Net Services構成ファイルは、多くの場合、$ORACLE_HOME/network/adminディレクトリにあります。ファイルのタイプに応じて、Oracle Netは異なる検索順序でファイルを検出します。

sqlnet.oraおよびldap.oraの各ファイルの検索順序は、次のとおりです。

1. 環境変数TNS_ADMINで指定したディレクトリ(この環境変数が設定されている場合)

2. $ORACLE_HOME/network/adminディレクトリ

cman.ora、listener.oraおよびtnsnames.oraの各ファイルの検索順序は、次のとおりです。

1. 環境変数TNS_ADMINで指定したディレクトリ(この環境変数が設定されている場合)

2. 次のいずれかのディレクトリ

- Solarisの場合

/var/opt/oracle

- その他のプラットフォームの場合

/etc

3. $ORACLE_HOME/network/adminディレクトリ

一部のシステム・レベルの構成ファイルでは、対応するユーザー・レベルの構成ファイル(ユーザーのホーム・ディレクトリに格納されている)を作成できます。ユーザー・レベルのファイルの設定によって、システム・レベルのファイルの設定が上書きされます。次の表に、システム・レベルの構成ファイルとそれに対応するユーザー・レベルの構成ファイルを示します。

システム・レベルの構成ファイル

ユーザー・レベルの構成ファイル

sqlnet.ora

$HOME/.sqlnet.ora

tnsnames.ora

$HOME/.tnsnames.ora

サンプル構成ファイル

$ORACLE_HOME/network/admin/samplesディレクトリには、cman.ora、listener.ora、sqlnet.ora、tnsnames.oraの各構成ファイルのサンプルが含まれています。

注意:
cman.oraファイルがインストールされるのは、カスタム・インストールの一部としてConnection Managerを選択した場合のみです。

5.2 Adaptersユーティリティ

システムでOracle Databaseがサポートしているトランスポート・プロトコル、ネーミング・メソッドおよびOracle Advanced Securityのオプションを表示する場合は、adaptersユーティリティを使用します。adaptersユーティリティを使用するには、次のコマンドを実行します。

$ cd $ORACLE_HOME/bin
$ adapters ./oracle

Oracle Database Clientシステムのadaptersユーティリティでは、次のような出力が表示されます。

Oracle Net transport protocols linked with ./oracle are

IPC
BEQ
TCP/IP
SSL
RAW

Oracle Net naming methods linked with ./oracle are:

Local Naming (tnsnames.ora)
Oracle Directory Naming
Oracle Host Naming
NIS Naming

Oracle Advanced Security options linked with ./oracle are:

RC4 40-bit encryption
RC4 128-bit encryption
RC4 256-bit encryption
DES40 40-bit encryption
DES 56-bit encryption
3DES 112-bit encryption
3DES 168-bit encryption
AES 128-bit encryption
AES 192-bit encryption
SHA crypto-checksumming (for FIPS)
SHA-1 crypto-checksumming
Kerberos v5 authentication
RADIUS authentication
ENTRUST authentication

関連項目:
adaptersユーティリティの詳細は、『Oracle Database Net Services管理者ガイド』を参照してください。

5.3 Oracle Protocol Support

Oracle Protocol Supportは、Oracle Netのコンポーネントの1つです。次が含まれています。

- IPCプロトコル・サポート

- TCP/IPプロトコル・サポート

- Secure Sockets Layer付きTCP/IPプロトコル・サポート

IPC、TCP/IPおよびSecure Sockets Layer付きTCP/IPの各プロトコル・サポートには、それぞれアドレス指定が必要です。このアドレスは、Oracle Net Services構成ファイルおよびDISPATCHER初期化パラメータで使用されます。次の各項では、各プロトコル・サポートのアドレス指定について説明します。

関連項目:
Oracle Protocol Supportの詳細は、『Oracle Database Net Services管理者ガイド』を参照してください。

5.3.1 IPCプロトコル・サポート

IPCプロトコル・サポートは、クライアント・プログラムとOracle Databaseが同じシステムにインストールされている場合にのみ使用できます。このプロトコル・サポートには、リスナーが必要です。これは、すべてのクライアント・ツールおよびoracle実行可能ファイルにインストールおよびリンクされます。

IPCプロトコル・サポートには、次の書式のアドレス指定が必要です。

(ADDRESS = (PROTOCOL=IPC)(KEY=key))

次の表に、このアドレス指定で使用されるパラメータを示します。

パラメータ

説明

PROTOCOL

使用するプロトコルを表します。この値はIPCです。大/小文字は区別されません。

KEY

同じシステムでIPC KEYとして使用されている他の名前とは異なる、一意の名前を表します。

次に、IPCプロトコル・アドレスのサンプルを示します。

(ADDRESS= (PROTOCOL=IPC)(KEY=EXTPROC))

5.3.2 TCP/IPプロトコル・サポート

TCP/IPは、ネットワークを介したクライアント/サーバー通信に使用される標準的な通信プロトコルです。TCP/IPプロトコル・サポートを使用すると、クライアント・プログラムとOracle Databaseが同じシステムまたは別のシステムのどちらにインストールされていても、それらの間で通信を行うことができます。システムにTCP/IPプロトコルをインストールした場合、TCP/IPプロトコル・サポートがすべてのクライアント・ツールおよびoracle実行可能ファイルにインストールおよびリンクされます。

TCP/IPプロトコル・サポートには、次の書式のアドレス指定が必要です。

(ADDRESS = (PROTOCOL=TCP)(HOST=hostname)(PORT=port))

次の表に、このアドレス指定で使用されるパラメータを示します。

パラメータ

説明

PROTOCOL

使用するプロトコル・サポートを表します。この値はTCPです。大/小文字は区別されません。

HOST

ホスト名またはホストのIPアドレスを表します。

PORT

TCP/IPポートを表します。このポートには、番号または/etc/servicesファイルでこのポートにマップされた別名を指定します。推奨値は1521です。

次に、TCP/IPプロトコル・アドレスのサンプルを示します。

(ADDRESS= (PROTOCOL=TCP)(HOST=MADRID)(PORT=1521))

5.3.3 Secure Sockets Layer付きTCP/IPプロトコル・サポート

Secure Sockets Layer付きTCP/IPプロトコル・サポートを使用すると、クライアントのOracleアプリケーションは、TCP/IPおよびSecure Sockets Layerを介したリモートのOracle Databaseインスタンスと通信できます。Secure Sockets Layer付きTCP/IPを使用するには、Oracle Advanced Securityをインストールする必要があります。

Secure Sockets Layer付きTCP/IPプロトコル・サポートには、次の書式のアドレス指定が必要です。

(ADDRESS = (PROTOCOL=TCPS)(HOST=hostname)(PORT=port))

次の表に、このアドレス指定で使用されるパラメータを示します。

パラメータ

説明

PROTOCOL

使用するプロトコルを表します。この値はTCPSです。大/小文字は区別されません。

HOST

ホスト名またはホストのIPアドレスを表します。

PORT

Secure Sockets Layer付きTCP/IPポートを表します。このポートには、番号または/etc/servicesファイルでこのポートにマップされた別名を指定します。推奨値は2484です。

次に、Secure Sockets Layer付きTCP/IPプロトコル・アドレスのサンプルを示します。

(ADDRESS= (PROTOCOL=TCPS)(HOST=MADRID)(PORT=2484))

5.4 TCP/IPまたはSecure Sockets Layer付きTCP/IP用のリスナーの設定

リスナー用のポートは、ネットワーク上の各Oracle Net Servicesノードの/etc/servicesファイルで予約することをお薦めします。デフォルトのポートは1521です。エントリにはリスナー名とポート番号がリストされます。次に例を示します。

oraclelistener    1521/tcp

この例のoraclelistenerは、listener.oraファイルに定義されているリスナーの名前です。複数のリスナーを起動する場合は、複数のポートを予約してください。

Secure Sockets Layerを使用する場合は、Secure Sockets Layer付きTCP/IP用のポートを/etc/servicesファイルに定義する必要があります。推奨値は2484です。次に例を示します。

oraclelistenerssl     2484/tcps

この例のoraclelistenersslは、listener.oraファイルに定義されているリスナーの名前です。複数のリスナーを起動する場合は、複数のポートを予約してください。

6 OracleプリコンパイラおよびOracle Call Interfaceの使用

この章では、OracleプリコンパイラおよびOracle Call Interfaceの使用方法について説明します。内容は次のとおりです。

- Oracleプリコンパイラの概要

- クライアント・アプリケーションのビット長サポート

- Pro*C/C++プリコンパイラ

- Pro*COBOLプリコンパイラ

- Pro*FORTRANプリコンパイラ

- SQL*Module for ADA

- OCIとOCCI

- 64ビット・ドライバを使用するOracle JDBC/OCIプログラム

- カスタムMakeファイル

- 未定義シンボルの修正

- マルチスレッド・アプリケーション

- シグナル・ハンドラの使用

- XA機能

注意:
この章で説明するデモンストレーションを使用するには、Oracle Database 11g Examplesメディアに収録されているOracle Database Examplesをインストールしてください。

6.1 Oracleプリコンパイラの概要

Oracleプリコンパイラは、Oracle DatabaseのSQL文を高水準言語で記述されたプログラムと組み合せるためのアプリケーション開発ツールです。Oracleプリコンパイラは、ANSI SQLと互換性があり、Oracle Databaseやその他のANSI SQLデータベース管理システムで実行するオープンでカスタマイズされたアプリケーションを開発するために使用します。

この項では、次の項目について説明します。

- プリコンパイラ構成ファイル

- プリコンパイラ実行可能ファイルの再リンク

- プリコンパイラのREADMEファイル

- すべてのプリコンパイラに共通の問題

- 静的および動的リンク

- クライアント共有ライブラリとクライアント静的ライブラリ

注意:
この項で示すORACLE_HOMEは、「管理者」インストール・タイプを使用してOracle Database Client 11gをインストールするときに作成されるORACLE_HOMEを指します。

6.1.1 プリコンパイラ構成ファイル

Oracleプリコンパイラの構成ファイルは、$ORACLE_HOME/precomp/adminディレクトリにあります。

表6-1に、各プリコンパイラの構成ファイルの名前を示します。

表6-1 Oracleプリコンパイラのシステム構成ファイル

製品

構成ファイル

Pro*C/C++

pcscfg.cfg

Pro*COBOL

pcbcfg.cfg

Pro*FORTRAN(AIX、HP-UXおよびSolaris)

pccfor.cfg

Object Type Translator

ottcfg.cfg

SQL*Module for Ada(AIX)

pmscfg.cfg

6.1.2 プリコンパイラ実行可能ファイルの再リンク

すべてのプリコンパイラ実行可能ファイルを再リンクするには、Makeファイル$ORACLE_HOME/precomp/lib/ins_precomp.mkを使用します。特定のプリコンパイラ実行可能ファイルを手動で再リンクするには、次のコマンドを入力します。

$ make -f ins_precomp.mk relink exename = executable_name

このコマンドを実行すると、最初に、新しい実行可能ファイルが$ORACLE_HOME/precomp/libディレクトリに作成され、次にそのファイルが$ORACLE_HOME/binディレクトリに移動されます。

この例では、executableを表6-2で示した製品の実行可能ファイルで置き換えます。

表6-2に、Oracleプリコンパイラの実行可能ファイルを示します。

表6-2 Oracleプリコンパイラの実行可能ファイル

製品

実行可能ファイル

Pro*C/C++ 32ビット(HP-UXおよびIBM: Linux on System z)

proc

Pro*COBOL(AIX、HP-UXおよびSolaris)

procobまたはrtsora

Pro*COBOL 32ビット(AIX、HP-UX、SolarisおよびIBM: Linux on System z)

procob

Pro*FORTRAN(HP-UX)

profor

Pro*FORTRAN 32ビット(AIX、HP-UXおよびSolaris)

profor

SQL*Module for Ada(AIX)

modada

6.1.3 プリコンパイラのREADMEファイル

READMEファイルには、前回のリリース以降にプリコンパイラに加えられた変更が記載されています。

表6-3に、プリコンパイラのREADMEファイルの場所を示します。

表6-3 プリコンパイラのREADMEファイルの保存場所

プリコンパイラ

READMEファイル

Pro*C/C++

$ORACLE_HOME/precomp/doc/proc/readme.doc

Pro*COBOL

$ORACLE_HOME/precomp/doc/procob2/readme.doc

Pro*FORTRAN

$ORACLE_HOME/precomp/doc/pro1x/readme.txt

6.1.4 すべてのプリコンパイラに共通の問題

次の問題は、すべてのプリコンパイラに共通しています。

- 大文字から小文字への変換
C言語以外では、コンパイラによって、大文字の関数やサブプログラム名が小文字に変換されます。これが、No such user existsエラー・メッセージの原因になる可能性があります。このエラー・メッセージが表示された場合は、オプション・ファイル内の関数またはサブプログラム名の大/小文字が、IAPXTB表の文字と一致しているかどうかを確認してください。

- ベンダー提供のデバッガ・プログラム
プリコンパイラとベンダー提供のデバッガに互換性がない場合があります。デバッガを使用して動作したプログラムが、デバッガを使用しないときも同様に動作するとはかぎりません。

- IRECLENおよびORECLENの各パラメータの値
IRECLENおよびORECLENの各パラメータには、最大値がありません。

6.1.5 静的および動的リンク

Oracleライブラリは、プリコンパイラやOCIまたはOCCIアプリケーションと静的または動的にリンクできます。静的リンクの場合、アプリケーション全体のライブラリおよびオブジェクトは、1つの実行可能プログラムにリンクされます。その結果、アプリケーションの実行可能ファイルが非常に大きくなることがあります。

動的リンクの場合、実行コードの一部分が実行可能プログラムに格納され、残りの部分はアプリケーションの実行時に動的にリンクされるライブラリに格納されます。実行時にリンクされるライブラリを、動的ライブラリまたは共有ライブラリと呼びます。動的リンクには、次のようないくつかのメリットがあります。

- ディスク領域要件が少なくなります。複数のアプリケーションで、または同一アプリケーションのコールで、同じ動的ライブラリを使用できます。

- メイン・メモリー要件が少なくなります。同一の動的ライブラリ・イメージをメイン・メモリーに一度ロードしておくと、複数のアプリケーションでそれを共有できます。

6.1.6 クライアント共有ライブラリとクライアント静的ライブラリ

クライアント共有ライブラリとクライアント静的ライブラリは、$ORACLE_HOME/libにあります。オラクル社が提供しているdemo_product.mkファイルを使用してアプリケーションをリンクする場合は、デフォルトでクライアント共有ライブラリがリンクされます。

共有ライブラリ・パスの環境変数設定にクライアント共有ライブラリを含むディレクトリが指定されていない場合、実行可能ファイルの起動時に、次のようなエラー・メッセージのいずれかが表示される場合があります。

Cannot load library libclntsh.a
cannot open shared library: .../libclntsh.sl.10.1
libclntsh.so.10.1: can't open file: errno=2
can't open library: .../libclntsh.dylib.10.1
Cannot map libclntsh.so

このエラーを防ぐには、共有ライブラリ・パスの環境変数を設定し、適切なディレクトリを指定します。次の表に、環境変数名のサンプル設定を示します。プラットフォームで32ビットおよび64ビットのアプリケーションがどちらもサポートされている場合、実行するアプリケーションに応じて、正しいディレクトリを指定してください。

プラットフォーム

環境変数

サンプル設定

AIX(32ビット・アプリケーション)

LIBPATH

$ORACLE_HOME/lib

AIX(64ビット・アプリケーション)

LIBPATH

$ORACLE_HOME/lib

HP-UX(32ビット・アプリケーション)

SHLIB_PATH

$ORACLE_HOME/lib

HP-UX(64ビット・アプリケーション)およびLinux

LD_LIBRARY_PATH

$ORACLE_HOME/lib

Solaris(32ビット・アプリケーション)

LD_LIBRARY_PATH

$ORACLE_HOME/lib

Solaris(64ビット・アプリケーション)

LD_LIBRARY_PATH

$ORACLE_HOME/lib

IBM: Linux on System z (32ビット・アプリケーション)

LD_LIBRARY_PATH

$ORACLE_HOME/lib

IBM: Linux on System z (64ビット・アプリケーション)

LD_LIBRARY_PATH

$ORACLE_HOME/lib

クライアント共有ライブラリは、インストール時に自動的に作成されます。クライアント共有ライブラリを再作成する場合は、次の手順を実行します。

1. クライアント共有ライブラリを使用するすべてのクライアント・アプリケーションを終了します。この中には、SQL*PlusやOracle Recovery ManagerなどのOracle Clientアプリケーションもすべて含まれます。

2. oracleユーザーでログインし、次のコマンドを実行します。

$ $ORACLE_HOME/bin/genclntsh

非スレッドのクライアント共有ライブラリ

注意:
この項の内容は、HP-UXシステムに適用されます。

HP-UXでは、非スレッドのクライアント共有ライブラリを使用できます。ただし、このライブラリは、スレッドを使用する、またはスレッドに依存するOCIアプリケーションでは使用できません。

スレッドを使用しないアプリケーションでこのライブラリを使用するには、次のコマンドを実行して32および64ビットのOCIアプリケーションを作成します。

$ make -f demo_rdbms.mk build_nopthread EXE=oci02 OBJS=oci02.o

6.2 クライアント・アプリケーションのビット長サポート

次の表に、クライアント・アプリケーションについてサポートされるビット長(31ビット、32ビットまたは64ビット)を示します。

注意:
Oracle Database 11g リリース2 (11.2)からは、32ビット・プリコンパイラ、32ビット・クライアント実行可能ファイルおよびライブラリは、64ビットのOracle Databaseインストールで使用できません。これらは、Oracle Database Clientインストールの一部としてインストールされます。

クライアント・アプリケーションのタイプ

サポートされるプラットフォーム

32ビットのみ

Linux x86

32ビットおよび64ビット

AIX、HP-UX PA-RISC、Linux x86-64、SPARC、HP-UX Itanium、Solaris x86-64およびIBM: Linux on System z

次の表に、32ビットおよび64ビットのクライアント共有ライブラリを示します。

注意:
Oracle Database 11g リリース2 (11.2)からは、32ビットおよび64ビットのOracle Database Clientは別のOracleホームにインストールされます。

プラットフォーム

32ビット(または31ビット)のクライアント共有ライブラリ

64ビットのクライアント共有ライブラリ

AIX

$ORACLE_HOME/lib/libclntsh.a
$ORACLE_HOME/lib/libclntsh.so

$ORACLE_HOME/lib/libclntsh.a
$ORACLE_HOME/lib/libclntsh.so

HP-UX PA-RISC
HP-UX Itanium

$ORACLE_HOME/lib/libclntsh.sl

$ORACLE_HOME/lib/libclntsh.sl

Linux x86-64、Solaris、Solaris x86-64およびIBM: Linux on System z

$ORACLE_HOME/lib/libclntsh.so

$ORACLE_HOME/lib/libclntsh.so

異なるワード・サイズが混在しているインストールを実装するには、次の手順を実行します。

1. 次のコマンドを実行して、32ビットおよび64ビットのクライアント共有ライブラリを作成します。

$ $ORACLE_HOME/bin/genclntsh

2. プラットフォームに応じて、次のいずれかの環境変数に、必要な32ビットおよび64ビットのクライアント共有ライブラリのパスを入力します。

プラットフォーム

環境変数

AIX

LIBPATH

HP-UX(32ビット・クライアント・アプリケーション)

SHLIB_PATH

HP-UX、Linux x86、Linux x86-64、SolarisおよびIBM: Linux on System z

LD_LIBRARY_PATH

32ビットのPro*CおよびOCIカスタマ・アプリケーションの作成

Pro*CおよびOracle Call Interface(OCI)カスタマ・アプリケーションをサポートするオペレーティング・システムでは、次のファイルにPro*CおよびOCIアプリケーションの作成方法が記載されています。

作成内容 . .

参照先のMakeファイル . .

Pro*Cアプリケーションの作成

$ORACLE_HOME/precomp/demo/proc/demo_proc.mk

OCIアプリケーションの作成

$ORACLE_HOME/rdbms/demo/demo_rdbms.mk

6.3 Pro*C/C++プリコンパイラ

Pro*C/C++プリコンパイラを使用する場合は、事前にオペレーティング・システムの適切なバージョンのコンパイラが正しくインストールされていることを確認してください。

関連項目:

- サポートされるコンパイラのバージョンの詳細は、『Oracle Databaseインストレーション・ガイド』を参照してください

- Pro*C/C++プリコンパイラおよびインタフェース機能の詳細は、『Pro*C/C++プログラマーズ・ガイド』を参照してください。

この項では、次の項目について説明します。

- Pro*C/C++のデモ・プログラム

- Pro*C/C++のユーザー・プログラム

6.3.1 Pro*C/C++のデモ・プログラム

デモ・プログラムは、Pro*C/C++プリコンパイラの機能を紹介するために用意されています。デモ・プログラムには、C、C++およびObjectプログラムの3種類があります。デモ・プログラムはすべて、$ORACLE_HOME/precomp/demo/procディレクトリにあります。デフォルトでは、すべてのプログラムがクライアント共有ライブラリに動的にリンクされます。

デモ・プログラムを実行するには、$ORACLE_HOME/sqlplus/demo/demobld.sqlスクリプトで作成したデモンストレーション表がパスワード付きのJONESスキーマに存在する必要があります。

注意:
デモンストレーションを作成する前に、JONESアカウントのロックを解除してパスワードを設定する必要があります。

デモ・プログラムを作成するには、$ORACLE_HOME/precomp/demo/proc/ディレクトリにあるMakeファイルdemo_proc.mkを使用します。たとえば、sample1のデモ・プログラムをプリコンパイル、コンパイルおよびリンクするには、次のコマンドを実行します。

注意:
AIXシステムの場合、デモ・プログラムを正しくコンパイルするために、次の例のmakeコマンドの-rオプションを指定してください。次に例を示します。

$ make -r -f demo_proc.mk sample1

$ make -f demo_proc.mk sample1

Pro*C/C++のCデモ・プログラムをすべて作成するには、次のコマンドを実行します。

$ make -f demo_proc.mk samples

Pro*C/C++のC++デモ・プログラムをすべて作成するには、次のコマンドを実行します。

$ make -f demo_proc.mk cppsamples

Pro*C/C++のObjectデモ・プログラムをすべて作成するには、次のコマンドを実行します。

$ make -f demo_proc.mk object_samples

一部のデモ・プログラムでは、$ORACLE_HOME/precomp/demo/sqlディレクトリ内にあるSQLスクリプトを実行する必要があります。このスクリプトを実行しないと、実行を要求するメッセージが表示されます。

デモ・プログラムを作成し、それに対応するSQLスクリプトを実行するには、「makeマクロ引数RUNSQL=run」をコマンドラインに追加します。たとえば、sample9デモ・プログラムを作成し、必要な$ORACLE_HOME/precomp/demo/sql/sample9.sqlスクリプトを実行するには、次のコマンドを実行します。

$ make -f demo_proc.mk sample9 RUNSQL=run

Objectデモ・プログラムのすべてを作成し、必要なSQLスクリプトすべてを実行するには、次のコマンドを実行します。

$ make -f demo_proc.mk object_samples RUNSQL=run

6.3.2 Pro*C/C++のユーザー・プログラム

Makeファイル$ORACLE_HOME/precomp/demo/proc/demo_proc.mkを使用して、ユーザー・プログラムを作成できます。このMakeファイルは、32ビットまたは64ビットのユーザー・プログラムを作成します。Makeファイルdemo_proc32.mkを使用して、32ビットのユーザー・プログラムを作成することもできます。次の表に、Pro*C/C++により32ビットおよび64ビットのユーザー・プログラムを作成するためのMakeファイルを示します。

プラットフォーム

64ビットMakeファイル

32ビットMakeファイル

AIX、HP-UX、Linux x86-64、Solaris x86-64およびSolaris

demo_proc.mk

demo_proc32.mk

Linux x86

該当なし

demo_proc.mk

関連項目:
ユーザー・プログラムの作成方法は、そのMakeファイルを参照してください。

注意:
AIXシステムの場合、プログラムを正しくコンパイルするために、次の例のmakeコマンドの-rオプションを指定してください。

Makeファイルdemo_proc.mkを使用してプログラムを作成する場合は、次のようなコマンドを実行します。

$ make -f demo_proc.mk target OBJS="objfile1 objfile2 ..." EXE=exename

各項目の意味は次のとおりです。

- targetは、使用するMakeファイルのターゲットです。

- objfilenは、プログラムをリンクするためのオブジェクト・ファイルです。

- exenameは、実行可能プログラムです。

たとえば、Pro*C/C++ソース・ファイルmyprog.pcからプログラムmyprogを作成する場合は、作成する実行可能ファイルのソースとタイプに応じて、次のいずれかのコマンドを実行します。

- Cソースの場合、クライアント共有ライブラリに動的にリンクさせるには、次のコマンドを実行します。

$ make -f demo_proc.mk build OBJS=myprog.o EXE=myprog

- Cソースの場合、クライアント共有ライブラリに静的にリンクさせるには、次のコマンドを実行します。

$ make -f demo_proc.mk build_static OBJS=myprog.o EXE=myprog

- C++ソースの場合、クライアント共有ライブラリに動的にリンクさせるには、次のコマンドを実行します。

$ make -f demo_proc.mk cppbuild OBJS=myprog.o EXE=myprog

- C++ソースの場合、クライアント共有ライブラリに静的にリンクさせるには、次のコマンドを実行します。

$ make -f demo_proc.mk cppbuild_static OBJS=myprog.o EXE=myprog

6.4 Pro*COBOLプリコンパイラ

表6-4に、Pro*COBOLプリコンパイラのネーミング規則を示します。

表6-4 Pro*COBOLネーミング規則

項目

ネーミング規則

実行可能ファイル

procob

デモンストレーション・ディレクトリ

procob2

Makeファイル

demo_procob.mkまたはdemo_procob_32.mk

Pro*COBOLでは、静的リンク、動的リンクまたは動的読取りプログラムをサポートしています。動的リンク・プログラムは、クライアント共有ライブラリを使用します。動的読取りプログラムは、$ORACLE_HOME/binディレクトリにあるrtsora実行可能ファイルを使用します。

この項では、次の項目について説明します。

- Pro*COBOLの環境変数

- Pro*COBOLのOracleランタイム・システム

- Pro*COBOLのデモ・プログラム

- Pro*COBOLのユーザー・プログラム

- FORMATプリコンパイラ・オプション

6.4.1 Pro*COBOLの環境変数

この項では、Pro*COBOLで必要な環境変数について説明します。

- Micro Focus Server Express COBOLコンパイラ

- Acucorp ACUCOBOL-GT COBOLコンパイラ

6.4.1.1 Micro Focus Server Express COBOLコンパイラ

Micro Focus Server Express COBOLコンパイラを使用するには、環境変数COBDIRとPATHおよび共有ライブラリ・パス環境変数を設定する必要があります。

関連項目:
共有ライブラリのパス環境変数の詳細は、「クライアント共有ライブラリとクライアント静的ライブラリ」を参照してください。

COBDIR

環境変数COBDIRには、コンパイラがインストールされているディレクトリを設定します。たとえば、コンパイラが/opt/lib/cobolディレクトリにインストールされている場合は、次のコマンドを実行します。

- Bourne、BashまたはKornシェルの場合

$ COBDIR=/opt/lib/cobol
$ export COBDIR

- Cシェルの場合

% setenv COBDIR /opt/lib/cobol

PATH

$COBDIR/binディレクトリを含むように環境変数PATHを設定します。

- Bourne、BashまたはKornシェルの場合

$ PATH=$COBDIR/bin:$PATH
$ export PATH

- Cシェルの場合

% setenv PATH ${COBDIR}/bin:${PATH}

共有ライブラリ・パス

環境変数LIBPATH、LD_LIBRARY_PATHまたはSHLIB_PATHには、コンパイラ・ライブラリがインストールされているディレクトリを設定します。たとえば、プラットフォームで環境変数LD_LIBRARY_PATHが使用されており、コンパイラ・ライブラリが$COBDIR/coblibディレクトリにインストールされている場合は、次のコマンドを実行します。

- Bourne、BashまたはKornシェルの場合

$ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$COBDIR/coblib
$ export LD_LIBRARY_PATH

- Cシェルの場合

% setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:$COBDIR/coblib

6.4.1.2 Acucorp ACUCOBOL-GT COBOLコンパイラ

Acucorp ACUCOBOL-GT COBOLコンパイラを使用するには、A_TERMCAP、A_TERM、PATHおよびLD_LIBRARY_PATH環境変数を設定する必要があります。環境変数LD_LIBRARY_PATHに正しいディレクトリが設定されていない場合は、プログラムのコンパイルまたは実行時に、次のようなエラー・メッセージが表示されます。

runcbl: error while loading shared libraries: libclntsh.so:
cannot open shared object file: No such file or directory

A_TERMCAPおよびA_TERM

a_termcapファイルの場所を指定するには環境変数A_TERMCAPを設定し、そのファイルからサポートされる端末を指定するには環境変数A_TERMを設定します。次に例を示します。

- Bourne、BashまたはKornシェルの場合

$ A_TERMCAP=/opt/COBOL/etc/a_termcap
$ A_TERM=vt100
$ export A_TERMCAP A_TERM

- Cシェルの場合

% setenv A_TERMCAP /opt/COBOL/etc/a_termcap
% setenv A_TERM vt100

PATH

/opt/COBOL/binディレクトリを含むように環境変数PATHを設定します。

- Bourne、BashまたはKornシェルの場合

$ PATH=/opt/COBOL/bin:$PATH
$ export PATH

- Cシェルの場合

% setenv PATH opt/COBOL/bin:${PATH}

LD_LIBRARY_PATH

注意:
AIXの場合、LIBPATH変数は、LD_LIBRARY_PATH変数と同等です。AIXでは、次のコマンドでLD_LIBRARY_PATH変数ではなくLIBPATH変数を使用する必要があります。

環境変数LD_LIBRARY_PATHには、コンパイラ・ライブラリがインストールされているディレクトリを設定します。たとえば、コンパイラ・ライブラリが/opt/COBOL/libディレクトリにインストールされている場合は、次のコマンドを実行します。

- Bourne、BashまたはKornシェルの場合

$ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/opt/COBOL/lib
$ export LD_LIBRARY_PATH

- Cシェルの場合

% setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/opt/COBOL/lib

6.4.2 Pro*COBOLのOracleランタイム・システム

Oracleには、動的読取りPro*COBOLプログラムを実行するために、rtsoraという専用のランタイム・システムが用意されています。動的読取りPro*COBOLプログラムを実行するには、cobrunランタイム・システムのかわりに、rtsoraランタイム・システムを使用します。cobrunを使用してPro*COBOLプログラムを実行すると、次のようなエラー・メッセージが表示されます。

$ cobrun sample1.gnt
Load error : file 'SQLADR'
error code: 173, pc=0, call=1, seg=0
173     Called program file not found in drive/directory

6.4.3 Pro*COBOLのデモ・プログラム

デモ・プログラムは、Pro*COBOLプリコンパイラの機能を紹介するために用意されています。デモ・プログラムは、$ORACLE_HOME/precomp/demo/procob2ディレクトリにあります。デフォルトでは、すべてのプログラムがクライアント共有ライブラリに動的にリンクされます。

デモ・プログラムを実行するには、$ORACLE_HOME/sqlplus/demo/demobld.sqlスクリプトで作成したデモンストレーション表がパスワード付きのJONESスキーマに存在する必要があります。

注意:
デモンストレーションを作成する前に、JONESアカウントのロックを解除してパスワードを設定する必要があります。

次のMakeファイルを使用してデモ・プログラムを作成します。

$ORACLE_HOME/precomp/demo/procob2/demo_procob.mk

sample1というPro*COBOL用のデモ・プログラムをプリコンパイル、コンパイルおよびリンクするには、次のコマンドを実行します。

$ make -f demo_procob.mk sample1

Pro*COBOLデモ・プログラムを作成するには、次のコマンドを実行します。

$ make -f demo_procob.mk samples

rtsoraランタイム・システムで使用する動的読取りプログラムsample1.gntを作成し、実行するには、次のコマンドを実行します。

$ make -f demo_procob.mk sample1.gnt
$ rtsora sample1.gnt

一部のデモ・プログラムでは、$ORACLE_HOME/precomp/demo/sqlディレクトリ内にあるSQLスクリプトを実行する必要があります。このスクリプトを実行しないと、実行を要求するメッセージが表示されます。

デモ・プログラムを作成し、それに対応するSQLスクリプトを実行するには、「makeマクロ引数RUNSQL=run」をコマンドに追加します。たとえば、sample9デモ・プログラムを作成し、必要な$ORACLE_HOME/precomp/demo/sql/sample9.sqlスクリプトを実行するには、次のコマンドを実行します。

$ make -f demo_procob.mk sample9 RUNSQL=run

Pro*COBOLデモ・プログラムを作成し、必要なSQLスクリプトすべてを実行するには、次のコマンドを実行します。

$ make -f demo_procob.mk samples RUNSQL=run

6.4.4 Pro*COBOLのユーザー・プログラム

Makeファイル$ORACLE_HOME/precomp/demo/procob2/demo_procob.mkを使用して、ユーザー・プログラムを作成できます。このMakeファイルは、32ビットまたは64ビットのユーザー・プログラムを作成します。Makeファイルdemo_procob.mkを使用して、32ビット(または31ビット)のユーザー・プログラムを作成することもできます。次の表に、Pro*COBOLにより32ビット(または31ビット)および64ビットのユーザー・プログラムを作成するためのMakeファイルを示します。

プラットフォーム

Makeファイル

AIX、HP-UX、Linux x86-64、Solaris、IBM: Linux on System zおよびLinux x86

demo_procob.mk

関連項目:
ユーザー・プログラムの作成方法は、そのMakeファイルを参照してください。

Makeファイルdemo_procob.mkを使用してプログラムを作成する場合は、次のようなコマンドを実行します。

$ make -f demo_procob.mk target COBS="cobfile1 cobfile2 ..." EXE=exename

各項目の意味は次のとおりです。

- targetは、使用するMakeファイルのターゲットです。

- cobfilenは、プログラムのCOBOLソース・ファイルです。

- exenameは、実行可能プログラムです。

たとえば、プログラムmyprogを作成する場合は、作成する実行可能ファイルのソースとタイプに応じて、次のいずれかのコマンドを実行します。

- COBOLソースの場合、クライアント共有ライブラリに動的にリンクさせるには、次のコマンドを実行します。

$ make -f demo_procob.mk build COBS=myprog.cob EXE=myprog

- COBOLソースの場合、静的にリンクさせるには、次のコマンドを実行します。

$ make -f demo_procob.mk build_static COBS=myprog.cob EXE=myprog

- COBOLソースの場合、rtsoraで使用するための動的読取りプログラムを作成するには、次のコマンドを実行します。

$ make -f demo_procob.mk myprog.gnt

6.4.5 FORMATプリコンパイラ・オプション

FORMATプリコンパイラ・オプションは、COBOLの入力行の形式を指定します。デフォルト値のANSIを指定した場合、列1から6はオプションの順序番号、列7はコメントまたは継続行を示します。段落名は列8から11で開始され、列12から72が文となります。

値TERMINALを指定した場合、列1から6は削除され、列7が左端の列になります。

6.5 Pro*FORTRANプリコンパイラ

Pro*FORTRANプリコンパイラを使用する場合は、事前に適切なバージョンのコンパイラがインストールされていることを確認してください。この項では、次の項目について説明します。

- Pro*FORTRANのデモ・プログラム

- Pro*FORTRANのユーザー・プログラム

関連項目:

- サポートされるコンパイラのバージョンの詳細は、『Oracle Databaseインストレーション・ガイド』を参照してください。

- Pro*FORTRANプリコンパイラおよびインタフェース機能の詳細は、『Pro*FORTRAN Supplement to the Oracle Precompilers Guide』を参照してください。

6.5.1 Pro*FORTRANのデモ・プログラム

デモ・プログラムは、Pro*FORTRANプリコンパイラの機能を紹介するために用意されています。デモ・プログラムはすべて、$ORACLE_HOME/precomp/demo/proforディレクトリにあります。デフォルトでは、すべてのプログラムがクライアント共有ライブラリに動的にリンクされます。

デモ・プログラムを実行するには、$ORACLE_HOME/sqlplus/demo/demobld.sqlスクリプトで作成したデモンストレーション表がパスワード付きのJONESスキーマに存在する必要があります。

注意:
デモンストレーションを作成する前に、JONESアカウントのロックを解除してパスワードを設定する必要があります。

デモ・プログラムを作成するには、$ORACLE_HOME/precomp/demo/proforディレクトリにあるMakeファイルdemo_profor.mkを使用します。たとえば、sample1のデモ・プログラムをプリコンパイル、コンパイルおよびリンクするには、次のコマンドを実行します。

$ make -f demo_profor.mk sample1

Pro*FORTRANのデモ・プログラムを作成するには、次のコマンドを実行します。

$ make -f demo_profor.mk samples

一部のデモ・プログラムでは、$ORACLE_HOME/precomp/demo/sqlディレクトリ内にあるSQLスクリプトを実行する必要があります。このスクリプトを実行しないと、実行を要求するメッセージが表示されます。

デモ・プログラムを作成し、それに対応するSQLスクリプトを実行するには、「makeマクロ引数RUNSQL=run」をコマンドラインに追加します。たとえば、sample11デモ・プログラムを作成し、必要な$ORACLE_HOME/precomp/demo/sql/sample11.sqlスクリプトを実行するには、次のコマンドを実行します。

$ make -f demo_profor.mk sample11 RUNSQL=run

Pro*FORTRANのデモ・プログラムを作成し、必要なSQLスクリプトすべてを実行するには、次のコマンドを実行します。

$ make -f demo_profor.mk samples RUNSQL=run

6.5.2 Pro*FORTRANのユーザー・プログラム

Makeファイル$ORACLE_HOME/precomp/demo/profor/demo_profor.mkを使用して、ユーザー・プログラムを作成できます。このMakeファイルは、32ビットまたは64ビットのユーザー・プログラムを作成します。Makeファイルdemo_profor_32.mkを使用して、32ビットのユーザー・プログラムを作成することもできます。次の表に、Pro*FORTRANにより32ビットおよび64ビットのユーザー・プログラムを作成するためのMakeファイルを示します。

プラットフォーム

64ビットMakeファイル

32ビットMakeファイル

AIX、HP-UXおよびSolaris

demo_profor.mk

demo_profor_32.mk

関連項目:
ユーザー・プログラムの作成方法は、そのMakeファイルを参照してください。

Makeファイルdemo_proc.mkを使用してプログラムを作成する場合は、次のようなコマンドを実行します。

$ make -f demo_profor.mk target FORS="forfile1 forfile2 ..." EXE=exename

各項目の意味は次のとおりです。

- targetは、使用するMakeファイルのターゲットです。

- forfilenは、プログラムのFORTRANソース・ファイルです。

- exenameは、実行可能プログラムです。

たとえば、Pro*FORTRANソース・ファイルmyprog.pfoからプログラムmyprogを作成する場合は、作成する実行可能ファイルのタイプに応じて、次のいずれかのコマンドを実行します。

- 実行可能ファイルの場合、クライアント共有ライブラリに動的にリンクさせるには、次のコマンドを実行します。

$ make -f demo_profor.mk build FORS=myprog.f EXE=myprog

- 実行可能ファイルの場合、クライアント共有ライブラリに静的にリンクさせるには、次のコマンドを実行します。

$ make -f demo_profor.mk build_static FORS=myprog.f EXE=myprog

6.6 SQL*Module for ADA

注意:
この項の内容は、AIXプラットフォームに適用されます。

SQL*Module for Adaを使用する場合は、事前に適切なバージョンのコンパイラがインストールされていることを確認してください。

関連項目:

- 必要なコンパイラのバージョンの詳細は、『Oracle Databaseインストレーション・ガイド』を参照してください。

- SQL*Module for Adaの詳細は、『Oracle SQL*Module for Ada Programmer's Guide』を参照してください。

この項では、次の項目について説明します。

- SQL*Module for Adaデモ・プログラム

- SQL*Module for Adaユーザー・プログラム

6.6.1 SQL*Module for Adaデモ・プログラム

デモ・プログラムは、SQL*Module for Adaの機能を紹介するために用意されています。デモ・プログラムはすべて、$ORACLE_HOME/precomp/demo/modadaディレクトリにあります。デフォルトでは、すべてのプログラムがクライアント共有ライブラリに動的にリンクされます。

ch1_drvデモ・プログラムを実行するには、$ORACLE_HOME/sqlplus/demo/demobld.sqlスクリプトで作成したデモンストレーション表がパスワード付きのJONESスキーマに存在する必要があります。

注意:
デモンストレーションを作成する前に、JONESアカウントのロックを解除してパスワードを設定する必要があります。

demcalspおよびdemohostの各デモ・プログラムでは、サンプルのcollegeデータベースがMODTESTスキーマに存在している必要があります。適切なmakeコマンドを使用してMODTESTスキーマを作成すると、サンプルのcollegeデータベースをロードできます。

SQL*Module for Adaデモ・プログラムを作成して、MODTESTユーザーの作成に必要なSQLスクリプトを実行し、サンプルのcollegeデータベースを作成するには、次のコマンドを実行します。

$ make -f demo_modada.mk all RUNSQL=run

1つのデモ・プログラム(demohost)を作成して、MODTESTユーザーの作成に必要なSQLスクリプトを実行し、サンプルのcollegeデータベースを作成するには、次のコマンドを実行します。

$ make -f demo_modada.mk makeuser loaddb demohost RUNSQL=run

SQL*Module for Adaデモ・プログラムを作成して、サンプルのcollegeデータベースを再び作成しない場合には、次のコマンドを実行します。

$ make -f demo_modada.mk samples

1つのデモ・プログラム(demohost)を作成して、サンプルのcollegeデータベースを再び作成しない場合は、次のコマンドを実行します。

$ make -f demo_modada.mk demohost

プログラムを実行するには、Oracle Netの接続文字列を定義するか、または適切な表が存在するデータベースへの接続に使用するINST1_ALIASという別名を定義する必要があります。

6.6.2 SQL*Module for Adaユーザー・プログラム

Makeファイル$ORACLE_HOME/precomp/demo/modada/demo_modada.mkを使用して、ユーザー・プログラムを作成できます。Makeファイルdemo_modada.mkを使用してプログラムを作成する場合は、次のようなコマンドを実行します。

$ make -f demo_modada.mk ada OBJS="module1 module2 ..." \
EXE=exename MODARGS=SQL_Module_arguments

各項目の意味は次のとおりです。

- modulenは、コンパイル済のAdaオブジェクトです。

- exenameは、実行可能プログラムです。

- SQL_Module_argumentsは、SQL*Moduleに渡されるコマンドライン引数です。

関連項目:
SQL*Module for Adaの詳細は、『Oracle SQL*Module for Ada Programmer's Guide』を参照してください。

6.7 OCIとOCCI

Oracle Call Interface(OCI)またはOracle C++ Call Interface(OCCI)を使用する前に、適切なバージョンのCまたはC++がインストール済であることを確認してください。

関連項目:

- サポートされるコンパイラのバージョンの詳細は、『Oracle Databaseインストレーション・ガイド』を参照してください。

- OCIおよびOCCIについては、Oracle Call Interfaceのプログラマーズ・ガイドまたはOracle C++ Call Interfaceのプログラマーズ・ガイドを参照してください。

この項では、次の項目について説明します。

- OCIとOCCIのデモ・プログラム

- OCIとOCCIのユーザー・プログラム

6.7.1 OCIとOCCIのデモ・プログラム

OCIとOCCIの機能を紹介するデモ・プログラムは、ソフトウェアのOracle Database 11g Examplesメディアに収録されています。デモ・プログラムには、CおよびC++プログラムの2種類があります。デモ・プログラムは、$ORACLE_HOME/rdbms/demoディレクトリにあります。デフォルトでは、すべてのプログラムがクライアント共有ライブラリに動的にリンクされます。

デモ・プログラムを実行するには、$ORACLE_HOME/sqlplus/demo/demobld.sqlスクリプトで作成したデモンストレーション表がパスワード付きのJONESスキーマに存在する必要があります。一部のデモ・プログラムでは、デモ・ソース・ファイルに示されているように、特定の.sqlファイルを実行することが必要です。OCCIデモ・プログラムでは、occidemo.sqlを実行することが必要です。

注意:
デモンストレーションを作成する前に、JONESアカウントのロックを解除してパスワードを設定する必要があります。

デモ・プログラムを作成するには、$ORACLE_HOME/rdbms/demoディレクトリにあるMakeファイルdemo_rdbms.mkを使用します。たとえば、cdemo1のデモ・プログラムをコンパイルおよびリンクするには、次のコマンドを実行します。

$ make -f demo_rdbms.mk cdemo1

OCIのCデモ・プログラムを作成するには、次のコマンドを実行します。

$ make -f demo_rdbms.mk demos

OCCIのC++デモ・プログラムを作成するには、次のコマンドを実行します。

$ make -f demo_rdbms.mk occidemos

6.7.2 OCIとOCCIのユーザー・プログラム

Makeファイル$ORACLE_HOME/rdbms/demo/demo_rdbms.mkを使用して、ユーザー・プログラムを作成できます。このMakeファイルは、32ビットまたは64ビットのユーザー・プログラムを作成します。demo_rdbms32.mkを使用して、64ビットのオペレーティング・システムに32ビットのユーザー・プログラムを作成することもできます。次の表に、Pro*FORTRANにより32ビットおよび64ビットのユーザー・プログラムを作成するためのMakeファイルを示します。

プラットフォーム

64ビットMakeファイル

32ビットMakeファイル

AIX、HP-UX、SolarisおよびLinux x86-64

demo_rdbms.mk

demo_rdbms32.mk

Linux x86

該当なし

demo_rdbms.mk

関連項目:
ユーザー・プログラムの作成方法は、そのMakeファイルを参照してください。

6.8 64ビット・ドライバを使用するOracle JDBC/OCIプログラム

注意:

- この項の内容は、AIX、HP-UX、Linux x86-64およびSolarisのプラットフォームに適用されます。

- この項で説明する指示とMakeファイルを使用して、64ビット・ドライバを使用するJDBC/OCIユーザー・プログラムを作成できます。

64ビット・ドライバを使用するJDBC/OCIデモ・プログラムを実行するには、次の手順を実行します。

1. 次の各ファイルについて、環境変数CLASSPATHの先頭に$ORACLE_HOME/jdbc/lib/ojdbc5.jarを追加します。

jdbc/demo/samples/jdbcoci/Makefile
jdbc/demo/samples/generic/Inheritance/Inheritance1/Makefile
jdbc/demo/samples/generic/Inheritance/Inheritance2/Makefile
jdbc/demo/samples/generic/Inheritance/Inheritance3/Makefile
jdbc/demo/samples/generic/JavaObject1/Makefile
jdbc/demo/samples/generic/NestedCollection/Makefile

2. $ORACLE_HOME/jdbc/demo/samples/generic/Makefileファイル内で、JAVA変数とJAVAC変数を変更し、JDKの位置および-d64フラグを次のように指定します。

JAVA=${ORACLE_HOME}/java/bin/java -d64
JAVAC=${ORACLE_HOME}/java/bin/javac -d64

3. $ORACLE_HOME/libディレクトリを含むように、環境変数LD_LIBRARY_PATH_64を設定します。

注意:
AIXの場合、LIBPATH変数は、LD_LIBRARY_PATH_64変数と同等です。AIXでは、LD_LIBRARY_PATH_64変数ではなくLIBPATH変数を使用する必要があります。

6.9 カスタムMakeファイル

この章の製品別の項で説明したように、ユーザー・プログラムを作成する場合は、オラクル社がソフトウェアとともに提供するMakeファイルdemo_product.mkを使用してください。このMakeファイルを変更する場合、またはカスタムMakeファイルを使用する場合は、次の制限事項に注意してください。

- Oracleライブラリの順番は変更しないでください。リンク中にすべてのシンボルが解決されるように、Oracleライブラリはリンク・ラインに2回以上追加されます。
AIXを除き、Oracleライブラリの順番がすべてのプラットフォームで重要である理由は、次のとおりです。

- Oracleライブラリは相互に参照し合います。たとえば、ライブラリAの関数はライブラリBの関数をコールし、ライブラリBの関数はライブラリAの関数をコールします。

- HP-UXのリンカーは、1パス・リンカーです。AIX、LinuxおよびSolarisのリンカーは、2パス・リンカーです。

- ライブラリをリンク・ラインの最初または最後に追加します。Oracleライブラリ間にユーザー・ライブラリを入れないでください。

- nmakeまたはGNU makeなどのmakeユーティリティを使用する場合は、マクロおよび接頭辞の処理について、オペレーティング・システムで提供されているmakeユーティリティとの違いに注意してください。OracleのMakeファイルは、makeユーティリティによってテストおよびサポートされます。

- Oracleライブラリの名前および内容は、リリース間で変更されることがあります。必要なライブラリを判断するには、現行のリリースで提供されているMakeファイルdemo_product.mkを必ず使用してください。

6.10 未定義シンボルの修正

オラクル社が提供しているsymfindユーティリティを使用すると、シンボルが定義されているライブラリまたはオブジェクト・ファイルの場所を確認する際に役立ちます。プログラムのリンク時に、未定義シンボルは一般的なエラーの1つとみなされ、次のようなエラー・メッセージが生成されます。

$ make -f demo_proc.mk sample1
Undefined                       first referenced
symbol                             in file
sqlcex                              sample1.o
sqlglm                              sample1.o
ld: irrecoverable: Symbol referencing errors. No output written to sample1

このエラーは、参照するシンボルの定義をリンカーが検出できなかった場合に発生します。このエラー・メッセージが表示された場合は、シンボルが定義されているライブラリまたはオブジェクト・ファイルがリンク・ラインにあるかどうか、およびリンカーが検索しているファイルのディレクトリが正しいかどうかを確認します。

次の例は、symfindユーティリティの出力です。このユーティリティをsqlcexシンボルの検索に使用しています。

$ symfind sqlcex

SymFind - Find Symbol <sqlcex> in <**>.a, .o, .so
------------------------------------------------------
Command:         /u01/app/oracle/product/11.2.0/bin/symfind sqlcex
Local Directory: /u01/app/oracle/product/11.2.0
Output File:     (none)
Note:            I do not traverse symbolic links
Use '-v' option to show any symbolic links

Locating Archive and Object files ...
[11645] |    467572|      44|FUNC |GLOB |0    |8      |sqlcex
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ./lib/libclntsh.sl
[35]    |         0|      44|FUNC |GLOB |0    |5      |sqlcex
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ./lib/libsql.a

6.11 マルチスレッド・アプリケーション

このリリースで提供されているOracleライブラリはスレッド・セーフで、マルチスレッド・アプリケーションをサポートします。

6.12 シグナル・ハンドラの使用

Oracle Databaseでは、2タスク通信にいくつかのシグナルが使用されます。シグナルは、プロセスがデータベースに接続するとユーザー・プロセスにインストールされ、切断すると削除されます。

表6-5に、Oracle Databaseで2タスク通信に使用されるシグナルを示します。

表6-5 2タスク通信に使用されるシグナル

シグナル

説明

SIGCLD

Oracleプロセスが終了すると、パイプ・ドライバはSIGCLD(SIGCHLDともいいます)を使用します。SIGCLDシグナルは、オペレーティング・システム・カーネルによってユーザー・プロセスに送信されます。シグナル・ハンドラは、wait()ルーチンを使用して、サーバー・プロセスが異常終了しているかどうかを調べます。Oracleプロセスではなく、ユーザー・プロセスがSIGCLDを受け取ります。

SIGCONT

パイプ2タスク・ドライバが、バンド外ブレークをユーザー・プロセスからOracleプロセスに送信する場合に、SIGCONTを使用します。

SIGINT

2タスク・ドライバが、ユーザーの割込み要求を検出する場合に、SIGINTを使用します。Oracleプロセスではなく、ユーザー・プロセスがSIGINTを受け取ります。

SIGIO

Oracle Netプロトコルが、ネットワーク・イベントの着信を示す場合に、SIGIOを使用します。

SIGPIPE

パイプ・ドライバが、通信チャネルのファイルの終わりを検出する場合に、SIGPIPEを使用します。パイプへの書込み時に読取りプロセスが存在していない場合、SIGPIPEシグナルが書込みプロセスに送信されます。Oracleプロセスとユーザー・プロセスの両方が、SIGPIPEを受け取ります。SIGCLDは、SIGPIPEに似ていますが、ユーザー・プロセスのみに適用され、Oracleプロセスには適用されません。

SIGTERM

パイプ・ドライバが、ユーザー側からOracleプロセスに割込みシグナルを送る場合に、SIGTERMを使用します。ユーザーが割込みキー([Ctrl]+[C])を押すと、このシグナルが送信されます。ユーザー・プロセスではなく、OracleプロセスがSIGTERMを受け取ります。

SIGURG

Oracle Net TCP/IPドライバが、バンド外ブレークをユーザー・プロセスからOracleプロセスに送信する場合に、SIGURGを使用します。

表に記載されているシグナルは、すべてのプリコンパイラ・アプリケーションに影響します。Oracleプロセスへの接続時に、SIGCLD(またはSIGCHLD)およびSIGPIPEにシグナル・ハンドラを1つのみインストールできます。osnsui()ルーチンをコールして設定すると、複数のシグナル・ハンドラをSIGINT用にインストールできます。SIGINTの場合は、osnsui()およびosncui()を使用して、シグナル受取りルーチンを登録および削除します。

また、必要に応じて、他のシグナルにもシグナル・ハンドラをインストールできます。Oracleプロセスに接続していない場合は、複数のシグナル・ハンドラをインストールできます。

例6-1に、シグナル・ルーチンおよび受取りルーチンの設定方法を示します。

例6-1 シグナル・ルーチンおよび受取りルーチン

/* user side interrupt set */
word osnsui( /*_ word *handlp, void (*astp), char * ctx, _*/)
/*
** osnsui: Operating System dependent Network Set User-side Interrupt. Add an
** interrupt handling procedure astp. Whenever a user interrupt(such as a ^C)
** occurs, call astp with argument ctx. Put in *handlp handle for this
** handler so that it may be cleared with osncui. Note that there may be many
** handlers; each should be cleared using osncui. An error code is returned if
** an error occurs.
*/

/* user side interrupt clear */
word osncui( /*_ word handle _*/ );
/*
** osncui: Operating System dependent Clear User-side Interrupt. Clear the
** specified handler. The argument is the handle obtained from osnsui. An error
** code is returned if an error occurs.
*/

例6-2に、アプリケーション・プログラムでのosnsui()およびosncui()ルーチンの使用方法を示します。

例6-2 osnsui()およびosncui()ルーチンのテンプレート

/*
** User interrupt handler template.
*/
void sig_handler()
{
...
}

main(argc, argv)
int arc;
char **argv;
{

int handle, err;
...

/* Set up the user interrupt handler */
if (err = osnsui(&handle, sig_handler, (char *) 0))
{
/* If the return value is nonzero, then an error has occurred
Take appropriate action for the error. */
...
}

...

/* Clear the interrupt handler */
if (err = osncui(handle))
{
/* If the return value is nonzero, then an error has occurred
Take appropriate action for the error. */
...
}
...
}

6.13 XA機能

Oracle XAは、X/Open Distributed Transaction Processing XAインタフェースのOracle実装です。XA標準には、トランザクション内の共有リソースへのアクセスを制御するリソース・マネージャ間や、トランザクションを監視および解決するトランザクション・サービス間の双方向インタフェースが規定されています。

Oracle Call Interfaceには、XA機能があります。TPモニターXAアプリケーションを作成するときは、TPモニター・ライブラリ(シンボルax_regおよびax_unregを定義するライブラリ)が、リンク・ラインでOracle Client共有ライブラリより前に設定されていることを確認してください。このリンク制限は、XAの動的登録(Oracle XAスイッチxaoswd)を使用する場合に必要です。

Oracle DatabaseのXAコールは、クライアント共有ライブラリ(プラットフォームに応じてlibclntsh.a、libclntsh.sl、libclntsh.soまたはlibclntsh.dylib)およびクライアント静的ライブラリ(libclntst11.a)の両方で定義されています。これらのライブラリは、$ORACLE_HOME/libディレクトリにあります。

7 SQL*LoaderおよびPL/SQLのデモ

この章では、Oracle Databaseとともに使用できるSQL*LoaderとPL/SQLの各デモ・プログラムを作成および実行する方法について説明します。内容は次のとおりです。

- SQL*Loaderのデモ

- PL/SQLのデモ

- 64ビットOracle Database PL/SQLからの32ビット外部プロシージャのコール

注意:
この章で説明するデモンストレーションを使用するには、Oracle Database 11g Examplesメディアに収録されているOracle Database Examplesをインストールする必要があります。デモンストレーションを作成する前に、JONESアカウントのロックを解除してパスワードを設定する必要があります。

7.1 SQL*Loaderのデモ

SQL*Loaderのデモを実行する場合は、ulcase.shファイルを実行します。デモを個別に実行する場合は、ファイル内に含まれている情報を読んで、実行方法を確認してください。

7.2 PL/SQLのデモ

PL/SQLには多数のデモ・プログラムが含まれています。これらのプログラムを使用する前に、データベース・オブジェクトを作成し、サンプル・データをロードする必要があります。オブジェクトを作成してサンプル・データをロードするには、次の手順を実行します。

1. ディレクトリをPL/SQLデモ・ディレクトリに変更します。

$ cd $ORACLE_HOME/plsql/demo

2. SQL*Plusを起動し、次のコマンドを入力します。

$ sqlplus
SQL> CONNECT JONES
Enter password: password

3. 次のコマンドを実行し、オブジェクトを作成してサンプル・データをロードします。

SQL> @exampbld.sql
SQL> @examplod.sql

注意:
デモは、十分な権限を持つOracleユーザーとして作成してください。デモは、作成時と同じOracleユーザーで実行してください。

PL/SQLカーネル・デモ

次のPL/SQLカーネル・デモは、ソフトウェアとともに使用できます。

- examp1.sqlからexamp8.sql

- examp11.sqlからexamp14.sql

- sample1.sqlからsample4.sql

- extproc.sql

PL/SQLカーネル・デモexampn.sqlまたはsamplen.sqlをコンパイルして実行するには、次の手順に従ってください。

1. SQL*Plusを起動し、次のコマンドを入力します。

$ cd $ORACLE_HOME/plsql/demo
$ sqlplus
SQL> CONNECT JONES
Enter password: password

2. 次のようなコマンドを実行してデモを実行します。demo_nameはデモ名です。

SQL> @demo_name

extproc.sqlデモを実行するには、次の手順を実行します。

1. 必要に応じて、次のように外部プロシージャのエントリをtnsnames.oraファイルに追加します。

EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS=(PROTOCOL = IPC)( KEY = EXTPROC))
)
(CONNECT_DATA =
(SID = PLSExtProc)
)
)

2. 必要に応じて、次のように外部プロシージャのエントリをlistener.oraファイルに追加します。

注意:
listener.oraファイルのSID_NAMEに指定する値と、tnsnames.oraファイルのSIDに指定する値は、一致している必要があります。

- HP-UX、LinuxおよびSolarisの場合

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC=
(SID_NAME=PLSExtProc)
(ORACLE_HOME=oracle_home_path)
(ENVS=EXTPROC_DLLS=oracle_home_path/plsql/demo/extproc.so,
LD_LIBRARY_PATH=oracle_home_path/plsql/demo)
(PROGRAM=extproc)
)
)

- AIXの場合

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC=
(SID_NAME=PLSExtProc)
(ORACLE_HOME=oracle_home_path)
(ENVS=EXTPROC_DLLS=oracle_home_path/plsql/demo/extproc.so,
LIBPATH=oracle_home_path/plsql/demo)
(PROGRAM=extproc)
)
)

3. ディレクトリを$ORACLE_HOME/plsql/demoに変更します。

4. 次のコマンドを実行してextproc.so共有ライブラリを作成し、必要なデータベース・オブジェクトを構築してサンプル・データをロードします。

$ make -f demo_plsql.mk extproc.so exampbld examplod

データベース・オブジェクトが構築済でサンプル・データがロードされている場合は、次のコマンドを実行します。

$ make -f demo_plsql.mk extproc.so

5. SQL*Plusから、次のコマンドを実行します。

SQL> CONNECT SYSTEM
Enter password: system_password
SQL> GRANT CREATE LIBRARY TO JONES;
SQL> CONNECT JONES
Enter password: password
SQL> CREATE OR REPLACE LIBRARY demolib IS
2  'oracle_home_path/plsql/demo/extproc.so';
3  /

注意:
CREATE LIBRARYは非常に高い権限です。この権限は、信頼できるユーザーにのみ付与する必要があります。

6. デモを起動するには、次のコマンドを実行します。

SQL> @extproc

PL/SQLプリコンパイラ・デモ

注意:
この項で示すmakeコマンドは、必要なデータベース・オブジェクトを作成し、サンプル・データをJONESスキーマにロードします。

次のプリコンパイラ・デモを利用できます。

- examp9.pc

- examp10.pc

- sample5.pc

- sample6.pc

PL/SQLプリコンパイラ・デモを作成するには、$ORACLE_HOME/libディレクトリを含むようにライブラリ・パス環境変数を設定し、次のコマンドを実行します。

$ cd $ORACLE_HOME/plsql/demo
$ make -f demo_plsql.mk demos

デモを1つのみ作成する場合は、makeコマンドにそのデモ名を引数として指定します。たとえば、examp9デモを作成するには、次のコマンドを実行します。

$ make -f demo_plsql.mk examp9

examp9デモを起動するには、次のコマンドを実行します。

$ ./examp9

7.3 64ビットOracle Database PL/SQLからの32ビット外部プロシージャのコール

注意:
この項の内容は、64ビットOracle Databaseにのみ適用されます。

Oracle Database 11gリリース2(11.2)から、extproc32は64ビットOracle Databaseインストールからは使用できません。したがって、32ビット外部プロシージャを64ビットOracle Databaseから実行する必要がある場合、使用するプラットフォームに対応する32ビット・クライアント・ソフトウェアをインストールして、32ビットextprocを取得する必要があります。特に、カスタム・インストールを32ビット・クライアント・インストールで選択してから、Oracle DatabaseユーティリティおよびOracleリスナーを選択する必要があります。

つまり、32ビットextprocを実行するためには、別のOracleホーム(32ビット)が必要です。実行可能ファイル名はextproc32ではなく、単にextprocであることに注意してください。

32ビット外部プロシージャを64ビットOracle Database環境で使用できるようにするには、32ビット・リスナーをextprocに構成し、Oracleホームを(32ビット・クライアント・インストールから)extproc listener.oraエントリに指定する必要があります。

8 Oracle Databaseのチューニング

この章では、Oracle Databaseのチューニング方法について説明します。内容は次のとおりです。

- チューニングの重要性

- オペレーティング・システムのツール

- メモリー管理のチューニング

- ディスク入出力のチューニング

- ディスク・パフォーマンスの監視

- システム・グローバル領域

- オペレーティング・システムのバッファ・キャッシュのチューニング

8.1 チューニングの重要性

この項では、Oracle Databaseを効率的にチューニングし、パフォーマンスを最適化することを目的としています。チューニングを頻繁に行うことで、システム・パフォーマンスが強化され、データのボトルネックの発生を防ぐことができます。

データベースのチューニングを始める前に、「オペレーティング・システムのツール」で説明するツールを使用して、通常の動作を監視する必要があります。

8.2 オペレーティング・システムのツール

データベースのパフォーマンスを評価し、データベース要件を決定できるオペレーティング・システム・ツールがいくつかあります。これらのツールは、Oracleプロセスの統計に加えて、システム全体のCPU使用率、割込み、スワッピング、ページング、コンテキストのスイッチング、入出力についての統計情報も提供します。

この項では、次に示す共通のツールについて説明します。

- vmstat

- sar

- iostat

- swap、swapinfo、swaponまたはlsps

- AIXのツール

- HP-UXのツール

- Linuxのツール

- Solarisのツール

関連項目:
これらのツールの詳細は、オペレーティング・システムのドキュメントおよびmanページを参照してください。

8.2.1 vmstat

プロセス、仮想メモリー、ディスク、トラップおよびCPUアクティビティを表示するときは、vmstatコマンドを使用します。表示内容はコマンドで切り替えます。CPUアクティビティのサマリーを5秒間隔で6回表示する場合は、次のいずれかのコマンドを実行します。

- HP-UXおよびSolarisの場合

$ vmstat -S 5 6

- AIXおよびLinuxの場合

$ vmstat 5 6

次に、このコマンドをHP-UXで実行した場合の出力例を示します。

procs     memory            page            disk          faults      cpu
r b w   swap  free  si  so pi po fr de sr f0 s0 s1 s3   in   sy   cs us sy id
0 0 0   1892  5864   0   0  0  0  0  0  0  0  0  0  0   90   74   24  0  0 99
0 0 0  85356  8372   0   0  0  0  0  0  0  0  0  0  0   46   25   21  0  0 100
0 0 0  85356  8372   0   0  0  0  0  0  0  0  0  0  0   47   20   18  0  0 100
0 0 0  85356  8372   0   0  0  0  0  0  0  0  0  0  2   53   22   20  0  0 100
0 0 0  85356  8372   0   0  0  0  0  0  0  0  0  0  0   87   23   21  0  0 100
0 0 0  85356  8372   0   0  0  0  0  0  0  0  0  0  0   48   41   23  0  0 100

procs列の下にあるwサブ列は、スワップ・アウトされてディスクに書き込まれたプロセスの数を示します。値が0(ゼロ)以外の場合は、スワッピングが発生してシステムがメモリー不足になっています。

page列の下にあるsi列およびso列は、それぞれ1秒当たりのスワップ・インとスワップ・アウトの回数を示します。スワップ・インとスワップ・アウトは、常に0(ゼロ)にしてください。

page列の下にあるsr列は、スキャン率を示します。利用できるメモリーが不足すると、スキャン率が高くなります。

page列の下にあるpi列およびpo列は、それぞれ1秒当たりのページインとページアウトの回数を示します。ページインおよびページアウトの回数は通常、増加します。使用できるメモリーが十分にあるシステムでも、常に多少のページングは行われます。

注意:
vmstatコマンドの出力は、プラットフォーム間で異なります。

関連項目:
出力の解釈については、manページを参照してください。

8.2.2 sar

オペレーティング・システムのアクティビティ・カウンタの累計を表示するときは、sar(system activity reporter)コマンドを使用します。表示内容はコマンドで切り替えます。

HP-UXシステムの場合、次のコマンドは、入出力アクティビティのサマリーを10秒ごとに表示します。

$ sar -b 10 10

次に、このコマンドを実行した場合の出力例を示します。

13:32:45 bread/s lread/s %rcache bwrit/s lwrit/s %wcache pread/s pwrit/s
13:32:55       0      14     100       3      10      69       0       0
13:33:05       0      12     100       4       4       5       0       0
13:33:15       0       1     100       0       0       0       0       0
13:33:25       0       1     100       0       0       0       0       0
13:33:35       0      17     100       5       6       7       0       0
13:33:45       0       1     100       0       0       0       0       0
13:33:55       0       9     100       2       8      80       0       0
13:34:05       0      10     100       4       4       5       0       0
13:34:15       0       7     100       2       2       0       0       0
13:34:25       0       0     100       0       0     100       0       0

Average        0       7     100       2       4      41       0       0

sar出力は、ある時点におけるシステムの入出力アクティビティのスナップショットを提供します。複数のオプションを使用して時間隔を指定すると、出力の読取りができなくなることがあります。時間隔を4以下に指定すると、sarアクティビティ自体が出力に影響を与えることがあります。

関連項目:
sarの詳細は、manページを参照してください。

8.2.3 iostat

端末およびディスクのアクティビティを表示するときは、iostatコマンドを使用します。表示内容は、コマンドで切り替えます。iostatコマンドの出力には、ディスク要求キューは表示されず、ビジー状態のディスクが表示されます。この情報は、入出力負荷のバランスを調整する場合に役立ちます。

次のコマンドは、端末およびディスク・アクティビティを5秒間隔で5回表示します。

$ iostat 5 5

次に、このコマンドをSolarisで実行した場合の出力例を示します。

tty          fd0           sd0           sd1           sd3          cpu
tin tout Kps tps serv  Kps tps serv  Kps tps serv  Kps tps serv  us sy wt id
0    1   0   0    0    0   0   31    0   0   18    3   0   42   0  0  0 99
0   16   0   0    0    0   0    0    0   0    0    1   0   14   0  0  0 100
0   16   0   0    0    0   0    0    0   0    0    0   0    0   0  0  0 100
0   16   0   0    0    0   0    0    0   0    0    0   0    0   0  0  0 100
0   16   0   0    0    0   0    0    2   0   14   12   2   47   0  0  1 98

大きなディスク要求キューを調べるときは、iostatコマンドを使用します。要求キューは、特定のディスク・デバイスに対する入出力要求が実行されるまでにかかる時間を示します。要求キューが発生する原因は、特定のディスクに対する入出力要求のボリュームが大きいこと、または入出力の平均シーク時間が長いことです。ディスク要求キューは、0(ゼロ)またはそれに近い値であることが理想的です。

8.2.4 swap、swapinfo、swaponまたはlsps

スワップ領域の使用量に関する情報を表示するときは、swap、swapinfo、swaponまたはlspsの各コマンドを使用します。スワップ領域が不足するとプロセスの応答が停止し、Out of Memoryエラーでプロセスが生成できなくなることがあります。次の表は、プラットフォームごとの適切なコマンドの一覧です。

プラットフォーム

コマンド

AIX

lsps -a

HP-UX

swapinfo -m

Linux

swapon -s

Solaris

swap -lおよびswap -s

次に、swap -lコマンドをSolarisで実行した場合の出力例を示します。

swapfile             dev        swaplo blocks        free
/dev/dsk/c0t3d0s1    32,25      8      197592        162136

8.2.5 AIXのツール

次の項では、AIXシステム上で使用可能なツールについて説明します。

- Base Operation Systemツール

- Performance Toolbox

- System Management Interface Tool

関連項目:
これらのツールの詳細は、AIXオペレーティング・システムのドキュメントおよびmanページを参照してください。

8.2.5.1 Base Operation Systemツール

AIXのBase Operation Systemには、UNIXシステムに以前から含まれていたパフォーマンス・ツールや、AIXの実装固有の機能を管理するために必要なパフォーマンス・ツールが含まれます。次の表に、最も重要なBase Operation Systemツールを示します。

ツール

機能

lsattr

デバイスの属性を表示します。

lslv

論理ボリューム、つまり物理ボリュームに対する論理ボリュームの割当てに関する情報を表示します。

netstat

ネットワーク関連のデータ構造の内容を表示します。

nfsstat

ネットワーク・ファイル・システムおよびリモート・プロシージャ・コールのアクティビティに関する統計を表示します。

nice

プロセスの初期優先順位を変更します。

no

ネットワーク・オプションを表示または設定します。

ps

1つ以上のプロセスのステータスを表示します。

reorgvg

ボリューム・グループ内の物理パーティション割当てを再編成します。

time

経過した実行時間、ユーザーのCPU処理時間およびシステムのCPU処理時間を表示します。

trace

選択したシステム・イベントを記録および報告します。

vmo

仮想メモリー・マネージャのチューニング可能なパラメータを管理します。

8.2.5.2 Performance Toolbox

AIXのPerformance Toolboxには、システム・アクティビティをローカルおよびリモートで監視しチューニングするためのツールが含まれます。Performance Tool Boxは、Performance Tool Box ManagerおよびPerformance Tool Box Agentの2つのコンポーネントで主に構成されています。Performance Tool Box Managerは、xmperfユーティリティを使用して、構成内の様々なシステムからデータを収集および表示します。Performance Tool Box Agentは、xmserdデーモンを使用して、Performance Tool Box Managerからデータを収集しデータを転送します。Performance Tool Box Agentは、Performance Aide for AIXと呼ばれる個別の製品としても使用できます。

Performance Tool BoxおよびPerformance Aideの両方に、次の表に示す監視およびチューニング・ツールが含まれます。

ツール

説明

fdpr

特定のワークロードに対する実行可能プログラムを最適化します。

filemon

トレース機能を使用して、ファイル・システムのアクティビティを監視および報告します。

fileplace

論理または物理ボリューム内のファイルのブロックの配置を表示します。

lockstat

カーネル・ロックの競合に関する統計を表示します。

lvedit

ボリューム・グループ内の論理ボリュームを対話方式で配置します。

netpmon

トレース機能を使用して、ネットワークの入出力およびネットワーク関連のCPU使用率を報告します。

rmss

システムを様々なメモリー・サイズでシミュレートし、パフォーマンスをテストします。

svmon

仮想メモリーの使用量に関する情報を取得および分析します。

syscalls

システム・コールを記録し、件数をカウントします。

tprof

trace機能を使用して、モジュールおよびソース・コード文レベルのCPU使用率を報告します。

BigFoot

プロセスのメモリー・アクセスのパターンを報告します。

stem

サブルーチン・レベルのエントリを許可し、既存の実行可能ファイルのインスツルメント処理を終了します。

関連項目:

- これらのツールの詳細は、『Performance Toolbox for AIX Guide and Reference』を参照してください

- これらのツールの構文については、『AIX 5L Performance Management Guide』を参照してください。

8.2.5.3 System Management Interface Tool

AIXのSystem Management Interface Tool(SMIT)は、様々なシステム管理およびパフォーマンス・ツールに、メニュー方式のインタフェースを提供します。SMITを使用すると、様々なツールにナビゲートし、実行するジョブに集中できます。

8.2.6 HP-UXのツール

次のパフォーマンス分析ツールが、HP-UXシステムで使用できます。

- GlancePlus/UX

このHP-UXユーティリティは、システムのアクティビティを測定するオンライン診断ツールです。GlancePlusでは、システム・リソースの使用状況に関する情報が表示されます。システムの入出力、CPUおよびメモリー使用量に関する動的な情報が、一連の画面に表示されます。このユーティリティを使用して、プロセスごとのリソースの使用状況を監視できます。

- HP Programmer's Analysis Kit

HP Programmer's Analysis Kitには、次のツールが含まれます。

- Puma
このツールは、プログラムの実行中にパフォーマンス統計を収集します。グラフ表示により、収集した統計を表示および分析できます。

- Thread Trace Visualizer
このツールは、インスツルメント処理スレッド・ライブラリ、libpthread_tr.slにより作成されるトレース・ファイルを、グラフ表示します。これにより、スレッドの相互作用を表示し、スレッドがブロックされてリソースを待機している箇所を確認できます。

HP Programmer's Analysis Kitは、HP Fortran 77、HP Fortran 90、HP C、HP C++、HP ANSI C++およびHP Pascalのコンパイラに同梱されています。

次の表に、HP-UXでパフォーマンス・チューニングの追加に使用できるパフォーマンス・チューニング・ツールを示します。

ツール

機能

caliper
(Itaniumのみ)

高速の動的インスツルメント処理とともに、キャッシュ・ミス、Translation Look-aside Bufferまたは命令サイクルなどの分析タスクのためにランタイム・アプリケーション・データを収集します。これは、C、C++、Fortranおよびアセンブリ・アプリケーション用の動的パフォーマンス測定ツールです。

gprof

プログラムの実行プロファイルを作成します。

monitor

プログラム・カウンタを監視し、特定の関数をコールします。

netfmt

ネットワークを監視します。

netstat

ネットワーク・パフォーマンスに関する統計を報告します。

nfsstat

ネットワーク・ファイル・システムおよびリモート・プロシージャ・コールのアクティビティに関する統計を表示します。

nettl

ロギングおよびトレースにより、ネットワーク・イベントまたはパケットを取得します。

prof

Cプログラムの実行プロファイルを作成してプログラムのパフォーマンス統計を表示し、プログラムの実行時間の大半が消費されている箇所を示します。

profil

プログラム・カウンタ情報をバッファにコピーします。

top

システム上の上位プロセスを表示し、情報を定期的に更新します。

8.2.7 Linuxのツール

Linuxシステムでは、top、freeおよびcat /proc/meminfoコマンドを使用して、スワップ領域、メモリーおよびバッファの使用量を表示します。

8.2.8 Solarisのツール

Solarisシステムでは、mpstatコマンドを使用して、マルチプロセッサ・システムの各プロセッサの統計を表示します。表の各行は、1プロセッサのアクティビティを示します。1行目は、システムが再起動してからのすべてのアクティビティをまとめて表示します。後続の各行は、前の時間隔のアクティビティをまとめて表示します。すべての値は、特に明記されていない場合は、1秒当たりのイベント数です。引数は、統計および反復回数の間の時間隔です。

次に、mpstatコマンドを実行した場合の出力例を示します。

CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
0    0   0    1    71   21   23    0    0    0    0    55    0   0   0  99
2    0   0    1    71   21   22    0    0    0    0    54    0   0   0  99
CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
0    0   0    0    61   16   25    0    0    0    0    57    0   0   0 100
2    1   0    0    72   16   24    0    0    0    0    59    0   0   0 100

8.3 メモリー管理のチューニング

メモリー・チューニング・プロセスでは、最初にページングおよびスワッピング領域を測定して、使用可能なメモリー量を確認します。 システムのメモリー使用量の確認後、Oracleバッファ・キャッシュをチューニングします。

Oracleバッファ・マネージャによって、アクセス頻度の最も高いデータをキャッシュに長く保存できます。バッファ・マネージャを監視し、バッファ・キャッシュをチューニングすると、Oracle Databaseのパフォーマンスが大幅に向上することがあります。各システムのOracle Databaseバッファ・サイズの最適値は、システム全体の負荷や他のアプリケーションと比較した場合のOracle Databaseの優先順位によって異なります。

この項では、次の項目について説明します。

- 十分なスワップ領域の割当て

- ページングの制御

- Oracleブロック・サイズの調整

- メモリー・リソースの割当て

8.3.1 十分なスワップ領域の割当て

スワッピングは、オペレーティング・システムのオーバーヘッドに大きく影響するため、最小限に抑える必要があります。スワッピングが行われているかどうかを調べるには、sarコマンドまたはvmstatコマンドを使用します。これらのコマンドで使用するオプションについては、manページを参照してください。

システムでスワッピングが行われている場合は、メモリーを節約するために、次の処理を行います。

- 必要以上にシステム・デーモン・プロセスまたはアプリケーション・プロセスを実行しないようにします。

- データベース・バッファの数を減らし、一部のメモリーを解放します。

- オペレーティング・システム・ファイル・バッファの数を減らします。

スワップ領域の使用量を確認するには、プラットフォームに応じて、次のいずれかのコマンドを実行します。

プラットフォーム

コマンド

AIX

lsps -a

HP-UX

swapinfo -m

Linux

swapon -s

Solaris

swap -lおよびswap -s

スワップ領域をシステムに追加するには、プラットフォームに応じて、次のいずれかのコマンドを実行します。

プラットフォーム

コマンド

AIX

chpsまたはmkps

HP-UX

swapon

Linux

swapon -a

Solaris

swap -a

スワップ領域は、使用している物理RAMとメモリー機能に基づいて、プラットフォーム固有のインストレーション・ガイドに示されているレベルに設定します。

関連項目:

- スワップ領域の確認の詳細は、使用しているプラットフォームの『Oracle Databaseインストレーション・ガイド』を参照

- これらのコマンドの詳細は、オペレーティング・システムのドキュメントを参照してください。

8.3.2 ページングの制御

プログラムを実行するためにプログラム全体をメモリーに格納しておく必要はないため、ページングはスワッピングほど深刻な問題ではありません。少量のページアウトでは、システムのパフォーマンスにほとんど影響はありません。

大量のページングを検出するには、高速応答時またはアイドル時の測定値と、低速応答時の測定値を比較します。

ページングを監視するには、vmstatコマンドおよびsarコマンドを使用します。

関連項目:
プラットフォームの監視結果の解釈については、manページまたはオペレーティング・システムのドキュメントを参照してください。

次の表に、これらのコマンドの重要な出力列を示します。

プラットフォーム

列

機能

Solaris

vflt/s

アドレス変換ページ・フォルトの数を示します。アドレス変換フォルトは、メモリー内にない有効なページをプロセスが参照した場合に発生します。

HP-UX

at

アドレス変換ページ・フォルトの数を示します。アドレス変換フォルトは、メモリー内にない有効なページをプロセスが参照した場合に発生します。

HP-UX

re

ページアウト・アクティビティにより解放され、空きリストに追加された有効ページ数を示します。この値は、0(ゼロ)である必要があります。

システムで大量のページアウト・アクティビティが常に発生している場合は、次の方法で解決してください。

- メモリーを増設します。

- 一部の作業を別のシステムに移します。

- システム・グローバル領域(SGA)で使用するメモリーを少なく設定します。

8.3.3 Oracleブロック・サイズの調整

読取り操作時には、オペレーティング・システムのブロック全体がディスクから読み取られます。データベースのブロック・サイズが、オペレーティング・システムのファイル・システムのブロック・サイズより小さい場合は、入出力バンド幅の効率が悪くなります。Oracle Databaseのブロック・サイズをファイル・システムのブロック・サイズの倍数になるように設定すると、パフォーマンスを最大5%向上させることができます。

データベースのブロック・サイズは、DB_BLOCK_SIZE初期化パラメータで設定します。ただし、このパラメータの値を変更するには、データベースを再作成する必要があります。

DB_BLOCK_SIZEパラメータの現在の設定値を調べるには、SQL*PlusのSHOW PARAMETER DB_BLOCK_SIZEコマンドを実行します。

8.3.4 メモリー・リソースの割当て

パラメータを設定して、ワークロードの要件、および同じシステムで稼働している様々なデータベース・インスタンスの要件に基づいて、自動的にメモリーを割り当てることができます。MEMORY_TARGETパラメータは、そのインスタンスに対してOracleシステム全体の使用可能メモリーを指定し、SGAおよびProcess Global Area(PGA)コンポーネントを自動的にチューニングします。MEMORY_MAX_TARGETパラメータは、MEMORY_TARGETパラメータが動的に増加できる上限値を示します。

デフォルトでは、これらのパラメータの値は両方とも0であり、自動チューニングは行われません。自動チューニングをアクティブにするには、MEMORY_TARGETパラメータを0以外の値に設定します。MEMORY_TARGETパラメータを動的に有効にするには、起動時にMEMORY_MAX_TARGETパラメータを設定する必要があります。

注意:
MEMORY_TARGETパラメータを0以外の値に設定すれば、MEMORY_MAX_TARGETパラメータは自動的にこの値を取得します。
MEMORY_TARGETおよびMEMORY_MAX_TARGETパラメータは、Linux、Solaris、AIXおよびHP-UXのプラットフォームでのみサポートされています。

Solarisでは、MEMORY_TARGETまたはMEMORY_MAX_TARGETで動的緊密共有メモリーを使用できます。詳細は、付録Dを参照してください。

Linuxでは、MEMORY_TARGETまたはMEMORY_MAX_TARGETが有効になっている場合、一部の共有リソース要件が増加します。詳細は、「共有リソースの割当て」の項を参照してください。

ヒント:
MEMORY_TARGETおよびMEMORY_MAX_TARGETパラメータは、元の設定、コンピュータ上のOracleに使用可能なメモリー、およびワークロードのメモリー要件に基づいて設定できます。

8.4 ディスク入出力のチューニング

使用可能なディスク全体で入出力を均等に分散して、ディスクへのアクセス時間が短くなるようにしてください。小規模なデータベースやRAIDを使用しないデータベースでは、それぞれのデータファイルと表領域を使用可能なディスク間に分散してください。

この項では、次の項目について説明します。

- 自動ストレージ管理の使用

- 適切なファイル・システム・タイプの選択

8.4.1 自動ストレージ管理の使用

データベース記憶域に自動ストレージ管理を使用すると、すべてのデータベース入出力が、自動ストレージ管理ディスク・グループ内の使用可能なすべてのディスク・デバイス間に分散されます。

自動ストレージ管理を使用することで、ディスク入出力を手動でチューニングする必要がなくなります。

8.4.2 適切なファイル・システム・タイプの選択

オペレーティング・システムに応じて、いくつかのファイル・システム・タイプから選択できます。ファイル・システム・タイプごとにそれぞれ特性が異なります。このことが、データベースのパフォーマンスに大きな影響を与えます。次の表に、一般的なファイル・システム・タイプを示します。

ファイル・システム

プラットフォーム

説明

S5

HP-UXおよびSolaris

UNIX System Vファイル・システム

UFS

AIX、HP-UXおよびSolaris

Unifiedファイル・システム(BSD UNIXから派生)

VxFs

AIX、HP-UXおよびSolaris

VERITASファイル・システム

ext2/ext3

Linux

Linux用拡張ファイル・システム

OCFS2

Linux

Oracle Clusterファイル・システム

JFS/JFS2

AIX

ジャーナル・ファイル・システム

GPFS

AIX

一般的なパラレル・ファイル・システム

ファイル・システムとアプリケーションには、必ずしも互換性があるとはかぎりません。たとえば、Unifiedファイル・システムの各実装間でさえ、互換性の比較は容易ではありません。選択したファイル・システムによって、パフォーマンスに最大20%の開きが出る場合があります。ファイル・システムを使用する場合は、次のことを行ってください。

- ハードディスクがクリーンで断片化されないように、ファイル・システムのパーティションを新しく作成します。

- データベース・ファイルに対してファイル・システムを使用する前に、パーティションでファイル・システム・チェックを行います。

- ディスク入出力をできるだけ均等に分散します。

- 論理ボリューム・マネージャまたはRAIDデバイスを使用していない場合、データファイルとは異なるファイル・システムにログ・ファイルを格納することを検討してください。

8.5 ディスク・パフォーマンスの監視

次の項では、ディスク・パフォーマンスの監視方法について説明します。

- その他のオペレーティング・システムでのディスク・パフォーマンスの監視

- ディスク再同期化の使用による自動ストレージ管理ディスク・グループの監視

8.5.1 その他のオペレーティング・システムでのディスク・パフォーマンスの監視

ディスク・パフォーマンスを監視するには、sar -bおよびsar -uコマンドを使用します。

次の表に、sar -bコマンド出力の列をいくつか示します。これらの列は、ディスク・パフォーマンスの分析に重要です。

列

説明

bread/s、bwrit/s

1秒ごとに読み取られるブロック数と書き込まれるブロック数(ファイル・システム・データベースに重要)

pread/s、pwrit/s

RAW特性デバイスに対する1秒当たりの読取り数または書込み数

ディスク・パフォーマンスの分析に重要なsar -u列の1つに、%wioがあります。これによって、ブロックされた入出力で待機するCPU時間の割合がわかります。

注意:
一部のLinuxでは、sar -uコマンドの出力結果に%wio列が表示されません。詳細な入出力統計を表示するには、iostat -xコマンドを使用できます。

キー・インジケータは次のとおりです。

- bread、bwrit、preadおよびpwrit列の値の合計は、ディスク入出力サブシステムのアクティビティのレベルを示します。合計値が大きいほど、入出力サブシステムはビジーになります。物理ドライブの数が多いほど、合計のしきい値が高くなる可能性があります。デフォルトの最適値は、ドライブ2個の場合は40以下、ドライブ4から8個の場合は60以下です。

- %rcache列の値は91以上、%wcache列の値は61以上である必要がありますそれ以外の場合は、システムがディスク入出力バウンドになる可能性があります。

- %wio列の値が常に21以上の場合、システムは入出力バウンドになります。

8.5.2 ディスク再同期化の使用による自動ストレージ管理ディスク・グループの監視

alter diskgroup disk onlineおよびalter diskgroup disk offlineコマンドを使用して、ディスク・セットへの入出力を一時的に停止します。これらのコマンドを使用すると、定期的なメンテナンス・タスクを実行したり、ディスク・ファームウェアのアップグレードなどのアップグレードを実行することができます。ディスク・グループ内の一部のディスクで一時的な障害が発生した場合は、alter diskgroup disk onlineを使用して、ディスク・グループを迅速にリカバリします。

8.6 システム・グローバル領域

SGAとは、共有メモリーに格納されているOracle構造体のことです。これには、静的データ構造体、ロックおよびデータ・バッファが含まれています。

1つの共有メモリー・セグメントの最大サイズは、shmmaxカーネル・パラメータで指定します。

次の表に、このパラメータの推奨値をプラットフォームごとに示します。

プラットフォーム

推奨値

AIX

該当なし

HP-UX

システムに搭載された物理メモリーのサイズ。

Linux

次の値のうち小さいほう。

- システムに搭載された物理メモリーの半分のサイズ。

- 4GB - 1バイト

Solaris

4294967295または4GB - 16MB。
注意: システムで、Oracle9i DatabaseおよびOracle Database 11gの両方のインスタンスが実行されている場合、shm_maxの値を2GB - 16MBに設定する必要があります。Solarisの場合、より大きいSGAサイズに対応するように、この値を4GBより大きくできます。

SGAのサイズが共有メモリー・セグメントの最大サイズ(shmmaxまたはshm_max)を超える場合、Oracle Databaseでは、要求されたSGAサイズになるように、連続したセグメントが連結されます。shmsegカーネル・パラメータには、任意のプロセスで連結できるセグメントの最大数を指定します。SGAのサイズを制御するには、次の初期化パラメータを設定します。

- DB_CACHE_SIZE

- DB_BLOCK_SIZE

- JAVA_POOL_SIZE

- LARGE_POOL_SIZE

- LOG_BUFFERS

- SHARED_POOL_SIZE

または、SGAサイズを自動的にチューニングできるように、SGA_TARGET初期化パラメータを設定します。

注意:
これらのパラメータの値が適切に設定されていることを確認します。値を大きく設定しすぎると、物理メモリーに対する共有メモリーの割合が非常に高くなります。そのため、パフォーマンスが低下します。

共有サーバーで構成されているOracle Databaseでは、SHARED_POOL_SIZE初期化パラメータの値を大きく設定するか、LARGE_POOL_SIZE初期化パラメータを使用したカスタム構成が必要です。Oracle Universal Installerを使用してデータベースをインストールした場合、SHARED_POOL_SIZEパラメータの値は、Oracle Database Configuration Assistantによって自動的に設定されます。ただし、データベースを手動で作成した場合は、パラメータ・ファイルでSHARED_POOL_SIZEパラメータの値を同時ユーザーごとに1KBずつ増やしてください。

各OracleプロセスがSGA全体をアドレス指定するためには、十分な共有メモリーが必要です。

- SGAサイズの確認

- システム・リソース検証ユーティリティ

- AIXの共有メモリー

8.6.1 SGAサイズの確認

次のいずれかの方法で、SGAサイズを確認できます。

- 次のSQL*Plusコマンドを実行して、実行中のデータベースのSGAサイズを表示します。

SQL> SHOW SGA

結果はバイト単位で表示されます。

- データベース・インスタンスを起動すると、SGAがシステム・グローバル領域の合計ヘッダーの横に表示されます。

- oracleユーザーでipcsコマンドを実行します。

8.6.2 システム・リソース検証ユーティリティ

システム・リソース検証ユーティリティ(sysresv)は、Oracle Database 8i以上のリリースで使用できます。これを使用すると、指定したOracleシステム識別子(ORACLE_SID)に対してOracleインスタンスおよびオペレーティング・システム・リソースの情報が提供されます。このユーティリティは$ORACLE_HOME/binにありますが、他の場所から使用できます。

8.6.2.1 sysresvユーティリティの目的

sysresvユーティリティを使用して、Oracleインスタンスのステータスを表示したり、そのインスタンスが使用するオペレーティング・システム・リソース(メモリーやセマフォ・パラメータなど)を特定します。このユーティリティは、複数のインスタンスが実行されている場合に特に役立ちます。たとえば、インスタンスが応答しない場合は、このユーティリティを使用してオペレーティング・システム・リソースを削除できます。

Oracleインスタンスがクラッシュしたか、強制終了された場合にこのインスタンスに関連するメモリーおよびセマフォが自動的にクリーンアップされなかったときに、このユーティリティを使用できます。このユーティリティは、実行されているOracleインスタンスを判断する際にも役立ちます。

8.6.2.2 sysresvを使用するための条件

sysresvユーティリティを使用するには、システム・グローバル領域(SGA)へのアクセス権が必要です。SGAにアクセスするには、Oracle所有者またはOracleバイナリを所有するグループのメンバーである必要があります。

8.6.2.3 sysresvの構文

sysresvユーティリティの構文は次のとおりです。

sysresv [-i] [-f] [-d on|off] [-l sid1[ sid2 ...]]

説明は次のとおりです。

- -i: 各sidのIPCリソースを削除する前に確認を求めます。

- -f: 確認を求めずにIPCリソースを削除します。このフラグは-iオプションよりも優先されます

- -d on|off: onの場合は各sidのIPCリソースを一覧表示します。指定しない場合、-dのデフォルトはonです

- -l sid1 [sid2 sid3]: 空白区切りの1つ以上のシステム識別子に対してsysresvチェックを実行します

sysresvをフラグなしで使用した場合、環境変数のOracleインストール所有者ユーザー・プロファイル・リストの$ORACLE_SID環境変数によって識別されるOracleインスタンスのIPCリソースがレポートされます。

8.6.2.4 sysresvの使用例

次の例では、sysresvユーティリティを使用する方法を示します。

$ sysresv
IPV Resources for ORACLE_SID "sales" :
Shared Memory:
ID                            KEY
10345                    0x51c051ad
Semaphores
ID
10345                    0x51c051ad
Oracle Instance alive for sid "sales"

8.6.3 AIXの共有メモリー

注意:
この項の内容は、AIXのみに適用されます。

共有メモリーでは、プロセス間で共通の仮想メモリー・リソースが使用されます。プロセスは、パフォーマンスを向上させるために、表やキャッシュ済エントリなどの仮想メモリー変換リソース・セットを介して仮想メモリー・セグメントを共有します。

共有メモリーを固定して、ページングを防ぎ、入出力のオーバーヘッドを減らすことができます。そのためには、LOCK_SGAパラメータをtrueに設定します。AIX 5Lの場合、基礎となるハードウェアでラージ・ページ機能がサポートされていれば、同じパラメータによりこの機能がアクティブになります。

次のコマンドを実行し、固定されたメモリーをOracle Databaseで使用できるようにします。

$ /usr/sbin/vmo -r -o v_pinshm=1

設定する実メモリーの最大の割合がpercent_of_real_memoryの場合、次のようなコマンドを実行し、固定されたメモリーで使用可能な実メモリーの最大量を設定します。

$ /usr/sbin/vmo -r -o maxpin percent=percent_of_real_memory

maxpin percentオプションを使用する場合、固定できる空きメモリーをカーネルで使用可能にするためには、固定されたメモリーの量がOracle SGAのサイズを、システム上の実メモリーの3%以上は超えている必要があります。たとえば、2GBの物理メモリーで、400MB(RAMの20%)のSGAを固定する場合、次のコマンドを実行します。

$ /usr/sbin/vmo -r -o maxpin percent=23

注意:
デフォルトのmaxpin percent値は80 percentに設定され、ほとんどのインストールで機能します。

svmonコマンドを実行し、システムの操作時に固定されたメモリーの使用量を監視します。LOCK_SGAパラメータがtrueに設定されている場合にのみ、Oracle Databaseはメモリーの固定を実行します。SGAサイズが、固定に使用できるメモリーのサイズを超える場合、これらのサイズを超えるSGAの部分が、通常の共有メモリーに割り当てられます。

AIX POWER4-およびPOWER5-Based Systemsでのラージ・ページ機能

POWER4またはPOWER5システム上で10件の16MBのラージ・ページをオンにし、予約するには、次のコマンドを実行します。

$ /usr/sbin/vmo -r -o lgpg_regions=10 -o lgpg_size=16777216

このコマンドは、bosbootを促し、変更を有効にするには再起動が必要であることを警告します。

SGA全体を格納できる十分な大きさのラージ・ページを指定することをお薦めします。LOCK_SGAパラメータがtrueに設定されている場合、Oracle Databaseインスタンスはラージ・ページの割当てを実行します。

16MBのページが常に固定され、これは標準メモリーには使用できません。16MBサイズのページのプールが構成されている場合、このメモリーは、他のアプリケーションがラージ・ページを現在使用していなくても標準メモリーの割当てに使用できません。

POWER5ベース・システムでは64Kページがサポートされます。Oracleでは、使用可能な場合は、これらのページをSGAに使用します。これらの64Kページには、追加構成が必要ありません。また、LOCK_SGAパラメータ設定に依存しません。

ラージ・ページの使用を監視するには、次のコマンドを使用します。

$ vmstat -P all

AIXオペレーティング・システムで16MBページまたは固定されたメモリー(共有メモリーの割り当て時)を使用する場合、OracleユーザーIDには、CAP_BYPASS_RAC_VMMおよびCAP_PROPAGATE機能が必要です。データベース・インスタンスの起動に使用するユーザーIDにも、同じ機能が必要です。特に、Oracle Real Application Cluster(Oracle RAC)データベースでラージ・ページを使用する場合は、Oracle RACデータベース・インスタンスの起動および停止にsrvctlコマンドを使用するため、CAP_BYPASS_RAC_VMMおよびCAP_PROPAGATE機能をrootユーザーにも設定する必要があります。

関連項目:
固定されたメモリーおよびラージ・ページの詳細は、AIXのドキュメントを参照してください。

これらの機能は、次のコマンドを使用して設定および確認できます。

- 次のコマンドを実行して、現在の機能を確認します。

$ lsuser –a capabilities oracle

- CAP_BYPASS_RAC_VMMおよびCAP_PROPAGATE機能をこのユーザーIDに追加します。

$ chuser capabilities=CAP_BYPASS_RAC_VMM,CAP_PROPAGATE oracle

注意:
機能の属性を表示および設定できるのは、rootユーザーのみです。

8.7 オペレーティング・システムのバッファ・キャッシュのチューニング

Oracle Databaseバッファ・キャッシュのサイズを調整します。メモリーに制限がある場合は、オペレーティング・システムのバッファ・キャッシュも調整します。

オペレーティング・システムのバッファ・キャッシュには、メモリーからディスクまたはディスクからメモリーへの転送中に、メモリー内のデータ・ブロックが保持されます。

Oracle Databaseバッファ・キャッシュは、Oracle Databaseバッファを格納するためのメモリー内の領域です。

システムで使用できるメモリーに制限がある場合は、それに応じてオペレーティング・システムのバッファ・キャッシュのサイズを小さくします。

調整するバッファ・キャッシュを判断するには、sarコマンドを使用します。

A AIXシステムでのOracle Databaseの管理

この付録では、AIXシステムでOracle Databaseを管理する方法について説明します。内容は次のとおりです。

- メモリーおよびページング

- ディスク入出力の問題

- CPUのスケジューリングおよびプロセスの優先順位

- 環境変数AIXTHREAD_SCOPEの設定

- ネットワーク情報サービスの外部ネーミングのサポート

- AIX 5.3以上のバージョンでのマルチスレッド同時処理

- Oracle JDBC Thinドライバを使用したIBM JSSE Providerの構成

A.1 メモリーおよびページング

メモリーの競合は、プロセスに必要なメモリー量が、使用できる容量よりも大きくなったときに発生します。このようなメモリー不足に対処するため、メモリーとディスク間でプログラムおよびデータのページングが行われます。

この項では、次の項目について説明します。

- バッファ・キャッシュのページング・アクティビティの制御

- AIXファイル・バッファ・キャッシュのチューニング

- 十分なページング領域の割当て

- ページングの制御

- データベース・ブロック・サイズの設定

- ログ・アーカイブ・バッファのチューニング

- 入出力バッファおよびSQL*Loader

A.1.1 バッファ・キャッシュのページング・アクティビティの制御

ページング・アクティビティが過剰に実行されると、パフォーマンスが大幅に低下します。これは、ジャーナル・ファイル・システム(JFSおよびJFS2)上に作成されたデータベース・ファイルで問題になることがあります。この状況では、大量のSGAデータ・バッファに、参照頻度の最も高いデータを含む、類似したファイル・システム・バッファが存在する可能性があります。AIXファイル・バッファ・キャッシュ・マネージャの動作は、パフォーマンスに大きく影響します。このため、入出力ボトルネックが発生し、システム全体のスループットが低下する可能性があります。

バッファ・キャッシュのページング・アクティビティはチューニングできますが、頻度を制限して慎重に行う必要があります。/usr/sbin/vmo コマンドを使用して、次の表に示すAIXシステム・パラメータをチューニングします。

パラメータ

説明

minfree

空きリストの最小サイズ。バッファ内の空きリスト領域がこのサイズを下回ると、ページ・スティーリングにより空きリストが補充されます。

maxfree

空きリストの最大サイズ。バッファ内の空きリスト領域がこのサイズを上回ると、ページ・スティーリングによる空きリストの補充が中止されます。

minperm

ファイル入出力の永続バッファ・ページの最小数。

maxperm

ファイル入出力の永続バッファ・ページの最大数。

関連項目:
AIXシステム・パラメータの詳細は、『AIX 5L Performance Management Guide』を参照してください。

A.1.2 AIXファイル・バッファ・キャッシュのチューニング

AIXファイル・バッファ・キャッシュの目的は、ジャーナル・ファイル・システム使用時のディスクへのアクセス頻度を減らすことです。このキャッシュが小さすぎると、ディスク使用率が増加して、1つ以上のディスクが一杯になる可能性があります。キャッシュが大きすぎると、メモリーが浪費されます。

AIXファイル・バッファ・キャッシュは、minpermおよびmaxpermパラメータを調整することで構成できます。一般に、sar -bコマンドで確認したバッファ・ヒット率が低い(90%未満)場合は、minpermパラメータ値を増やします。高いバッファ・ヒット率を維持する必要がない場合は、minpermパラメータ値を減らして使用できる物理メモリーを増やします。AIXファイル・バッファ・キャッシュのサイズを増加する方法の詳細は、AIXのドキュメントを参照してください。

パフォーマンスの向上は、マルチプログラミングの程度およびワークロードの入出力特性によって変化するため、簡単に数値化できません。

minpermおよびmaxpermパラメータのチューニング

AIXには、計算(作業またはプログラム・テキスト)セグメントに使用されるページ・フレームではなく、ファイルに使用されるページ・フレームの比率を大まかに制御するためのメカニズムがあります。次のガイドラインに従ってminpermおよびmaxperm値を調整して制御します。

- 実メモリー内でファイル・ページが占める割合がminperm値を下回る場合は、再ページ率に関係なく、仮想メモリー・マネージャ(VMM)のページ置換アルゴリズムにより、ファイル・ページと計算ページの両方が取得されます。

- 実メモリー内でファイル・ページが占める割合がmaxperm値を上回る場合は、VMMのページ置換アルゴリズムにより、ファイル・ページと計算ページの両方が取得されます。

- 実メモリー内でファイル・ページが占める割合がパラメータ値minpermとmaxpermの間にある場合は、VMMにより、通常はファイル・ページのみが取得されます。ただし、ファイル・ページの再ページ率が計算ページの再ページ率よりも高い場合は、計算ページも取得されます。

デフォルト値を計算するには、次のアルゴリズムを使用します。

- minperm(ページ数)=((ページ・フレーム数)-1024)×0.2

- maxperm(ページ数)=((ページ・フレーム数)-1024)×0.8

minpermパラメータの値をページ・フレームの総数の5%に変更し、maxpermパラメータの値をページ・フレームの総数の20%に変更するには、次のコマンドを使用します。

# /usr/sbin/vmo -o minperm percent=5 -o maxperm percent=20

デフォルト値は、それぞれ20%と80%です。

新しいデータベース接続をオープンする際のクイック・レスポンスを最適化するには、minfreeパラメータを調整して十分な空きページをシステム内に確保し、空きリストにページを追加せずにアプリケーションをメモリーにロードできるようにします。プロセスの実メモリー・サイズ(常駐セット・サイズ、ワーキング・セット)を確認するには、次のコマンドを使用します。

$ ps v process_id

minfreeパラメータに、この値または8フレームのうち、いずれか大きい方を設定します。

ダイレクト入出力を使用している場合は、minpermおよびmaxpermパラメータを低い値に設定できます。たとえば、それぞれ5%および20%に設定します。これは、AIXファイル・バッファ・キャッシュがダイレクト入出力に使用されないためです。メモリーは、Oracleシステム・グローバル領域などの他の目的に有効に利用できます。

A.1.3 十分なページング領域の割当て

通常、ページング領域(スワップ領域)が十分に割り当てられていないと、システムのレスポンスが停止したり、レスポンス時間が非常に遅くなります。AIXでは、RAWディスク・パーティションにページング領域を動的に追加できます。構成するページング領域の大きさは、実装されている物理メモリーの量およびアプリケーションのページング領域要件によって異なります。ページング領域の使用量を監視するには、lspsコマンドを使用します。システムのページング・アクティビティを監視するには、vmstatコマンドを使用します。ページング領域を増やすには、smit pgspコマンドを使用します。

ページング領域を事前に割り当てる場合は、ページング領域をRAMの量よりも大きい値に設定することをお薦めします。ただし、AIXでは、ページング領域は必要になるまで割り当てられません。システムでは、実メモリーが不足した場合にのみスワップ領域が使用されます。メモリーのサイズを正しく設定した場合は、ページングが行われないため、ページング領域を小さくできます。要求されるページ数が大きく変動しないワークロードの場合は、小さいページング領域でも適切に動作します。ページングが極端に増加する可能性があるワークロードの場合は、最大ページ数を処理できるだけの十分なページング領域が必要です。

一般に、ページング領域の初期設定は、RAMの半分のサイズに4GBを加えた値で、32GBが上限です。lsps -aコマンドを使用してページング領域の使用量を監視し、その結果に従ってページング領域のサイズを増減します。lsps -aにより出力されるメトリック%Usedは、正常なシステムでは通常25%未満です。サイズが適切なデプロイではページング領域はほとんど必要ありませんが、スワッピングが過剰に発生する場合は、システムのRAMのサイズが小さすぎる可能性があります。

注意:
ページング領域のサイズは小さくしないでください。小さくすると、領域が不足してアクティブなプロセスが終了します。一方、ページング領域のサイズが大きすぎても、悪影響はほとんどありません。

A.1.4 ページングの制御

過剰なページングが頻繁に発生する場合は、実メモリーが過剰にコミットされていることを示します。通常は、次のように対処します。

- ベージングが頻繁に発生しないようにします。ただし、システムに超高速の拡張記憶域を装備し、メモリーと拡張記憶域間のページングが、Oracle DatabaseによるSGAとディスク間のデータの読取り/書込みよりも大幅に速くなる場合を除きます。

- 制限されたメモリー・リソースを、システム・パフォーマンスが最も向上する場所に割り当てます。場合によっては、メモリー・リソース要件とその影響のバランスを取るために、この処理を繰り返し行う必要があります。

- メモリーが不足している場合は、システム内のメモリーを必要とするプロセスおよび要素を優先順に並べたリストを作成します。パフォーマンスが最も向上する場所に、メモリーを割り当てます。優先順リストの例を次に示します。

1. OSおよびRDBMSのカーネル

2. ユーザー・プロセスおよびアプリケーション・プロセス

3. REDOログ・バッファ

4. PGAおよび共有プール

5. データベース・ブロック・バッファ・キャッシュ

たとえば、Oracle Databaseの動的パフォーマンス表およびビューを問い合せた結果、共有プールとデータベース・バッファ・キャッシュの両方にメモリーを追加する必要があるとします。この場合、制限された予備メモリーは、データベース・ブロック・バッファ・キャッシュではなく共有プールに割り当てるとパフォーマンスが向上します。

次のAIXコマンドを実行すると、ページングのステータスおよび統計が表示されます。

- vmstat -s

- vmstat interval [repeats]

- sar -r interval [repeats]

A.1.5 データベース・ブロック・サイズの設定

Oracle Databaseのブロック・サイズを構成すると、入出力スループットを改善できます。AIXでは、DB_BLOCK_SIZE初期化パラメータの値を2から32KBに設定できます。デフォルト値は4KBです。Oracle Databaseがジャーナル・ファイル・システムにインストールされている場合は、そのブロック・サイズをファイル・システムのブロック・サイズ(JFSでは4KB、GPFSでは16KBから1MB)の倍数にする必要があります。データベースがRAWパーティション上にある場合は、Oracle Databaseのブロック・サイズをオペレーティング・システムの物理ブロック・サイズ(AIXでは512バイト)の倍数にします。

Oracle Databaseのブロック・サイズは、オンライン・トランザクション処理ワークロードまたは複合ワークロードの環境では小さめ(2または4KB)に設定し、意思決定支援システム・ワークロードの環境では大きめ(8、16または32KB)に設定することをお薦めします。

A.1.6 ログ・アーカイブ・バッファのチューニング

トランザクションが長い場合や数が多い場合は特に、LOG_BUFFERサイズを大きくすることで、データベースのアーカイブ速度を向上させることができます。ログ・ファイル入出力アクティビティおよびシステム・スループットを監視して、最適なLOG_BUFFERサイズを決定します。LOG_BUFFERパラメータをチューニングするときは、通常のデータベース・アクティビティの全体的なパフォーマンスが低下しないように注意します。

注意:
LOG_ARCHIVE_BUFFER_SIZEパラメータは、Oracle8i Databaseで廃止されました。

A.1.7 入出力バッファおよびSQL*Loader

SQL*Loaderダイレクト・パス・オプションを使用しながらデータを並行してロードするなど、データを高速にロードする場合は、CPU時間の大半が入出力完了の待機時間として使用されます。バッファ数を増やすことで、CPU使用率を最大化し、スループット全体を向上させることができます。

バッファ数(SQL*LoaderのBUFFERSパラメータで設定)は、使用可能なメモリーの量およびCPU使用率を最大化する程度によって異なります。

パフォーマンスの向上は、CPU使用率およびデータのロード時に使用する並列度によって変化します。

関連項目:
BUFFERSパラメータのファイル処理オプション文字列の調整およびSQL*Loaderユーティリティの詳細は、『Oracle Databaseユーティリティ』を参照してください。

インポート・ユーティリティ用のBUFFERパラメータ

インポート・ユーティリティ用のBUFFERSパラメータには、高速ネットワークの使用時にそのパフォーマンスを最適化するために、大きい値を設定する必要があります。たとえば、IBM RS/6000 Scalable POWER parallel Systemsスイッチを使用する場合は、BUFFERパラメータを1MB以上の値に設定する必要があります。

A.2 ディスク入出力の問題

ディスク入出力の競合は、メモリー管理が良好でない(その結果としてページングおよびスワッピングが発生する)場合や、ディスク間の表領域およびファイルの分散が適切でない場合に発生します。

filemon、sar、iostatなどのAIXユーティリティおよびその他のパフォーマンス・ツールを使用して入出力アクティビティの高いディスクを特定し、複数のディスク・ドライブに入出力アクティビティを均等に分散します。

この項では、次の項目について説明します。

- AIX論理ボリューム・マネージャ

- RAW論理ボリュームと比較した場合のジャーナル・ファイル・システムの使用

- 非同期入出力の使用

- 入出力スレーブ

- DB_FILE_MULTIBLOCK_READ_COUNTパラメータの使用

- 後書きの使用

- 順次先読みのチューニング

- ディスク入出力ペーシングのチューニング

- Oracle Databaseによるミラー復元

A.2.1 AIX論理ボリューム・マネージャ

AIX論理ボリューム・マネージャは、複数のディスク間にデータをストライプ化して、ディスクの競合を減らすことができます。ストライプ化の主な目的は、大容量の順次ファイルに対する読取り/書込みのパフォーマンスを向上させることです。論理ボリューム・マネージャのストライプ機能を効果的に使用すると、ディスク間に入出力を均等に分散できるようになるため、全体的なパフォーマンスが向上します。

注意:
自動ストレージ管理ディスク・グループには論理ボリュームを追加しないでください。自動ストレージ管理は、RAWディスク・デバイスがディスク・グループに追加された場合に最も効果的に機能します。自動ストレージ管理を使用している場合は、論理ボリューム・マネージャを使用してストライプ化を行わないでください。自動ストレージ管理は、ストライプ化およびミラー化を実装します。

ストライプ化論理ボリュームの設計

ストライプ化論理ボリュームを定義するときは、次の表に示す項目を指定する必要があります。

項目

推奨設定

ドライブ

2つ以上の物理ドライブが必要です。パフォーマンスが重視される順次入出力を実行するときは、これらのドライブのアクティビティを最小にする必要があります。場合によっては、複数のアダプタ間で論理ボリュームをストライプ化する必要があります。

ストライプ・ユニット・サイズ

ストライプ・ユニット・サイズには2の累乗(2から128KB)を指定できますが、ほとんどのワークロードには32KBおよび64KBのストライプ・サイズで十分です。Oracle Databaseファイルの場合は、ストライプ・サイズをデータベース・ブロック・サイズの倍数にする必要があります。

サイズ

論理ボリュームに割り当てる物理パーティションの数は、使用するディスク・ドライブ数の倍数にする必要があります。

属性

ミラー化できません。copies属性の値を1に設定します。

その他の考慮事項

論理ボリューム・マネージャを効果的に使用したときのパフォーマンスの向上は、使用する論理ボリューム・マネージャおよびワークロードの特性によって大きく異なります。意思決定支援システム・ワークロードでは、パフォーマンスが大幅に向上します。オンライン・トランザクション処理タイプのワークロードまたは複合ワークロードの場合も、かなりのパフォーマンスの向上が期待できます。

A.2.2 RAW論理ボリュームと比較した場合のジャーナル・ファイル・システムの使用

ジャーナル・ファイル・システムまたはRAW論理ボリュームのどちらを使用するかを決定するときには、次のことを考慮してください。

- ファイル・システムは、実装の多様化に伴い、継続的に改善されています。

- ファイル・システムには、追加構成(AIXのminserversおよびmaxserversパラメータ)が必要です。また、ファイル・システムの非同期入出力がカーネルの外部で実行されるため、CPUオーバーヘッドが少し増加します。

- 様々なベンダーが、各ディスクの長所を生かすために、様々な方法でファイル・システム・レイヤーを実装しています。その結果、プラットフォーム間でファイル・システムを比較することが難しくなっています。

- より強力な論理ボリューム・マネージャ・インタフェースを導入すると、RAW論理ボリュームに基づいた論理ディスクの構成およびバックアップの作業が大幅に減少します。

- IBM AIX on POWER Systemsに組み込まれているダイレクト入出力機能および同時入出力機能により、ファイル・システムのパフォーマンスはRAW論理ボリュームと同じレベルまで向上します。

以前のバージョンのAIXでは、ファイル・システムはバッファに対する読取り/書込みのみをサポートしており、inodeロックが不完全なために余計な競合が発生していました。この2つの問題は、JFS2の同時入出力機能およびGPFSのダイレクト入出力機能によって解決されています。

注意:
Oracle RACオプションを使用するには、自動ストレージ管理ディスク・グループまたはGPFSファイル・システムにデータファイルを配置する必要があります。JFSまたはJFS2は使用できません。GPFSを使用すると、ダイレクト入出力が暗黙的に有効になります。

ファイル・システム・オプション

IBM AIX on POWER Systemsでは、ダイレクト入出力および同時入出力がサポートされています。ダイレクト入出力および同時入出力のサポートにより、データベース・ファイルがファイル・システム上に存在できるようになります。これは、Oracle Databaseが提供する機能を使用して、オペレーティング・システムのバッファ・キャッシュを回避し、冗長なinodeロック操作を排除することで実現されます。

可能であれば、Oracleデータファイルが含まれるファイル・システムでは、同時入出力またはダイレクト入出力を有効にすることをお薦めします。次の表に、AIXで使用できるファイル・システムとその推奨設定を示します。

ファイル・システム

オプション

説明

JFS

dio

JFSでは、同時入出力は使用できません。ダイレクト入出力は使用できますが、同時入手力を使用したJFS2と比較してパフォーマンスが劣ります。

JFSラージ・ファイル

none

128KBの位置合せ制約によってダイレクト入出力が使用できないため、JFSラージ・ファイルをOracle Databaseに使用することは推奨されません。

JFS2

cio

同時入出力は、同一のファイルに対して複数の同時リーダー/ライターをサポートしているため、ダイレクト入出力よりもJFS2に適した設定です。ただし、JFS2/CIOに対するAIX制限のため、同時入出力はOracleデータファイル、制御ファイルおよびログ・ファイルでのみ使用されます。このような目的専用のファイル・システムにのみ適用してください。同じ理由から、cioオプションでマウントするJFS2ファイル・システムでは、Oracleホーム・ディレクトリはサポートされません。たとえば、インストール時に、CIOオプションでマウントするJFS2ファイル・システムにOracleホーム・ディレクトリを配置するように誤って指定した場合は、Oracleに再リンクしようとすると、次のエラーが表示されることがあります。
"ld: 0711-866 INTERNAL ERROR: Output symbol table size miscalculated"

注意: Oracle Database 11gリリース2 (11.2.0.2)以上の場合、AIX 6.1システムでは、JFS2ファイルシステム上でcioオプションを使用しないことをお薦めします。

GPFS

該当なし

Oracle Databaseは、最適なパフォーマンスを得るために、GPFSに対してダイレクト入出力を暗黙的に有効にします。GPFSのダイレクト入出力は、複数のノード上の複数のリーダー/ライターをサポートしています。したがって、GPFSでは、ダイレクト入出力と同時入出力は同じです。

JFSおよびJFS2の考慮事項

JFS2ファイル・システムにOracle Databaseログを配置している場合、構成を最適化するには、agblksize=512オプションを使用してファイル・システムを作成し、cioオプションでマウントします。

Oracle Database 11gより前のリリースでは、JFS/JFS2において、ダイレクト入出力および同時入出力をファイル・レベルで有効にできませんでした。したがって、最適なパフォーマンスを得るために、Oracleホーム・ディレクトリおよびデータファイルを別個のファイル・システムに配置する必要がありました。つまり、Oracleホーム・ディレクトリをデフォルト・オプションでマウントしたファイル・システムに配置し、データファイルおよびログをdioまたはcioオプションを使用してマウントしたファイル・システムに配置していました。

Oracle Database 11gでは、JFS/JFS2において、ダイレクト入出力および同時入出力をファイル・レベルで有効にできます。そのためには、サーバー・パラメータ・ファイルのFILESYSTEMIO_OPTIONSパラメータをsetallまたはdirectIOに設定します。これにより、すべてのデータファイル入出力に対して、JFS2での同時入力およびJFSでのダイレクト入出力が有効になります。これは、directIO設定により、通常は使用しない非同期入出力が無効になるためです。この11gの機能により、Oracleホーム・ディレクトリと同じJFS/JFS2ファイル・システムにデータファイルを配置し、ダイレクト入出力または同時入出力を使用してパフォーマンスを向上させることができます。前述のように、最適なパフォーマンスを得るためには、Oracle Databaseログを別個のJFS2ファイル・システムに配置する必要があります。

GPFSの考慮事項

GPFSを使用している場合、すべての目的に同じファイル・システムを使用できます。Oracleホーム・ディレクトリや、データファイルおよびログの格納などに使用できます。最適なパフォーマンスを得るためには、大規模なGPFSブロック・サイズ(通常は512KB以上)を使用する必要があります。GPFSはスケーラビリティを確保するように設計されており、データ量が1つのGPFSファイル・システムに収まるかぎり、複数のGPFSファイル・システムを作成する必要はありません。

ジャーナル・ファイル・システムからRAW論理ボリュームへの移動

すべてのデータを手動でリロードせずに、ジャーナル・ファイル・システムからRAWデバイスに移動するには、次の手順をrootユーザーとして実行します。

1. 新しいRAW論理ボリューム・デバイス・タイプ(-T O)を使用して、RAWデバイス(BigVGを推奨)を作成します。これにより、最初のOracleブロックをオフセット0(ゼロ)にでき、最適なパフォーマンスを得ることができます。

# mklv -T O -y new_raw_device VolumeGroup NumberOfPartitions

注意:
このRAWデバイスは、既存のファイルよりも大きくする必要があります。また、新しいRAWデバイスのサイズが領域を浪費しないように注意する必要があります。

2. RAWデバイスに対する権限を設定します。

3. 次のように、ddを使用してJFSファイルの内容を変換し、新しいRAWデバイスにコピーします。

# dd if=old_JFS_file of=new_raw_device bs=1m

4. データファイルの名前を変更します。

RAW論理ボリュームからジャーナル・ファイル・システムへの移動

RAW論理ボリュームの最初のOracleブロックは、必ずしもオフセット0(ゼロ)ではありません。しかし、ファイル・システムの最初のOracleブロックは常にオフセット0(ゼロ)です。オフセットを決定してRAW論理ボリュームの最初のブロックを特定するには、$ORACLE_HOME/bin/offsetコマンドを使用します。オフセットは、AIX論理ボリュームでは4096バイトまたは128KBですが、mklv -T Oオプションで作成したAIX論理ボリュームでは0(ゼロ)です。

オフセットの決定後、ddコマンドを使用してオフセットをスキップし、RAW論理ボリュームからファイル・システムにデータをコピーできます。次の例では、オフセットを4096バイトと仮定しています。

# dd if=old_raw_device bs=4k skip=1|dd of=new_file bs=256

RAW論理ボリュームの最大容量よりも小さいブロック数を使用するように、Oracle Databaseに指示できます。その場合、count句を追加して、Oracleブロックが含まれるデータのみをコピーする必要があります。次の例では、オフセットを4096バイト、Oracleブロック・サイズを8KB、ブロック数を150000と仮定しています。

# dd if=old_raw_device bs=4k skip=1|dd bs=8k count=150000|dd of=new_file bs=256k

A.2.3 非同期入出力の使用

Oracle Databaseでは、AIXが提供する非同期入出力を最大限に利用して、データベース・アクセスを高速化しています。

IBM AIX on POWER Systemsでは、ファイル・システム・パーティション上に作成されたデータベース・ファイルに対して、非同期入出力がサポートされています。ファイル・システムに対して非同期入出力を使用するときは、リクエストがキューから取り出されてから完了するまで、カーネル・データベース・プロセス(aioserver)が各リクエストを制御します。aioserverサーバーの数により、システムで同時に処理できる非同期入出力リクエストの数が決まります。このため、ファイル・システムを使用してOracle Databaseのデータファイルを格納する場合には、aioserverプロセスの数をチューニングすることが重要です。

サーバーの数を設定するには、次のいずれかのコマンドを使用します。これは、ファイル・システムに対して非同期入出力を使用する場合にのみ適用されます。

- smit aio

- chdev -l aio0 -a maxservers=' m ' -a minservers='n'

関連項目:

- System Management Interface Tool(SMIT)の詳細は、SMITのオンライン・ヘルプを参照してください。

- smit aioおよびchdevコマンドの詳細は、manページを参照してください。

注意:

- IBM AIX on POWER Systemsでは、2つの非同期入出力サブシステムを使用できます。Oracle Database 11gでは、Oracleインストール前スクリプトによりレガシー非同期入力(aio0)およびPOSIX AIO (posix_aio0)が有効になる場合でも、レガシー非同期入出力(aio0)が使用されます。どちらの非同期入出力サブシステムも、パフォーマンス特性は同じです。

- AIX 6.1,から、minservers、maxserversおよびmaxreqsパラメータは、それぞれ、aio_minservers、aio_maxserversおよびaio_maxreqsパラメータに置き換えられています。

最小値には、システムの起動時に起動するサーバーの数を設定します。最大値には、大量の同時リクエストに応じて起動できるサーバーの数を設定します。これらのパラメータはファイル・システムにのみ適用されます。

サーバーの最小数のデフォルト値は1です。サーバーの最大数のデフォルト値は10です。カーネル化された非同期入出力を使用していない場合、CPUを4つ以上搭載する大規模なシステムでOracle Databaseを実行するには、通常、これらの値は低すぎます。パラメータには、次の表に示す値を設定することをお薦めします。

パラメータ

値

minservers

初期値としては、システム上のCPUの数または10のうち、いずれか小さい方を設定することをお薦めします。

maxservers

AIX 5Lリリース5.3からは、このパラメータによって各CPUの非同期入出力サーバーの最大数がカウントされます。以前のバージョンのAIXでは、システム全体の値がカウントされていました。General Parallel File System(GPFS)を使用している場合は、maxserversを、CPUの数で除算したworker1threadsに設定します。これが最適な設定です。maxserversを大きくしても、入出力のパフォーマンスは向上しません。
JFS/JFS2を使用する場合は、初期値を、CPUの数で除算した論理ディスクの数(同時に使用するディスク数)を10倍した値(ただし、80以下)に設定します。pstatまたはpsコマンドを使用して、典型的なワークロードで起動されたaioserversの実際の数を監視します。アクティブなaioserversの実際の数がmaxserversと等しい場合は、maxservers値を大きくします。

maxreqs

初期値を、論理ディスクの数とキューの深さの積を4倍した値に設定します。キューの深さは、次のコマンドを実行して確認できます。

$ lsattr -E -l hdiskxx

通常、キューの深さは3です。

maxserversまたはmaxreqsパラメータの値が低すぎると、次の警告メッセージが繰り返し表示されます。

Warning: lio_listio returned EAGAINPerformance degradation may be seen.

これらのエラーが発生しないようにするには、maxserversパラメータの値を大きくします。稼働している非同期入出力サーバーの数を表示するには、次のコマンドをrootユーザーとして入力します。

# pstat -a | grep -c aios
# ps -k | grep aioserver

アクティブな非同期入出力サーバーの数を定期的にチェックし、必要に応じてminserversおよびmaxserversパラメータの値を変更します。値の変更は、システムを再起動すると有効になります。

注意:
AIOパラメータのチューニングの詳細は、使用するオペレーティング・システムのベンダーのマニュアルを参照してください。

A.2.4 入出力スレーブ

入出力スレーブは、入出力のみを実行する特殊なOracleプロセスです。非同期入出力がデフォルトであり、AIXでのOracleによる入出力操作の実行に推奨されている方法であるため、入出力スレーブはAIXではほとんど使用されません。入出力スレーブは、共有メモリー・バッファから割り当てられます。入出力スレーブには、次の表に示す初期化パラメータを使用します。

パラメータ

許容値

デフォルト値

DISK_ASYNCH_IO

true/false

true

TAPE_ASYNCH_IO

true/false

true

BACKUP_TAPE_IO_SLAVES

true/false

false

DBWR_IO_SLAVES

0 - 999

0

DB_WRITER_PROCESSES

1-20

1

通常、この表のパラメータは調整しません。ただし、ワークロードが大きい場合に、データベース・ライターがボトルネックになることがあります。その場合は、DB_WRITER_PROCESSESの値を大きくします。このデータベース・ライター・プロセスの数は、システムまたはパーティション内のCPUのペアにつき1つですが、原則として、この数は増やさないでください。

非同期I/Oの無効化が必要な場合があります。たとえば、デバッグのためにOracleサポートから指示された場合などです。DISK_ASYNCH_IOおよびTAPE_ASYNCH_IOパラメータを使用すると、ディスクまたはテープ・デバイスに対する非同期I/Oを無効にできます。TAPE_ASYNCH_IOのサポートは、メディア・マネージャ・ソフトウェアによってサポートされている場合にのみ使用可能であり、Recovery Managerの場合は、BACKUP_TAPE_IO_SLAVESがtrueの場合のみ使用可能です。

DBWR_IO_SLAVESパラメータは、DISK_ASYNCH_IOパラメータがfalseに設定されている場合にのみ、0(ゼロ)より大きい値に設定します。設定しないと、データベース・ライター・プロセスがボトルネックになります。この場合、AIXでのDBWR_IO_SLAVESパラメータの最適値は4です。

A.2.5 DB_FILE_MULTIBLOCK_READ_COUNTパラメータの使用

Oracle Database 11gでダイレクト入出力または同時入出力を使用している場合、AIXファイル・システムでは、順次スキャンでの先読みが実行されません。このため、ダイレクト入出力または同時入出力がOracleデータファイルに対して有効になっている場合、サーバー・パラメータ・ファイルのDB_FILE_MULTIBLOCK_READ_COUNT値を大きくする必要があります。DB_FILE_MULTIBLOCK_READ_COUNT初期化パラメータで指定されているように、Oracle Databaseによって先読みが実行されます。

DB_FILE_MULTIBLOCK_READ_COUNT初期化パラメータに大きい値を設定すると、通常は順次スキャンでの入出力スループットが向上します。AIXでは、このパラメータの範囲は1から512ですが、16より大きい値を使用しても、通常はそれ以上のパフォーマンス効果は得られません。

このパラメータは、DB_BLOCK_SIZEパラメータの値との積が論理ボリューム・マネージャのストライプ・サイズよりも大きくなるように設定します。このような設定により、使用できるディスクが増加します。

A.2.6 後書きの使用

後書き機能を使用すると、オペレーティング・システムで書込み入出力をパーティションのサイズまでグループ化できるようになります。これにより、入出力操作の数が減るため、パフォーマンスが向上します。ファイル・システムでは、各ファイルが16KBパーティションに分割されるため、書込みパフォーマンスが向上し、メモリー内のダーティ・ページの数が制限され、ディスクの断片化が最小限に抑えられます。特定のパーティションのページは、プログラムによって次の16KBパーティションの1バイト目が書き込まれるまで、ディスクに書き込まれません。後書き用バッファのサイズを8つの16KBパーティションに設定するには、次のコマンドを入力します。

à        # /usr/sbin/vmo -o numclust=8

後書き機能を無効にするには、次のコマンドを入力します。

à        # /usr/sbin/vmo -o numclust=0

A.2.7 順次先読みのチューニング

注意:
この項の内容は、ダイレクト入出力も同時入出力も使用していないファイル・システムにのみ適用されます。

VMMは、順次ファイルのページの必要性を予測します。また、プロセスがファイルにアクセスするパターンを監視しています。プロセスがファイルの連続する2つのページにアクセスすると、VMMはプログラムがファイルへの順次アクセスを続行すると予測し、ファイルに対する追加の順次読取りをスケジュールします。これらの読取りはプログラム処理とオーバーラップし、プログラムはデータをより高速に使用できるようになります。次のVMMしきい値は、カーネル・パラメータとして実装されており、先読みするページ数を決定します。

- minpgahead
このパラメータは、VMMが最初に順次アクセス・パターンを検出したときに先読みするページ数を格納します。

- maxpgahead
このパラメータは、VMMが順次ファイルで先読みする最大ページ数を格納します。

minpgaheadおよびmaxpgaheadパラメータは、アプリケーションに適した値に設定します。デフォルト値は、それぞれ2および8です。これらの値を変更するには、/usr/sbin/vmoコマンドを使用します。ストライプ化論理ボリュームの順次パフォーマンスを最重要視するシステムでは、maxpgaheadパラメータの値を高めに設定します。minpgaheadパラメータを32ページに、maxpgaheadパラメータを64ページに設定するには、次のコマンドをrootユーザーとして実行します。

-o minpgahead=32 -o maxpgahead=64

minpgaheadおよびmaxpgaheadパラメータはいずれも、2の累乗に設定します。たとえば、2、4、8、. . . 512, 1042, . . . などです。

A.2.8 ディスク入出力ペーシングのチューニング

ディスク入出力ペーシングとは、システム管理者がファイルに対して保留中の入出力リクエストの数を制限できるようにするAIXのメカニズムです。このメカニズムにより、ディスク入出力が頻繁に発生するプロセスでCPUが飽和状態になるのを防ぐことができます。このため、対話型プロセスやCPU使用量の多いプロセスのレスポンス時間に遅延が発生しません。

ディスク入出力ペーシングを行うには、最高水位標および最低水位標という2つのシステム・パラメータを調整します。保留中の入出力リクエストが最高水位標に達しているファイルに対してプロセスが書込みを実行すると、プロセスはスリープ状態になります。未処理の入出力リクエストの数が最低水位標以下になると、プロセスはスリープ状態から解放されます。

最高水位標および最低水位標を変更するには、smitコマンドを使用します。試行錯誤を重ねて水位標を決定します。水位標はパフォーマンスに影響を与えるため、設定するときには注意が必要です。ディスク入出力が4KBを超える場合は、最高水位標および最低水位標をチューニングしてもほとんど効果はありません。

ディスク入出力の飽和状態を確認するには、iostatの結果、特にiowaitおよびtm_actの割合を分析します。特定のディスクのiowaitおよびtm_actの割合が高い場合は、ディスクが飽和状態にあることを示します。

注意:
iowaitが高いのみでは、必ずしも入出力のボトルネックを示すものではありません。

A.2.9 Oracle Databaseによるミラー復元

RAW論理ボリュームに割り当てられたOracleデータファイルに対してミラー書込み整合性を無効にすると、システム障害後のOracle Databaseのクラッシュ・リカバリ・プロセスでは、ミラー復元を使用したリカバリが行われます。このミラー復元プロセスにより、データベースの不整合または破損を防ぐことができます。

クラッシュ・リカバリ時に、論理ボリュームに割り当てられたデータファイルに複数のコピーがある場合、ミラー復元プロセスでは、すべてのコピーのデータ・ブロックに対してチェックサムを実行します。その後、次のいずれかの処理を実行します。

- コピー内のデータ・ブロックのチェックサムが有効である場合、そのコピーを使用してチェックサムが無効なコピーを更新します。

- すべてのコピーでブロックのチェックサムが無効である場合、REDOログ・ファイルの情報を使用してブロックを再構築します。次に、データファイルを論理ボリュームに書き込み、すべてのコピーを更新します。

AIXでは、ミラー復元プロセスは、RAW論理ボリュームに割り当てられたデータファイルのうち、ミラー書込み整合性が無効になっているデータファイルに対してのみ機能します。ミラー化論理ボリューム上のデータファイルのうち、ミラー書込み整合性が有効になっているデータファイルには、ミラー書込み整合性によってすべてのコピーの同期が保証されているため、ミラー復元は必要ありません。

以前のリリースのOracle Databaseのアップグレード中にシステムに障害が発生し、論理ボリューム上のデータファイルのミラー書込み整合性が無効になっていた場合は、syncvgコマンドを実行してミラー化論理ボリュームを同期化してからOracle Databaseを起動してください。ミラー化論理ボリュームを同期化せずにデータベースを起動すると、論理ボリュームのコピーから誤ったデータを読み取る場合があります。

注意:
ディスク・ドライブに障害が発生した場合、ミラー復元は行われません。syncvgコマンドを実行してから、論理ボリュームを再度アクティブにする必要があります。

注意:
ミラー復元は、データファイルに対してのみサポートされています。REDOログ・ファイルのミラー書込み整合性は無効にしないでください。

A.3 CPUのスケジューリングおよびプロセスの優先順位

CPUも、プロセスの競合が発生する可能性があるシステム・コンポーネントです。ほとんどの場合、AIXカーネルによってCPUは効果的に割り当てられますが、プロセスの多くはCPUサイクルをめぐって競合します。システムに複数のCPU(SMP)が搭載されている場合は、各CPUで様々なレベルの競合が発生する可能性があります。

次の各項では、CPUのスケジューリングおよびプロセスの優先順位について説明します。

- プロセスのランタイム・スライスの変更

- SMPシステムでのプロセッサ・バインディングの使用

A.3.1 プロセスのランタイム・スライスの変更

AIX RRディスパッチャのランタイム・スライスのデフォルト値は10ミリ秒です。タイム・スライスを変更するには、schedoコマンドを使用します。タイム・スライスを長くすると、アプリケーションの自発的な切替率の平均が低い場合に、コンテキストの切替率も低くなります。その結果、プロセスのコンテキストの切替えに消費されるCPUサイクルが少なくなるため、システムのスループットが向上します。

ただし、ランタイム・スライスを長くすると、特に単一プロセッサ・システムの場合に、レスポンス時間が遅くなる可能性があります。デフォルトのランタイム・スライスは通常、ほとんどのアプリケーションに使用できます。実行キューが大きく、ほとんどのアプリケーションとOracleシャドウ・プロセスがかなり長時間にわたって実行できる場合は、次のコマンドを入力してタイム・スライスを長くできます。

f # /usr/sbin/schedo -t n

このコマンドで、nの値を0(ゼロ)に設定すると、スライスは10ミリ秒になり、値を1に設定すると20ミリ秒、2に設定すると30ミリ秒になります。

A.3.2 SMPシステムでのプロセッサ・バインディングの使用

SMPシステムでは、特定のプロセスを1台のプロセッサにバインドすると、パフォーマンスが大幅に向上する場合があります。AIX 5Lでは、プロセッサ・バインディングとそのすべての機能を使用できます。

ただし、AIX 5Lからは、AIXスケジューラの特殊な改良により、プロセッサ・バインディングを使用せずに、Oracle Databaseプロセスを最適にスケジュール設定できます。したがって、AIX 5Lリリース5.3以上で実行する場合は、プロセッサへのプロセスのバインディングは推奨されません。

A.4 環境変数AIXTHREAD_SCOPEの設定

AIXのスレッドは、プロセス全体の競合範囲(M:N)またはシステム全体の競合範囲(1:1)により動作できます。環境変数AIXTHREAD_SCOPEは、使用する競合範囲を制御します。

環境変数AIXTHREAD_SCOPEのデフォルト値は、P(プロセス全体の競合範囲)です。プロセス全体の競合範囲を使用する場合、Oracleスレッドはカーネル・スレッドのプールにマップされます。Oracleがイベントを待機中にOracleスレッドがスワップ・アウトされると、スレッドIDが異なる別のカーネル・スレッドに戻る場合があります。OracleではスレッドIDを使用して待機中のプロセスをポストするため、スレッドIDが同じままであることが重要です。システム全体の競合範囲を使用する場合、Oracleスレッドはカーネル・スレッドに1対1で静的にマップされます。このため、システム全体の競合を使用することをお薦めします。システム全体の競合の使用は、特にOracle Real Application Clusters(Oracle RAC)インスタンスには重要です。

さらに、AIX 5Lリリース5.3以上では、システム全体の競合範囲を設定すると、各Oracleプロセスに割り当てられるメモリーがかなり少なくなります。

Oracle DatabaseインスタンスまたはOracle Net Listenerプロセスにおいて、環境変数ORACLE_HOMEまたはORACLE_SIDの設定に使用する環境スクリプトで、次のように、環境変数AIXTHREAD_SCOPEの値をSに設定することをお薦めします。

- Bourne、BashまたはKornシェルの場合
~/.profileまたは/usr/local/bin/oraenvスクリプトに次の行を追加します。

AIXTHREAD_SCOPE=S; export AIXTHREAD_SCOPE

- Cシェルの場合
~/.loginまたは/usr/local/bin/coraenvスクリプトに次の行を追加します。

setenv AIXTHREAD_SCOPE S

これにより、すべてのOracleプロセスの実行に対してシステム全体のスレッド範囲が有効になります。

A.5 ネットワーク情報サービスの外部ネーミングのサポート

AIXでは、ネットワーク情報サービスの外部ネーミング・アダプタがサポートされています。ネットワーク情報サービスの外部ネーミングを構成および使用する方法の詳細は、『Oracle Database Net Services管理者ガイド』の外部ネーミング・メソッドの構成に関する項を参照してください。

A.6 AIX 5.3以上のバージョンでのマルチスレッド同時処理

マルチスレッド同時処理が有効で、AIX 5.3以上のバージョンのオペレーティング・システムを使用している場合、v$osstatビューは、オンライン論理CPU(NUM_LCPUS)および仮想CPU(NUM_VCPUS)に対応した2つの行を追加して報告します。

AIX 5.3以上のバージョンでマルチスレッド同時処理を使用せずにOracleを実行している場合、これらの行は報告されません。

A.7 Oracle JDBC Thinドライバを使用したIBM JSSE Providerの構成

IBM JDKにSSLを構成する場合は、次の問題が発生する場合があります。

- IBM JSSEがSSLv2Hello SSLプロトコルをサポートしない
Thin JDBCコネクタを使用するSSLクライアントでは、oracle.net.ss1_versionシステム・プロパティをTLSv1 SSLプロトコルまたはSSLv3 SSLプロトコルを選択するように設定する必要があります。

- IBM JSSEは匿名暗号を許可しない
匿名暗号を使用するSSLクライアントでは、デフォルトのトラスト・マネージャを、匿名暗号を許可するカスタム・トラスト・マネージャに置き換える必要があります。

関連項目:
カスタム・トラスト・マネージャの作成およびインストールの詳細は、IBM JSSEのドキュメントを参照してください。

B LinuxシステムでのOracle Databaseの管理

この付録では、LinuxシステムでOracle Databaseを管理する方法について説明します。

内容は次のとおりです。

- 拡張バッファ・キャッシュのサポート

- LinuxでのHugePagesの使用

- 非同期入出力サポート

- マルチスレッド同時処理

- 共有リソースの割当て

- 32ビットLinuxから64ビットLinuxへのデータベースの移行

注意:
Oracle Database 11gリリース2(11.2)からは、Linux x86-64メディアにはLinux x86バイナリは含まれません。32ビットOracleホームをインストールするには、Linux x86メディアを使用する必要があります。

B.1 拡張バッファ・キャッシュのサポート

注意:
この項の内容は、Linux x86にのみ適用されます。

Oracle Databaseでは、データベース・バッファ・キャッシュとして、4GBを超えるメモリーを割り当てて使用できます。この項では、Linux x86システムの拡張バッファ・キャッシュ機能の制限事項と要件について説明します。

関連項目:
詳細は、「Linux x86のVery Large Memory」を参照してください。

関連項目:
拡張バッファ・キャッシュ機能の詳細は、『Oracle Database概要』を参照してください。

メモリー内ファイル・システム

拡張バッファ・キャッシュ機能を使用するには、データベース・バッファ・キャッシュに使用するメモリー量以上のサイズのメモリー内ファイル・システムを/dev/shmマウント・ポイントに作成します。たとえば、8GBのファイル・システムを/dev/shmマウント・ポイントに作成するには、次の手順を実行します。

1. rootユーザーで次のコマンドを実行します。

# mount -t tmpfs shmfs -o size=8g /dev/shm

2. システムの再起動時にメモリー内ファイル・システムが確実にマウントされるようにするには、/etc/fstabファイルに次のようなエントリを追加します。

shmfs /dev/shm tmpfs size=8g 0 0

拡張バッファ・キャッシュ機能を有効にしてOracle Databaseを起動すると、Oracleバッファ・キャッシュに対応するファイルが/dev/shmディレクトリに作成されます。

注意:
メモリー内ファイル・システムが/dev/shmマウント・ポイントにマウント済の場合は、その大きさがデータベース・バッファ・キャッシュに使用するメモリー量以上であることを確認します。

USE_INDIRECT_DATA_BUFFERS初期化パラメータ

拡張バッファ・キャッシュ機能を有効にするには、パラメータ・ファイルでUSE_INDIRECT_DATA_BUFFERS初期化パラメータをTRUEに設定します。これによって、Oracle Databaseは大きいバッファ・キャッシュを指定できるようになります。

動的キャッシュ・パラメータ

拡張キャッシュ機能が有効になっている場合は、DB_BLOCK_BUFFERSパラメータを使用してデータベース・キャッシュ・サイズを指定する必要があります。

拡張バッファ・キャッシュ機能が有効になっている間は、次の動的キャッシュ・パラメータを使用しないでください。

- DB_CACHE_SIZE

- DB_2K_CACHE_SIZE

- DB_4K_CACHE_SIZE

- DB_8K_CACHE_SIZE

- DB_16K_CACHE_SIZE

制限事項

拡張バッファ・キャッシュ機能には、次の制限事項が適用されます。

- 作成または使用できる表領域はデフォルト・ブロック・サイズの表領域のみです。DB_BLOCK_SIZEパラメータで指定されたブロック・サイズのみを使用した表領域を作成できます。

- インスタンスの実行中はバッファ・キャッシュのサイズを変更できません。

関連項目:
CREATE TABLESPACEコマンドで使用するデフォルト・ブロック・サイズの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

注意:
デフォルトのVLMウィンドウ・サイズは512MBです。このメモリー・サイズは、プロセスのアドレス空間に割り当てられます。この値を増減させるには、環境変数VLM_WINDOW_SIZEをバイト単位の新しいサイズに設定します。たとえば、VLM_WINDOW_SIZEを256MBに設定するには、次のコマンドを実行します。

$ export VLM_WINDOW_SIZE=268435456

環境変数VLM_WINDOW_SIZEに指定する値は、64KBの倍数である必要があります。

B.2 LinuxでのHugePagesの使用

Linuxにおいて、Oracle Databaseでラージ・ページ(HugePagesとも呼ばれる)を使用可能にするには、vm.nr_hugepagesカーネル・パラメータの値を設定し、予約するラージ・ページ数を指定します。データベース・インスタンスのSGA全体を保持するだけの十分なラージ・ページ数を指定する必要があります。必要なパラメータ値を判断するには、インスタンスのSGAサイズをラージ・ページのサイズで除算してから、結果の端数を切り上げて最も近い整数にします。

デフォルトのラージ・ページ・サイズを判断するには、次のコマンドを実行します。

# grep Hugepagesize /proc/meminfo

たとえば、/proc/meminfoにラージ・ページのサイズが2MBとリストされ、インスタンスの総SGAサイズが1.6GBの場合は、vm.nr_hugepagesカーネル・パラメータの値を820(1.6GB / 2MB = 819.2)に設定します。

関連項目:
HugePagesによるSGAのチューニング、およびHugePages構成の制限の詳細は、「HugePagesの概要」を参照してください。

B.3 非同期入出力サポート

Oracle Databaseでは、カーネルの非同期入出力がサポートされます。デフォルトでは、非同期入出力はRAWボリュームで使用可能です。デフォルトでは自動ストレージ管理で非同期入出力が使用されます。

デフォルトでは、パラメータ・ファイルのDISK_ASYNCH_IO初期化パラメータはTRUEに設定されています。ファイル・システムのファイルに対して非同期入出力を有効にするには、次の手順を実行します。

1. すべてのOracle Databaseファイルが、非同期入出力をサポートしているファイル・システム上にあることを確認します。

2. パラメータ・ファイルのFILESYSTEMIO_OPTIONS初期化パラメータをASYNCHまたはSETALLに設定します。

注意:
ファイルシステムのファイルがODMライブラリ・インタフェースまたはdNFSで管理されている場合、デフォルトで、非同期入出力が有効になります。これらの環境では、非同期入出力を有効にするために、FILESYSTEMIO_OPTIONSを設定する必要はありません。

B.4 直接入出力サポート

直接入出力サポートは使用可能であり、Linuxでサポートされます。

直接入出力サポートを有効にする手順

- FILESYSTEMIO_OPTIONS初期化パラメータをDIRECTIOに設定します。

- パラメータ・ファイルのFILESYSTEMIO_OPTIONS初期化パラメータをSETALLに設定することにより、非同期入出力および直接入出力の両方を有効にできます。

B.5 マルチスレッド同時処理

同時マルチスレッドが有効になっている場合、v$osstatビューは、オンライン論理(NUM_LCPUS)および仮想CPU(NUM_VCPUS)に対応した2つの行を追加して報告します。

B.6 共有リソースの割当て

MEMORY_TARGETまたはMEMORY_MAX_TARGET機能を使用するには、次のカーネル・パラメータを変更する必要があります。

- /dev/shmマウント・ポイントは、SGA_MAX_SIZEの値が設定されていれば、その値以上にするか、MEMORY_TARGETとMEMORY_MAX_TARGETのうちいずれか大きいほうの値以上に設定する必要があります。たとえば、MEMORY_MAX_TARGET=4GBのみが設定されている場合、4GBのシステムを/dev/shmマウント・ポイントに作成するには、次の手順を実行します。

- rootユーザーで次のコマンドを実行します。

# mount -t tmpfs shmfs -o size=4g /dev/shm

- システムの再起動時にインメモリー・ファイル・システムが確実にマウントされるように、/etc/fstabファイルに次のようなエントリを追加します。

tmpfs /dev/shm tmpfs size=4g 0

- 各Oracleインスタンスのファイル記述子の数は、512*PROCESSESだけ増加します。したがって、ファイル記述子の最大数は、少なくともこの値以上にし、オペレーティング・システムの要件に応じてさらに数を足す必要があります。たとえば、cat /proc/sys/fs/file-maxコマンドで32768が返され、PROCESSESが100である場合、Oracleに対して51200使用可能にするには、rootとしてこの値を6815744以上に設定します。次のどちらかのオプションを使用して、file-max記述子の値を設定します。

- 次のコマンドを実行します。

echo 6815744 > /proc/sys/fs/file-max

または

- /etc/sysctl.confファイル内で次のエントリを変更し、rootとしてシステムを再起動します。

fs.file-max = 6815744

- プロセスごとのファイル記述子の数は、512以上である必要がありますたとえば、rootとして次のコマンドを実行します。

- bashおよびshの場合

# ulimit -n

- cshの場合

# limit descriptors

前のコマンドで200が返される場合、次のコマンドを実行して、プロセッサごとのファイル記述子の上限の値(たとえば、1000)を設定します。

- bashおよびshの場合

# sudo sh
# ulimit -n 1000

- cshの場合

# sudo sh
# limit descriptors 1000

- LOCK_SGAが有効になっている場合、MEMORY_TARGETおよびMEMORY_MAX_TARGETは使用できません。MEMORY_TARGETおよびMEMORY_MAX_TARGETは、LinuxのHugeページでも使用できません。

B.7 32ビットLinuxから64ビットLinuxへのデータベースの移行

Oracle Database 11gリリース2(11.2) for 32-bit LinuxをOracle Database 11gリリース2(11.2) for 64-bit Linuxに移行するには、次の手順を実行する必要があります。

- RMANを使用したデータベースのオンライン・バックアップ

- 32ビットLinuxデータベースから64ビットLinuxデータベースへの移行

- データのASMへの移行およびASMからの移行

B.7.1 RMANを使用したデータベースのオンライン・バックアップ

オンライン・バックアップでは、データベースを停止せずに、データベースのバックアップを取ることができます。これを実行する手順を次に示します。

1. SYSDBAとしてデータベース・インスタンスに接続します。

SQL> CONNECT / AS SYSDBA;

2. 次のコマンドを実行して、データベースがARCHIVELOGモードであることを確認します。

SQL> SHUTDOWN IMMEDIATE
Database closed
Database dismounted
Oracle instance shutdown

SQL> STARTUP MOUNT
Oracle instance started

Total System Global Area  272629760 bytes
Fixed Size                   788472 bytes
Variable Size             103806984 bytes
Database Buffers          167772160 bytes
Redo Buffers                 262144 bytes
Database mounted

SQL>ALTER DATABASE ARCHIVELOG;
Database altered

SQL> ALTER DATABASE OPEN;
Database altered

3. 次のコマンドを実行してRMANを起動します。RMANは$ORACLE_HOME/binディレクトリにあります。

RMAN>connect target

4. 32ビットのデータベースとすべてのアーカイブREDOログ・ファイルをバックアップするには、次のコマンドを実行します。

RMAN>backup database plus archivelog delete input;

注意:
アーカイブREDOログは、データベースのリカバリに非常に重要です。これをデータベースとともにバックアップすることをお薦めします。次のコマンドを発行することで、アーカイブREDOログを随時バックアップできます。

RMAN>backup archivelog all delete input;

B.7.2 32ビットLinuxデータベースから64ビットLinuxデータベースへの移行

この項では、次の項目について説明します。

- データファイルのディレクトリ構造が同一の32ビット・データベースから64ビット・データベースへの移行

- データファイルのディレクトリ構造が異なる32ビット・データベースから64ビット・データベースへの移行

B.7.2.1 データファイルのディレクトリ構造が同一の32ビット・データベースから64ビット・データベースへの移行

ターゲット・コンピュータの制御ファイル、データファイル、REDOログ・ファイルの構造がソース・コンピュータと同じである場合は、次の手順を実行します。

1. 移行処理を開始する前に、データベースのオンライン・バックアップを実行します。詳細は、「RMANを使用したデータベースのオンライン・バックアップ」を参照してください。

2. Oracle Database 11gリリース2(11.2) for 64-bit Linuxを新しいOracle Databaseホームにインストールします。32ビット・コンピュータと同じバージョンのOracle Databaseホームを使用することをお薦めします。

関連項目:
『Oracle Databaseインストレーション・ガイド for Linux』

3. 32ビットLinuxコンピュータから、init.ora、データファイル、制御ファイルおよびREDOログ・ファイルを、64ビットLinuxコンピュータの対応する場所にコピーします。

4. init.oraファイルを編集して、次の変更を含めます。

- ファイルに含まれるメモリー要件を更新します。

- 必要に応じて、制御ファイルの場所を編集します。

注意:
init.oraファイルにリストされた共有プール、Javaプール、sga_targetおよびラージ・プールの値を2倍にすることをお薦めします。

5. SYSDBAとしてデータベース・インスタンスに接続します。

SQL> CONNECT / AS SYSDBA;

6. 後で成功を確認できるように、ログ・ファイルに結果をスプールするためのシステム設定を行います。次に例を示します。

SQL> SPOOL /tmp/utlirp.log

7. 64ビットOracle Databaseを起動します。

SQL> STARTUP UPGRADE pfile=init.ora;

注意:
32ビットから64ビットへの変更の詳細は、『Oracle Databaseアップグレード・ガイド』を参照してください。

8. 64ビットOracle Databaseで次のコマンドを実行して、すべてのPL/SQLモジュールを無効化します。

SQL> @$ORACLE_HOME/rdbms/admin/utlirp.sql

9. 64ビットOracle Databaseを停止します。

SQL>shutdown immediate;

10. 64ビットOracle Databaseを起動します。

SQL> STARTUP pfile=init.ora;

11. JServer JAVA仮想マシン・コンポーネントがインストールされている場合は、SYSとして接続してから次の手順を実行します。

begin
update obj$ set status=5 where obj#=(select obj# from obj$,javasnm$
where owner#=0 and type#=29 and short(+)=name and
nvl(longdbcs,name)='oracle/aurora/rdbms/Compiler');
commit;
declare
cursor C1 is select
'DROP JAVA DATA "' || u.name || '"."' || o.name || '"'
from obj$ o,user$ u where o.type#=56 and u.user#=o.owner#;

ddl_statement varchar2(200);
iterations number;
previous_iterations number;
loop_count number;
my_err     number;
begin
previous_iterations := 10000000;
loop
-- To make sure we eventually stop, pick a max number of iterations
select count(*) into iterations from obj$ where type#=56;
exit when iterations=0 or iterations >= previous_iterations;
previous_iterations := iterations;
loop_count := 0;
open C1;
loop
begin
fetch C1 into ddl_statement;
exit when C1%NOTFOUND or loop_count > iterations;
exception when others then
my_err := sqlcode;
if my_err = -1555 then -- snapshot too old, re-execute fetch query
exit;
else
raise;
end if;
end;
initjvmaux.exec(ddl_statement);
loop_count := loop_count + 1;
end loop;
close C1;
end loop;
end;
commit;
initjvmaux.drp('delete from java$policy$shared$table');
update obj$ set status=1 where obj#=(select obj# from obj$,javasnm$
where owner#=0 and type#=29 and short(+)=name and
nvl(longdbcs,name)='oracle/aurora/rdbms/Compiler');
commit;
end;
/
create or replace java system;
/

12. すべての既存のPL/SQLモジュールを、64ビットOracle Databaseに必要な形式で再び有効にします。

SQL>$ORACLE_HOME/rdbms/admin/utlrp.sql;

B.7.2.2 データファイルのディレクトリ構造が異なる32ビット・データベースから64ビット・データベースへの移行

ソース・コンピュータと比較して、ターゲット・コンピュータの制御ファイル、データファイル、REDOログ・ファイルの構造が異なる場合は、次の手順を実行します。

1. 移行処理を開始する前に、データベースのオンライン・バックアップを実行します。詳細は、「RMANを使用したデータベースのオンライン・バックアップ」を参照してください。

2. Oracle Database 11gリリース2(11.2) for 64-bit Linuxを新しいOracle Databaseホームにインストールします。32ビット・コンピュータと同じバージョンのOracle Databaseホームを使用することをお薦めします。

関連項目:
『Oracle Databaseインストレーション・ガイド for Linux』

3. 64ビット・コンピュータのinit.oraファイルを編集して、次の変更を含めます。

- ファイルに含まれるメモリー要件を更新します。

- init.oraファイルには、32ビットの制御ファイルのパスが記述されています。control_filesパラメータ値を手動で更新して、64ビットの制御ファイルの場所を含める必要があります。

注意:
init.oraファイルにリストされた共有プール、Javaプール、sga_targetおよびラージ・プールの値を2倍にすることをお薦めします。

4. 64ビットのターゲット・コンピュータに含まれるデータファイルの構造が異なる場合は、制御ファイルを再作成するか、64ビット・コンピュータにデータベースをマウントする必要があります。詳細は、「データファイルのパスおよび名前の再調整」を参照してください。

注意:
制御ファイルの再作成時にRESETLOGSオプションを使用することは推奨されません。

5. 後で成功を確認できるように、ログ・ファイルに結果をスプールするためのシステム設定を行います。次に例を示します。

SQL> SPOOL /tmp/utlirp.log

6. 64ビットOracle Databaseで次のコマンドを実行して、すべてのPL/SQLモジュールを無効化します。

SQL> @$ORACLE_HOME/rdbms/admin/utlirp.sql

7. ログ・ファイルへのスクリプト結果のスプーリングを無効化します。

SQL> SPOOL OFF;

8. 64ビットOracle Databaseを停止します。

SQL>shutdown immediate;

9. 64ビットOracle Databaseを起動します。

SQL> STARTUP pfile=init.ora;

10. JServer JAVA仮想マシン・コンポーネントがインストールされている場合は、SYSとして接続してから次の手順を実行します。

begin
update obj$ set status=5 where obj#=(select obj# from obj$,javasnm$
where owner#=0 and type#=29 and short(+)=name and
nvl(longdbcs,name)='oracle/aurora/rdbms/Compiler');
commit;
declare
cursor C1 is select
'DROP JAVA DATA "' || u.name || '"."' || o.name || '"'
from obj$ o,user$ u where o.type#=56 and u.user#=o.owner#;

ddl_statement varchar2(200);
iterations number;
previous_iterations number;
loop_count number;
my_err     number;
begin
previous_iterations := 10000000;
loop
-- To make sure we eventually stop, pick a max number of iterations
select count(*) into iterations from obj$ where type#=56;
exit when iterations=0 or iterations >= previous_iterations;
previous_iterations := iterations;
loop_count := 0;
open C1;
loop
begin
fetch C1 into ddl_statement;
exit when C1%NOTFOUND or loop_count > iterations;
exception when others then
my_err := sqlcode;
if my_err = -1555 then -- snapshot too old, re-execute fetch query
exit;
else
raise;
end if;
end;
initjvmaux.exec(ddl_statement);
loop_count := loop_count + 1;
end loop;
close C1;
end loop;
end;
commit;
initjvmaux.drp('delete from java$policy$shared$table');
update obj$ set status=1 where obj#=(select obj# from obj$,javasnm$
where owner#=0 and type#=29 and short(+)=name and
nvl(longdbcs,name)='oracle/aurora/rdbms/Compiler');
commit;
end;
/
create or replace java system;
/

11. すべての既存のPL/SQLモジュールを、64ビットOracle Databaseに必要な形式で再び有効にします。

SQL>$ORACLE_HOME/rdbms/admin/utlrp.sql;

データファイルのパスおよび名前の再調整

データファイルの名前およびパスが正しい場所を指すように再調整するには、次のような方法があります。

- 制御ファイルの再作成

- 64ビット・コンピュータへのデータベースのマウント

制御ファイルの再作成

制御ファイルを再作成するには、次の手順を実行します。

1. 次のコマンドを実行して、制御ファイルをトレース・ファイルにバックアップします。トレース・ファイルは、32ビットLinuxコンピュータのdiagnostic_destディレクトリにあります。次のコマンドにより、制御ファイルの再作成に必要なSQLを含むトレース・ファイルが生成されます。

SQL> alter database backup controlfile to trace;

注意:
制御ファイルが作成された後、UPGRADEモードでOracle Databaseをオープンしてください。

2. 32ビットLinuxコンピュータで.sql形式で生成されたトレース・ファイルの名前を変更します。次に例を示します。

$ cp trace.ora control.sql

制御ファイルの内容は、たとえば次のようになります。

- NORESETLOGSオプションを指定して制御ファイルを再作成する場合。
NORESETLOGSオプションが指定された32ビット制御ファイルを次に示します。

STARTUP NOMOUNT pfile=t_init1.ora
CREATE CONTROLFILE REUSE DATABASE "L32" NORESETLOGS  NOARCHIVELOG
MAXLOGFILES 32
MAXLOGMEMBERS 2
MAXDATAFILES 32
MAXINSTANCES 1
MAXLOGHISTORY 454
LOGFILE
GROUP 1 '/ade/aime_l32/oracle/dbs/t_log1.f'  SIZE 25M,
GROUP 2 '/ade/aime_l32/oracle/dbs/t_log2.f'  SIZE 25M
DATAFILE
'/ade/aime_l32/oracle/dbs/t_db1.f'
'/ade/aime_l32/oracle/dbs/t_ax1.f'
'/ade/aime_l32/oracle/dbs/t_undo1.f'
CHARACTER SET AL32UTF8;
RECOVER DATABASE;
ALTER DATABASE OPEN UPGRADE;
ALTER TABLESPACE TEMP ADD TEMPFILE '/ade/aime_l32/oracle/dbs/t_tmp1.f' SIZE 41943040  REUSE AUTOEXTEND ON NEXT 8192  MAXSIZE 32767M;

次は、変更された64ビット制御ファイルです。

STARTUP NOMOUNT pfile=t_init1.ora
CREATE CONTROLFILE REUSE DATABASE "L32" NORESETLOGS  NOARCHIVELOG
MAXLOGFILES 32
MAXLOGMEMBERS 2
MAXDATAFILES 32
MAXINSTANCES 1
MAXLOGHISTORY 454
LOGFILE
GROUP 1 '/ade/aime_l64/oracle/dbs/t_log1.f'  SIZE 25M,
GROUP 2 '/ade/aime_l64/oracle/dbs/t_log2.f'  SIZE 25M
DATAFILE
'/ade/aime_l64/oracle/dbs/t_db1.f'
'/ade/aime_l64/oracle/dbs/t_ax1.f'
'/ade/aime_l64/oracle/dbs/t_undo1.f'
CHARACTER SET AL32UTF8;
RECOVER DATABASE;
ALTER DATABASE OPEN UPGRADE;
ALTER TABLESPACE TEMP ADD TEMPFILE '/ade/aime_l64/oracle/dbs/t_tmp1.f' SIZE 41943040  REUSE AUTOEXTEND ON NEXT 8192  MAXSIZE 32767M;

- RESETLOGSオプションを指定して制御ファイルを再作成する場合。
RESETLOGSオプションが指定された32ビット制御ファイルを次に示します。

STARTUP NOMOUNT pfile=t_init1.ora
CREATE CONTROLFILE REUSE DATABASE "L32" RESETLOGS  NOARCHIVELOG
MAXLOGFILES 32
MAXLOGMEMBERS 2
MAXDATAFILES 32
MAXINSTANCES 1
MAXLOGHISTORY 454
LOGFILE
GROUP 1 '/ade/aime_l32/oracle/dbs/t_log1.f'  SIZE 25M,
GROUP 2 '/ade/aime_l32/oracle/dbs/t_log2.f'  SIZE 25M
DATAFILE
'/ade/aime_l32/oracle/dbs/t_db1.f'
'/ade/aime_l32/oracle/dbs/t_ax1.f'
'/ade/aime_l32/oracle/dbs/t_undo1.f'
CHARACTER SET AL32UTF8;
RECOVER DATABASE USING BACKUP CONTROLFILE;
ALTER DATABASE OPEN RESETLOGS UPGRADE;
ALTER TABLESPACE TEMP ADD TEMPFILE '/ade/aime_l32/oracle/dbs/t_tmp1.f' SIZE 41943040  REUSE AUTOEXTEND ON NEXT 8192  MAXSIZE 32767M;

次は、変更された64ビット制御ファイルです。

STARTUP NOMOUNT pfile=t_init1.ora
CREATE CONTROLFILE REUSE DATABASE "L32" RESETLOGS  NOARCHIVELOG
MAXLOGFILES 32
MAXLOGMEMBERS 2
MAXDATAFILES 32
MAXINSTANCES 1
MAXLOGHISTORY 454
LOGFILE
GROUP 1 '/ade/aime_l64/oracle/dbs/t_log1.f'  SIZE 25M,
GROUP 2 '/ade/aime_l64/oracle/dbs/t_log2.f'  SIZE 25M
DATAFILE
'/ade/aime_l64/oracle/dbs/t_db1.f'
'/ade/aime_l64/oracle/dbs/t_ax1.f'
'/ade/aime_l64/oracle/dbs/t_undo1.f'
CHARACTER SET AL32UTF8;
RECOVER DATABASE USING BACKUP CONTROLFILE;
ALTER DATABASE OPEN RESETLOGS UPGRADE;
ALTER TABLESPACE TEMP ADD TEMPFILE '/ade/aime_l64/oracle/dbs/t_tmp1.f' SIZE 41943040  REUSE AUTOEXTEND ON NEXT 8192  MAXSIZE 32767M;

3. 正しい場所を指すようにファイル・パスを再調整する際に使用した方法に基づいて、ソースの32ビットLinuxコンピュータからターゲットの64ビットLinuxコンピュータに必要なファイルをコピーする必要があります。

- NORESETLOGSオプション: 32ビットLinuxコンピュータから、init.ora、データファイル、再作成した制御ファイル(control.sql)およびREDOログ・ファイルを、64ビットLinuxコンピュータの対応する場所にコピーします。

- RESETLOGSオプション: 32ビットLinuxコンピュータから、init.ora、データファイルおよび再作成した制御ファイル(control.sql)を、64ビットLinuxコンピュータの対応する場所にコピーします。

4. SYSDBAとしてデータベース・インスタンスに接続します。

SQL> CONNECT / AS SYSDBA;

5. Linux 64ビットのOracle Databaseホームから次のコマンドを実行して、32ビットから64ビットに変更します。

sql>set echo on
sql>@control.sql

64ビット・コンピュータへのデータベースのマウント

64ビット・コンピュータにデータベースをマウントするには、次の手順を実行します。

1. 32ビットLinuxコンピュータから、init.ora、データファイル、制御ファイルおよびREDOログ・ファイルを、64ビットLinuxコンピュータの対応する場所にコピーします。

2. SYSDBAとしてデータベース・インスタンスに接続します。

SQL> CONNECT / AS SYSDBA;

3. 64ビットOracle Databaseを起動します。

SQL> STARTUP mount pfile=init.ora;

4. すべての32ビットのデータファイルの場所を更新して、64ビットのデータファイルの場所を含めます。次に例を示します。

sql> alter database rename file '/ade/aime_l32/oracle/dbs/t_db1.f' to '/ade/aime_l64/oracle/dbs/t_db1.f'
sql> Database altered.

5. すべての32ビットのログ・ファイルの場所を更新して、64ビットのログ・ファイルの場所を含めます。次に例を示します。

sql> alter database rename file '/ade/aime_l32/oracle/dbs/t_log.f' to '/ade/aime_l64/oracle/dbs/t_log.f'
sql> Database altered.

6. Linux 64ビットのOracle Databaseホームから次のコマンドを実行して、32ビットから64ビットに変更します。

sql> ALTER DATABASE OPEN UPGRADE;

注意:
32ビットから64ビットへの変更の詳細は、『Oracle Databaseアップグレード・ガイド』を参照してください。

B.7.3 データのASMへの移行およびASMからの移行

自動ストレージ管理(ASM)を利用するために、Recovery Manager(RMAN)を使用してOracle 11gリリース2(11.2)データベースをASMディスク・グループに移行、およびASMディスク・グループから移行できます。この移行は、プライマリ・バックアップおよびリカバリ計画にRMANを使用していなくても、RMANを使用して実行されます。

関連項目:
データベースの移行の詳細は、『Oracle Automatic Storage Management管理者ガイド』の第8章「RMANでのASMデータ移行の実行」を参照してください。

C HP-UXシステムでのOracle Databaseの管理

この付録では、HP-UXシステムでOracle Databaseを管理する方法について説明します。内容は次のとおりです。

- Oracleインスタンス用のHP-UX共有メモリー・セグメント

- HP-UX SCHED_NOAGEスケジュール・ポリシー

- 軽量タイマーの実装

- 非同期入出力

- 大規模メモリーの割当てとOracle Databaseのチューニング

- CPU_COUNT初期化パラメータおよびHP-UX動的プロセッサ再構成

- ネットワーク情報サービスの外部ネーミングのサポート

- 拡張ホスト名および拡張ノード名のアクティブ化と設定

C.1 Oracleインスタンス用のHP-UX共有メモリー・セグメント

Oracle Databaseは、インスタンスの起動時に、Oracleシステム・グローバル領域(SGA)の作成用に割り当てられた共有メモリーをHP-UX shmmaxカーネル・パラメータの値で除算して、メモリー・セグメントを作成します。たとえば、1つのOracleインスタンスに割り当てられた共有メモリーが64GBで、shmmaxパラメータの値が1GBの場合、Oracle Databaseはそのインスタンスに対して64個の共有メモリー・セグメントを作成します。

1つのOracleインスタンスに対して複数の共有メモリー・セグメントが作成されると、パフォーマンスが低下する可能性があります。これは、Oracle Databaseでインスタンスが作成されるときに、各共有メモリー・セグメントが一意の保護キーを受け取るためです。使用できる保護キーの数は、次の表に示すように、システム・アーキテクチャによって異なります。

アーキテクチャ

保護キーの数

PA-RISC

6

Itanium

14

Oracleインスタンスが作成する共有メモリー・セグメントが保護キーの数より多い場合、HP-UXオペレーティング・システムは、保護キー・フォルトを表示します。

shmmaxパラメータ値は、システムで使用できる物理メモリーの量に設定することをお薦めします。この設定により、1つのOracleインスタンスの共有メモリー全体が1つの共有メモリー・セグメントに割り当てられ、インスタンスに必要な保護キーが1つのみになります。

システムのアクティブな共有メモリー・セグメントのリストを表示するには、次のコマンドを実行します。

$ ipcs -m

Oracle Databaseがインスタンスに対して保護キーの数よりも多いセグメントを作成する場合は、shmmaxカーネル・パラメータの値を大きくします。

関連項目:
カーネル・パラメータの推奨最小値の詳細は、『Oracle Databaseインストレーション・ガイド』を参照してください

C.2 HP-UX SCHED_NOAGEスケジュール・ポリシー

HP-UXでは、ほとんどのプロセスがタイムシェアリング・スケジュール・ポリシーを使用します。タイムシェアリングが適用されると、重要な操作(ラッチの保持など)が実行されるときにOracleプロセスがスケジュールから除外されるため、パフォーマンスが低下する場合があります。HP-UXには、特にこの問題に対処した修正済のスケジュール・ポリシーであるSCHED_NOAGEが用意されています。通常のタイムシェアリング・ポリシーとは異なり、SCHED_NOAGEを使用してスケジュールが設定されたプロセスは、優先順位が上下したり、優先使用されることがありません。

この機能は、オンライン・トランザクション処理環境に適しています。これは、オンライン・トランザクション処理環境では重要なリソースをめぐって競合が発生することがあるためです。Oracle DatabaseでSCHED_NOAGEポリシーを使用すると、オンライン・トランザクション処理環境では、パフォーマンスが10%以上も向上する可能性があります。

SCHED_NOAGEポリシーを意思決定支援環境で使用しても、同程度のパフォーマンス効果は得られません。これは、リソースの競合がほとんど発生しないためです。アプリケーションおよびサーバーの環境はそれぞれ異なるため、使用している環境に対してSCHED_NOAGEポリシーが有効であることをテストして検証する必要があります。SCHED_NOAGEを使用する場合、Oracleプロセスに最も高い優先順位を割り当てる際には注意が必要です。SCHED_NOAGEの最も高い優先順位をOracleプロセスに割り当てると、システムのCPUリソースを使い果し、他のユーザー・プロセスのレスポンスが停止する可能性があります。

C.2.1 Oracle Database用のSCHED_NOAGEの有効化

Oracle DatabaseでSCHED_NOAGEスケジュール・ポリシーを使用できるようにするには、OSDBAグループ(通常はdbaグループ)に、スケジュール・ポリシーの変更およびOracleプロセスの優先順位レベルの設定を行うためのRTSCHEDおよびRTPRIO権限が必要です。dbaグループにこれらの権限を付与するには、次の手順を実行します。

1. rootユーザーでログインします。

2. テキスト・エディタを使用して/etc/privgroupファイルを開くか、必要な場合は作成します。

3. OSDBAグループの名前で始まる次の行を追加または編集し、システムが再起動するたびにこのグループに付与するRTPRIOおよびRTSCHED権限を指定します。

dba RTPRIO RTSCHED

4. ファイルを保存してテキスト・エディタを終了します。

5. 次のコマンドを入力し、OSDBAグループに権限を付与します。

# /usr/sbin/setprivgrp -f /etc/privgroup

6. 次のコマンドを入力し、権限が正しく設定されていることを確認します。

# /usr/bin/getprivgrp dba

HPUX_SCHED_NOAGEは、静的な初期化パラメータであるため、新しい設定を有効にするには、インスタンスを再起動する必要があります。HPUX_SCHED_NOAGE初期化パラメータを各インスタンスのパラメータ・ファイルに追加し、このパラメータにプロセスの優先順位レベルを整数値で設定します。サポートされる値の範囲は178から255です。値が小さくなるほど優先順位が高くなります。すべてのOracleプロセスについて、HPUX_SCHED_NOAGE初期化パラメータのデフォルト値は178です。LMSプロセスでは、_os_sched_high_priority初期化パラメータを設定すると、この値を変更できます。_os_sched_high_priorityパラメータが31から2の間の場合、LMSプロセスはSCHED_RRで設定された優先順位で実行されます。パラメータの値が178から255の間の場合、プロセスはSCHED_NOAGEで設定された値で実行されます。ただし、LMSは、HPUX_SCHED_NOAGEの値より低い優先順位レベルでは実行されません。

HPUX_SCHED_NOAGEパラメータの設定が範囲外である場合、Oracle Databaseは自動的にそのパラメータを許容値に設定し、新しい値が設定されたSCHED_NOAGEポリシーを使用して処理を続行します。また、新しい設定に関するメッセージをalert_sid.logファイルに生成します。ユーザーまたは自動再調整によってOracleプロセスに最も高い優先順位が割り当てられた場合は常に、Oracle Databaseは、システムのCPUリソースが使い果される可能性があることを警告するメッセージをalert_sid.logファイルに生成します。このパラメータには、Oracleプロセスに必要な優先順位レベルを割り当てておくことをお薦めします。

関連項目:
優先順位ポリシーと優先順位の範囲の詳細は、HP-UXのドキュメントと、rtsched(1)およびrtsched(2)のmanページを参照してください。

C.3 軽量タイマーの実装

Oracle Database 11gでは、動的初期化パラメータSTATISTICS_LEVELがTYPICAL(デフォルト)またはALLに設定されている場合、いつでもランタイム統計を収集できます。このパラメータの設定は、TIMED_STATISTICS初期化パラメータを暗黙的にtrueに設定します。HP-UXシステムのOracle Databaseでは、gethrtime()システム・ライブラリ・コールを使用して、統計の収集中に経過時間を計算します。この軽量システム・ライブラリ・コールを使用すると、Oracleインスタンスを実行しながら、パフォーマンスに影響を与えることなく、いつでもランタイム統計を収集できます。

TIMED_STATISTICS初期化パラメータが明示的にtrueに設定されているときに、gethrtime()システム・ライブラリ・コールを使用すると、使用していない場合に比べてOracleのパフォーマンスを最大10%向上させることができます。また、ランタイム統計の収集にgethrtime()システム・ライブラリ・コールを使用しても、Oracle Databaseのオンライン・トランザクション処理のパフォーマンスが低下することはありません。

C.4 非同期入出力

非同期入出力擬似ドライバをHP-UX上で使用すると、Oracle DatabaseがRAWディスク・パーティションに対する入出力を非同期方式で実行できるようになり、入出力のオーバーヘッドが軽減してスループットが向上します。非同期入出力擬似ドライバは、HP-UXのサーバーとワークステーションの両方で使用できます。

この項では、次の項目について説明します。

- MLOCK権限

- 非同期入出力の実装

- 非同期入出力の検証

- SGAの非同期フラグ

C.4.1 MLOCK権限

Oracle Databaseで非同期入出力操作を処理できるようにするには、OSDBAグループ(dba)にMLOCK権限が必要です。dbaグループにMLOCK権限を付与するには、次の手順を実行します。

1. rootユーザーでログインします。

2. テキスト・エディタを使用して/etc/privgroupファイルを開くか、必要な場合は作成します。

3. OSDBAグループの名前で始まる次の行を追加または編集し、MLOCK権限を指定します。

注意:
このファイルでは、特定のグループに対する権限の指定に1行のみを使用する必要があります。このファイルにdbaグループに関する行が含まれている場合は、その行にMLOCK権限を追加してください。

dba RTPRIO RTSCHED MLOCK

4. ファイルを保存してテキスト・エディタを終了します。

5. 次のコマンドを入力し、OSDBAグループに権限を付与します。

# /usr/sbin/setprivgrp -f /etc/privgroup

6. 次のコマンドを入力し、権限が正しく設定されていることを確認します。

# /usr/bin/getprivgrp dba

C.4.2 非同期入出力の実装

HP-UXで非同期入出力を使用するには、データベース・ファイルの記憶域オプションとしてRAWパーティションを使用する自動ストレージ管理ディスク・グループを使用する必要があります。

関連項目:
HP-UXシステムでの自動ストレージ管理とRAW論理ボリュームの構成の詳細は、『Oracle Databaseインストレーション・ガイド』を参照してください

いずれかの記憶域オプションで非同期入出力を実装する前に、System Administrator Managementユーティリティを使用して、HP-UXカーネルに非同期ディスク・ドライバを構成する必要があります。

注意:
Oracle Database 11gリリース1では、ファイル・システムに対してDISK_ASYNCH_IOパラメータをFALSEに設定する必要がありませんでした。しかし、Oracle Database 11gリリース2からは、データベース・ファイルの格納にファイル・システムを使用する場合、初期化パラメータDISK_ASYNCH_IOをFALSEに設定する必要があります。デフォルトでは、DISK_ASYNCH_IOの値はTRUEです。
DISK_ASYNCH_IOパラメータをTRUEに設定する必要があるのは、データベース・ファイルの格納にRAWパーティションを使用する場合のみです。

System Administrator Managementユーティリティを使用して非同期ディスク・ドライバを追加し、カーネルを構成するには、次の手順を実行します。

1. rootユーザーで次のコマンドを実行します。

# sam

2. 「Kernel Configuration」領域を選択します。

3. 「Drivers」領域を選択します。

4. 非同期ディスク・ドライバ(asyncdsk)を選択します。

5. 「Actions」→「Add Driver to Kernel」の順に選択します。

6. 「List」→「Configurable Parameters」の順に選択します。

7. MAX_ASYNC_PORTSパラメータを選択します。

8. 「Action」→「Modify Configurable Parameter」の順に選択します。

9. 次のガイドラインに従ってパラメータに新しい値を指定し、「OK」をクリックします。
MAX_ASYNC_PORTSパラメータは、構成可能なHP-UXカーネル・パラメータで、/dev/asyncファイルを同時に開くことができる最大プロセス数を制御します。

最大数のプロセスが/dev/asyncファイルを開いた後で別のプロセスがそのファイルを開こうとすると、エラー・メッセージが表示されます。多数のシャドウ・プロセスやパラレル問合せスレーブが非同期入出力を実行しているシステムでは、このエラーが発生するとパフォーマンスが低下することがあります。このエラーは記録されません。このエラーを回避するには、/dev/asyncファイルにアクセスする可能性がある最大プロセス数を予測し、MAX_ASYNC_PORTSパラメータにその値を設定します。

10. 「Actions」→「Process a New Kernel」の順に選択します。

11. 次のいずれかのオプションを選択し、「OK」をクリックします。

- Move Kernel Into Place and Shutdown System/Reboot Now

- Do Not Move Kernel Into Place: Do Not Shutdown/Reboot Now

2番目のオプションを選択すると、新しいカーネルvmunix_testとその作成に使用されるsystem.SAM構成ファイルの両方が、/stand/buildディレクトリに作成されます。

HP-UX非同期デバイス・ドライバを使用して非同期入出力操作をできるようにするには、次の手順を実行します。

1. rootユーザーでログインします。

2. /dev/asyncが存在しない場合は、次のコマンドを使用して作成します。

# /sbin/mknod /dev/async c 101 0x104

デフォルトでは、マイナー番号は0(ゼロ)に設定されます次の表に、デバイス・ファイルの作成に使用できる様々な8ビットのマイナー番号を示します。

マイナー番号

説明

0x0

これは、/dev/asyncのHP-UXのデフォルト値です。

0x4

永久的に再試行するかわりに、ディスク・デバイス・タイムアウトが完了してエラー・コードが表示されるようになります。アプリケーション・レベルのディスク・ミラー化には、障害が発生したディスク・デバイスの修復をアプリケーションが永久的に待機する状況を回避するために、この設定が必要です。Oracle RDBMSユーザーは、自動ストレージ管理のミラーリング/レプリケーション(内部冗長性)を使用する場合、この機能を有効にする必要があります。SGAはメモリー内でロックされます。

0x100

asyncdsk_open(2)のコール時の、非同期ドライバによるメモリー・ページのオンデマンド・ロックが可能になります。オーバーヘッドの低いルーチンが、I/O操作の際にページをメモリー内にロックするために使用されます。
オンデマンド・ロックは、Oracleの自動メモリー管理機能(メモリー使用量の制御にinit.oraファイルのMEMORY_TARGETを使用)を使用する場合、非常に重要です。動的nParまたは動的vPar機能を利用するRDBMSデプロイメントでは、オンデマンド・ロックも構成する必要があります。

従来のRDBMSデプロイメントでは、オンデマンド・ロックの明らかな効果を踏まえてその使用を検討できます。一般に、SGA全体がメモリー内に即時にロックされないため、RDBMSの起動が速くなります。ただし、メモリー・ページがI/Oリクエストごとに動的にロック/ロック解除されるため、オンデマンド・ロックによってランタイム・パフォーマンスがわずかに低下するインスタンスもあります。

0x104

Grid InfrastructureインストールのASM I/O操作のタイムアウトが可能になります。これは、0x100および0x4の組合せです。どちらの機能も有効になります。

3. 次のコマンドを入力し、メジャー番号が101の/dev/asyncデバイス・ファイルが存在することを確認します。

# ls -l /dev/async

このコマンドの出力は、次のようになります。

crw------- 1 oracle   dba     101 0x000000 Oct 28 10:32  /dev/async

4. 必要に応じて、このデバイス・ファイルに対し、Oracleソフトウェア所有者およびOSDBAグループとの整合性のあるオペレーティング・システム所有者とアクセス権を指定します。
Oracleソフトウェア所有者がoracleで、OSDBAグループがdbaの場合は、次のコマンドを実行します。

# /usr/bin/chown oracle:dba /dev/async
# /usr/bin/chmod 660 /dev/async

C.4.3 非同期入出力の検証

非同期入出力を検証するには、最初に、HP-UX非同期ドライバがOracle Database用に構成されているかを検証します。次に、Oracle DatabaseがHP-UXデバイス・ドライバを介して非同期入出力を実行しているかを検証します。

- HP-UX非同期ドライバがOracle Database用に構成されているかの検証

- Oracle Databaseが非同期入出力を使用しているかの検証

C.4.3.1 HP-UX非同期ドライバがOracle Database用に構成されているかの検証

HP-UX非同期ドライバがOracle Database用に正しく構成されているかを検証するには、次の手順を実行します。

1. パラレル問合せスレーブ・プロセスの数が少ないOracle Databaseを起動します。

2. 次のコマンドを入力して、GlancePlus/UXユーティリティを起動します。

$ gpm

3. メイン・ウィンドウで、「Reports」→「Process List」の順にクリックします。

4. 「Process List」ウィンドウで、パラレル問合せスレーブ・プロセスを1つ選択し、「Reports」→「Process Open Files」の順に選択します。
パラレル問合せスレーブ・プロセスによって現在開かれているファイルのリストが表示されます。

5. オープン・ファイルのリストで、/dev/asyncファイルまたは101 0x104000モードをチェックします。
いずれかがリストに含まれている場合は、パラレル問合せスレーブ・プロセスによって/dev/asyncファイルが開かれており、HP-UX非同期デバイス・ドライバは、Oracleプロセスが非同期入出力を実行できるように正しく構成されています。/dev/asyncファイルのファイル記述子番号をメモしておきます。

C.4.3.2 Oracle Databaseが非同期入出力を使用しているかの検証

Oracle DatabaseがHP-UX非同期デバイス・ドライバを介して非同期入出力を使用しているかを検証するには、次の手順を実行します。

1. HP-UX tuscユーティリティを、前述の手順のGlancePlusで選択したものと同じOracleパラレル問合せスレーブにアタッチします。

2. 使用している環境で入出力バウンド問合せを実行します。

3. tusc出力でread/writeコールのパターンをチェックします。
そのためには、たとえば、次のコマンドを入力します。pidは、非同期入出力を処理する予定のパラレル問合せスレーブのプロセスIDです。

$ tusc -p pid > tusc.output

4. 問合せの実行後、[Ctrl]+[C]を押してプロセスから切断し、tusc.outputファイルを開きます。
次に、tusc.outputファイルのサンプルを示します。

( Attached to process 2052: "ora_p000_tpch" [ 64-bit ])
...................
........................
[2052] read(9, "80\0\001\013  \b\0\0\0\0\0\0\0\0".., 388) .. = 28
[2052] write(9, "\0\0\00e\0\0\0\080\0\001\013Ð \0".., 48) .. = 48
[2052] read(9, "80\0\001\013¢ 18\0\0\0\0\0\0\0\0".., 388) .. = 28
[2052] write(9, "\0\0\00e\0\0\0\080\0\001\01bd4\0".., 48) .. = 48

DISK_ASYNCH_IO初期化パラメータが明示的にfalseに設定されていない場合(デフォルトのtrueに設定されている場合)、tusc.outputファイルには、同じファイル記述子(この例では9)の非同期read/writeコールのパターンが連続して表示されます。

tusc.outputファイルのファイル記述子番号をGlancePlusの/dev/asyncファイルで使用されている番号にマップします。これらの番号は、特定のパラレル問合せスレーブ・プロセスについて一致している必要があります。これにより、HP-UX非同期ドライブを介した入出力が非同期であることが検証されます。同期入出力の場合またはDISK_ASYNCH_IO初期化パラメータが明示的にFALSEに設定されている場合、前述の非同期read/writeパターンは表示されません。かわりに、lseekまたはpread/pwriteのコールが表示されます。また、1つのファイル記述子のみでなく、多数の異なるファイル記述子(read/writeの最初の引数)が表示されます。

C.4.4 SGAの非同期フラグ

HP-UX上のOracle Databaseでは、HP-UX非同期ドライバが提供する非ブロック・ポーリング機能を使用して、入出力操作のステータスがチェックされます。このポーリングは、送信された入出力操作のステータスに基づいて非同期ドライバが更新するフラグのチェックにより実行されます。HP-UXでは、このフラグが共有メモリーに読み込まれている必要があります。

Oracle Databaseでは、非同期フラグを各OracleプロセスのSGA内に構成します。HP-UX上のOracle Databaseは、真の非同期入出力メカニズムを備え、以前に発行された入出力操作の一部が完了していなくても、入出力リクエストを発行できます。これにより、パフォーマンスが向上し、パラレル入出力プロセスの優れたスケーラビリティが保証されます。

リリース8.1.7より前のOracle Databaseのリリースでは、入出力操作は、HP-UX非同期ドライバを使用して共有メモリーからのみ実行できました。Oracle Database 11gでは、新しいHP-UX非同期ドライバを使用して共有メモリーとプロセス専用領域の両方から入出力操作を実行できます。ただし、非同期ドライバを介した入出力操作は、実際は非同期ではありません。これは、Oracle Databaseでは、非同期ドライバに送信された入出力操作のステータスのチェックに、ブロック待機を実行する必要があるためです。その結果、データベース・ライター・プロセスなどの一部のOracleプロセスでは、実質的には同期入出力が処理されています。

C.5 大規模メモリーの割当てとOracle Databaseのチューニング

Oracle Database 11gで稼働するアプリケーションは、以前のリリースで稼働するアプリケーションと比べて非常に大きいメモリーを使用できます。これは、HP-UXシステム上のOracle Database 11gで、仮想メモリー・データ・ページのデフォルト設定がD(4KB)からL(4GB)に変更されたためです。

この項では、次の項目について説明します。

- デフォルトの大規模仮想メモリー・ページ・サイズ

- チューニングに関する推奨事項

- チューニング可能なベース・ページ・サイズ

C.5.1 デフォルトの大規模仮想メモリー・ページ・サイズ

デフォルトでは、Oracle Databaseは、プロセス専用メモリーの割当てに、HP-UXで使用できる最大の仮想メモリー・ページ・サイズ設定を使用します。これは、値L(最大)で定義されます。この値は、Oracle実行可能ファイルのリンク時に、LARGE_PAGE_FLAGSオプションの1つとして設定されます。

仮想メモリー・ページ・サイズがLに設定されていると、HP-UXは、使用可能なプロセス専用メモリーを、1GB制限または割り当てられたメモリー量の合計に達するまで、1MB、4MB、16MBなどのサイズのページに割り当てます。Oracle PGAに十分なメモリーが割り当てられていて、大きなデータ・ページ・サイズ単位でのメモリー割当てが可能な場合、オペレーティング・システムは一度に最大ページ・サイズを割り当てます。たとえば、Oracle PGAに48MBを割り当てている場合、システムでは、16MBを3ページ設定するか、より小さい倍数の単位サイズのページを組み合せることができます。たとえば、1MBを4ページ、4MBを3ページ、16MBを2ページにするなどです。PGAに64MBを割り当てた場合、データ・ページ単位サイズと使用可能なメモリーが一致するため、1ページ(64MB)がオペレーティング・システムによって割り当てられます。

一般に、大規模メモリー・ページによってアプリケーションのパフォーマンスは向上します。これは、オペレーティング・システムが処理する必要のある仮想メモリー変換時のエラー数が減り、より多くのCPUリソースをアプリケーションに解放できるためです。また、プロセス専用メモリーの割当てに必要なデータ・ページ数の合計も減ります。これにより、プロセッサ・レベルでのTranslation Lookaside Bufferミスの可能性が減ります。

ただし、アプリケーションにメモリーの制約があり、非常に多くのプロセスを実行する傾向がある場合は、この大幅なページ・サイズの増加によってプロセスは大規模なメモリーの割当てを指示するため、メモリー不足エラー・メッセージが発生する可能性があります。このエラーが発生する場合は、ページ・サイズの値を小さくして、D(デフォルト)サイズの4KBからL(最大)サイズの4GBまでの間に設定する必要があります。

最小ページ・サイズ設定(4KB)を使用すると、最大ページ・サイズ設定を使用した場合よりもCPU使用率が20%以上高くなります。最大設定のLを使用すると、4MBの設定を使用した場合よりもメモリー使用率が50%以上高くなります。システムにメモリー制約がある場合は、使用できるメモリー・リソースの制約内で、ページ・サイズを特定のアプリケーションの要件と一致するように設定することをお薦めします。

たとえば、設定値Lでは問題が発生するアプリケーションで、4MBの仮想メモリー・ページ設定を使用すると、適切なパフォーマンスが得られる場合があります。

C.5.2 チューニングに関する推奨事項

永続的な専用SQL領域および大規模仮想メモリー・ページ・サイズへのメモリー割当ての増加に対応してチューニングを行うには、必要に応じて、Oracle Databaseの仮想メモリー・データ・ページ・サイズを減らすことをお薦めします。次のコマンドを使用して、ページ・サイズ設定を変更します。

# /usr/bin/chatr +pd newsize $ORACLE_HOME/bin/oracle

この例のnewsizeは、仮想メモリー・ページ・サイズの新しい値を表します。

chatrコマンドを次のように使用して、新しい設定を表示します。

# /usr/bin/chatr $ORACLE_HOME/bin/oracle

C.5.3 チューニング可能なベース・ページ・サイズ

ベース・ページ・サイズを大きくすると、メモリーを効率的に管理できます。base_pagesizeのデフォルト値は4KBです。HP-UX 11.31に導入された新機能により、kctune(1M)を起動してチューニング可能なbase_pagesizeを変更した後にコンピュータを再起動すると、ベース・ページのサイズを調整できます。

注意:
ベース・ページのサイズ機能は、HP-UX PA RISCオペレーティング・システムではサポートされていません。

C.6 CPU_COUNT初期化パラメータおよびHP-UX動的プロセッサ再構成

HP-UX 11iでは、プロセッサ・セットの動的ランタイム再構成と、有効なユーザーによるプロセッサ・セット間のワークロードの動的再割当てをサポートしています。

HP-UX Virtual Partitionsを使用すると、ユーザーは、各自のシステムを複数の論理パーティションで構成し、各パーティションに独自のプロセッサ、メモリーおよび入出力リソースのセットを割り当てて、HP-UXオペレーティング・システムの個別のインスタンスを実行できます。vParsに組み込まれているHP-UXプロセッサ・セットを使用すると、仮想パーティションを再起動せずに、仮想パーティション間でプロセッサを動的に移行できます。これにより、アプリケーション間でリソースのパーティション化を効率的に行うことができるため、HP-UXサーバー上で稼働する各アプリケーションに必要なリソース割当てに対する干渉および保証を最小限に抑えることができます。

関連項目:
動的リソース・プロビジョニングの詳細は、『Oracle Database概要』のシステムとデータベースの変更に関する項を参照してください

C.7 ネットワーク情報サービスの外部ネーミングのサポート

HP-UXでは、ネットワーク情報サービスの外部ネーミング・アダプタがサポートされています。ネットワーク情報サービスの外部ネーミングを構成および使用する方法の詳細は、『Oracle Database Net Services管理者ガイド』の外部ネーミング・メソッドの構成に関する項を参照してください。

C.8 拡張ホスト名および拡張ノード名のアクティブ化と設定

デフォルトでは、システムのノード名とホスト名の長さの制限は8バイトと64バイトです。システム管理者は、システムを構成してどちらの制限も255バイトに拡張できます。

長い名前を設定できるようにするには、動的カーネル調整可能パラメータexpanded_node_host_namesを有効にする必要があります。

カーネル・パラメータを有効にするには、次のコマンドを実行します。

kctune expanded_node_host_names=1

カーネル・パラメータを無効にするには、次のコマンドを実行します。

kctune expanded_node_host_names=0

D SolarisシステムでのOracle Databaseの管理

この付録では、SolarisでOracle Databaseの管理について説明します。

D.1 緊密共有メモリー

Solarisシステム上のOracle Databaseでは、Oracleプロセス間で仮想メモリー・リソースを共有するため、共有メモリー・セグメントとして緊密共有メモリーが使用されます。緊密共有メモリーを使用すると、共有メモリー・セグメント全体の物理メモリーが自動的にロックされます。

Solaris 10システムでは、ページング可能な動的緊密共有メモリーを使用できます。動的緊密共有メモリーを使用すると、Oracle Databaseではセグメントを共有するプロセス間で仮想メモリー・リソースを共有でき、同時にメモリーのページングも可能になります。このため、オペレーティング・システムでは、共有メモリー・セグメント全体の物理メモリーをロックする必要がありません。

Oracle Databaseでは、次の基準に基づいて、緊密共有メモリーまたは動的緊密共有メモリーが自動的に選択されます。

- システムで動的緊密共有メモリーを使用でき、SGA_MAX_SIZE初期化パラメータの値が、結合されたすべてのSGAコンポーネントに必要なサイズよりも大きい場合に、動的緊密共有メモリーが使用されます。これにより、Oracle Databaseでは、使用される物理メモリー量のみがロックされます。また、Oracle DatabaseはDISMがシステムで使用可能であれば使用し、MEMORY_TARGETまたはMEMORY_MAX_TARGETはユーザーによって設定されます。

- 起動時に共有メモリー・セグメント全体が使用中の場合、またはSGA_MAX_SIZEパラメータの値が、結合されたすべてのSGAコンポーネントに必要なサイズ以下の場合に、緊密共有メモリーが使用されます。

Oracle Databaseでは、緊密共有メモリーまたは動的緊密共有メモリーのいずれを使用するかに関係なく、インスタンスの起動後に、常に動的にサイズ変更できるコンポーネント(バッファ・キャッシュなど)、共有プールおよびラージ・プール間でメモリーを交換できます。Oracle Databaseでは、動的SGAコンポーネントからメモリーを解放し、それを別のコンポーネントに割り当てることができます。

動的緊密共有メモリーの使用時は、共有メモリー・セグメントがメモリー内で暗黙的にロックされないため、Oracle Databaseは起動時に使用している共有メモリーを明示的にロックします。動的なSGA操作によって使用される共有メモリーが増えると、Oracle Databaseは使用中のメモリーを明示的にロックします。動的なSGA操作によって共有メモリーが解放されると、Oracle Databaseは解放されたメモリーを明示的にロック解除するので、解放されたメモリーは他のアプリケーションで使用できるようになります。

Oracle Databaseは、oradismユーティリティを使用して共有メモリーのロックおよびロック解除を実行します。oradismユーティリティは、インストール時に自動的に設定されます。このため、動的SGAを使用するための構成作業は不要です。

注意:

- サーバー・パラメータ・ファイルのLOCK_SGAパラメータは、TRUEに設定しないでください。設定した場合、Oracle Database 11gは起動できません。

- oradismユーティリティのプロセス名は、ora_dism_sidです。sidはシステム識別子です。動的緊密共有メモリーを使用している場合、このプロセスはインスタンスの起動時に開始され、インスタンスの停止時に自動的に終了します。
oradismユーティリティが正しく設定されていないことを示すメッセージがアラート・ログに表示された場合は、oradismユーティリティが$ORACLE_HOME/binディレクトリにあり、スーパーユーザーの権限が付与されていることを確認してください。

E Oracle ODBC Driverの使用

この付録では、Oracle ODBC Driverの使用方法について説明します。内容は次のとおりです。

- Oracle ODBC Driverの動作保証

- サポートされていない機能

- データ型の実装

- データ型に関する制限事項

- SQLDriverConnect関数の接続文字列の書式

- プログラムでのロック・タイムアウトの削減

- ODBCアプリケーションのリンク

- ROWIDに関する情報の取得

- WHERE句のROWID

- 結果セットの有効化

- EXEC構文の有効化

- サポートされている機能

- Unicodeのサポート

- パフォーマンスとチューニング

- エラー・メッセージ

E.1 Oracle ODBCドライバの動作保証

UNIXプラットフォームでは、Oracle ODBCドライバはunixODBC.orgのOpen Source Driver Managerを使用する次のオペレーティング・システムで動作保証されています。

プラットフォーム

32ビットまたは64ビット

UnixODBC DMバージョン

Linux x86

32ビット

2.2.14

Linux x86-64

32ビット、64ビット

2.2.14

IBM: Linux on System z

32ビット、64ビット

2.2.14

Oracle Solaris on SPARC

32ビット、64ビット

2.2.14

IBM AIX on POWER Systems

32ビット、64ビット

2.2.12

Oracle Solaris on x86-64

64ビット

2.2.14

HP-UX Itanium

32ビット、64ビット

2.2.14

E.2 サポートされていない機能

Oracle ODBC Driverは、次のODBC 3.0機能をサポートしていません。

- 間隔データ型

- SQL_C_UBIGINTおよびSQL_C_SBIGINT Cデータ型識別子

- 共有接続

- 共有環境

- SQLSetConnectAttrのSQL_LOGIN_TIMEOUT属性

- 期限切れパスワード・オプション

Oracle ODBC Driverは、次の表に示すSQL関数をサポートしていません。

文字列関数

数値関数

時間関数、日付関数および間隔関数

BIT_LENGTH

ACOS

CURRENT_DATE

CHAR_LENGTH

ASIN

CURRENT_TIME

CHARACTER_LENGTH

ATAN

CURRENT_TIMESTAMP

DIFFERENCE

ATAN2

EXTRACT

OCTET_LENGTH

COT

TIMESTAMPDIFF

POSITION

DEGREES
RADIANS

RAND

ROUND

E.3 データ型の実装

この項では、DATE、TIMESTAMPおよび浮動小数点の各データ型について説明します。

DATEおよびTIMESTAMP

OracleのDATEおよびTIMESTAMPデータ型のセマンティクスは、同名のODBCデータ型と必ずしも正確に対応していません。OracleのDATEデータ型には、日付と時間の両方の情報が格納されています。これに対して、SQL_DATEデータ型に格納されているのは、日付情報のみです。OracleのTIMESTAMPデータ型にも日付と時間の情報が格納されていますが、その小数秒の精度は他方に比較して高くなります。Oracle ODBC Driverは、情報が失われるのを防ぐために、OracleのDATE列とTIMESTAMP列の両方のデータ型をSQL_TIMESTAMPとして報告します。同様に、Oracle ODBC DriverはSQL_TIMESTAMPパラメータをOracleのTIMESTAMP値としてバインドします。

関連項目:
パフォーマンスとチューニングに関するDATEおよびTIMESTAMPデータ型の詳細は、「DATEおよびTIMESTAMPデータ型」を参照してください。

浮動小数点データ型

Oracle Database 11gリリース2 (11.2)以上に接続すると、Oracle ODBC Driverは、Oracleの浮動小数点データ型BINARY_FLOATとBINARY_DOUBLEをODBCデータ型SQL_REALとSQL_DOUBLEにそれぞれマップします。これより前のリリースでは、SQL_REALとSQL_DOUBLEがOracleの汎用数値データ型にマップされていました。

E.4 データ型に関する制限事項

Oracle ODBC DriverおよびOracle Databaseには、データ型に関する制限事項があります。次の表に制限事項を示します。

制限があるデータ型

説明

リテラル

Oracle Databaseでは、SQL文のリテラルは4000バイトに制限されています。

SQL_LONGVARCHARおよびSQL_WLONGVARCHAR

Oracleでは、列型がLONGのSQL_LONGVARCHARデータは2,147,483,647バイトに制限されます。また、Oracleでは、列型がCLOBのSQL_LONGVARCHARデータは4GBに制限されます。これは、クライアント・ワークステーションのメモリーによる制限です。

SQL_LONGVARCHARおよびSQL_LONGVARBINARY

Oracle Databaseで使用できるのは、表ごとに1列のLONGデータ列のみです。LONGデータ型とは、SQL_LONGVARCHAR(LONG)およびSQL_LONGVARBINARY(LONG RAW)です。かわりに、CLOBおよびBLOB列の使用をお薦めします。1つの表で使用できるCLOBおよびBLOBの列数に制限はありません。

E.5 SQLDriverConnect関数の接続文字列の書式

SQLDriverConnect関数は、Oracle ODBC Driverによって実装される関数の1つです。次の表に、SQLDriverConnect関数コールの接続文字列の引数に含めることができるキーワードを示します。

キーワード

意味

値

DSN

ODBCデータソース名

ユーザー指定の名前。
これは必須のキーワードです。

DBQ

TNSサービス名

ユーザー指定の名前。
これは必須のキーワードです。

UID

ユーザーIDまたはユーザー名

ユーザー指定の名前。
これは必須のキーワードです。

PWD

パスワード

ユーザー指定の名前。
パスワードがない場合はPWD=;と指定します。

これは必須のキーワードです。

DBA

データベース属性

Wは書込みアクセスを意味します。
Rは読取り専用アクセスを意味します。

APA

アプリケーション属性

Tはスレッド・セーフティを有効にすることを意味します
Fはスレッド・セーフティを無効にすることを意味します

RST

結果セット

Tは結果セットを有効にすることを意味します。
Fは結果セットを無効にすることを意味します。

QTO

問合せタイムアウト・オプション

Tは問合せタイムアウトを有効にすることを意味します。
Fは問合せタイムアウトを無効にすることを意味します。

CSR

カーソルのクローズ

Tはカーソルのクローズを有効にすることを意味します。
Fはカーソルのクローズを無効にすることを意味します。

BAM

バッチ自動コミット・モード

IfAllSuccessfulは、すべての文が成功した場合のみコミットすることを意味します(古い動作)。
UpToFirstFailureは、最初に失敗した文までコミットすることを意味します。これはODBCバージョン7の動作です。

AllSuccessfulは、成功したすべての文をコミットすることを意味します。

FBS

フェッチ・バッファ・サイズ

ユーザー指定の数値(0バイト以上の値を指定します)。デフォルトは60,000バイトです。

FEN

フェイルオーバー

Tはフェイルオーバーを有効にすることを意味します。
Fはフェイルオーバーを無効にすることを意味します。

FRC

フェイルオーバー再試行数

ユーザー指定の数値。
デフォルトは10です。

FDL

フェイルオーバーの遅延

ユーザー指定の数値。
デフォルトは10です。

LOB

LOB書込み

TはLOBを有効にすることを意味します。
FはLOBを無効にすることを意味します。

FWC

SQL_WCHAR強制サポート

TはForce SQL_WCHARを有効にすることを意味します。
FはForce SQL_WCHARを無効にすることを意味します。

EXC

EXEC構文

TはEXEC構文を有効にすることを意味します。
FはEXEC構文を無効にすることを意味します。

XSM

スキーマ・フィールド

Defaultはデフォルト値が使用されることを意味します。
Databaseはデータベース名が使用されることを意味します。

Ownerは所有者名が使用されることを意味します。

MDI

METADATA IDデフォルトの設定

TはSQL_ATTR_METADATA_IDのデフォルト値がSQL_TRUEであることを意味します。
FはSQL_ATTR_METADATA_IDのデフォルト値がSQL_FALSEであることを意味します。

DPM

SQLDescribeParamの無効化

TはSQLDescribeParamを無効にすることを意味します。
FはSQLDescribeParamを有効にすることを意味します。

BTD

TIMESTAMPをDATEとしてバインド

TはSQL_TIMESTAMPがOracleのDATEとしてバインドされることを意味します。
FはSQL_TIMESTAMPがOracleのTIMESTAMPとしてバインドされることを意味します。

NUM

数値の設定

NLSは、グローバリゼーション・サポートの数値の設定が使用されることを意味します(小数点およびグループのセパレータを判断するため)。

E.6 プログラムでのロック・タイムアウトの削減

Oracle Databaseは、トランザクション間のロックの競合が解決されるまで無期限に待機します。ただし、Oracle Databaseがロックの解決を待機する時間は制限できます。制限するには、ODBCのSQLSetStmtAttr関数のコール時にSQL_ATTR_QUERY_TIMEOUT属性を設定してから、データソースに接続します。

E.7 ODBCアプリケーションのリンク

プログラムをリンクする場合は、そのプログラムをDriver Managerライブラリlibodbc.soにリンクする必要があります。

E.8 ROWIDに関する情報の取得

ODBCのSQLSpecialColumns関数は、表内の列に関する情報を返します。Oracle ODBC Driverで使用すると、この関数はOracle表に関連付けられたOracle ROWIDに関する情報を返します。

E.9 WHERE句のROWID

ROWIDは、SQL文のWHERE句で使用できます。ただし、ROWID値はパラメータ・マーカー内に存在している必要があります。

E.10 結果セットの有効化

Oracle参照カーソル(結果セットとも呼ばれます)によって、アプリケーションでは、ストアド・プロシージャとストアド・ファンクションを使用してデータを取得できます。ここでは、参照カーソルを使用してODBCを介して結果セットを有効にする方法を説明します。

- ストアド・プロシージャをコールするには、ODBC構文を使用する必要があります。システム固有のPL/SQLは、ODBCを介してサポートされていません。次のコード例は、プロシージャまたはファンクションを、パッケージなしでコールする方法、およびパッケージ内でコールする方法を示します。このコード例でのパッケージ名はRSETです。

Procedure call:
{CALL Example1(?)}
{CALL RSET.Example1(?)}
Function Call:
{? = CALL Example1(?)}
{? = CALL RSET.Example1(?)}

- PL/SQLの参照カーソル・パラメータは、プロシージャのコール時には省略されます。たとえば、プロシージャExample2には4つのパラメータが定義されているとします。パラメータ1と3は参照カーソル・パラメータで、パラメータ2と4は文字列です。コールは、次のように指定されます。

{CALL RSET.Example2("Literal 1", "Literal 2")}

次のサンプル・アプリケーションは、Oracle ODBC Driverを使用して結果セットを返す方法を示します。

/*
* Sample Application using Oracle reference cursors through ODBC
*
* Assumptions:
*
* 1) Oracle Sample database is present with data loaded for the EMP table.
*
* 2) Two fields are referenced from the EMP table, ename and mgr.
*
* 3) A data source has been setup to access the sample database.
*
*
* Program Description:
*
* Abstract:
*
* This program demonstrates how to return result sets using
* Oracle stored procedures
*
* Details:
*
* This program:
* Creates an ODBC connection to the database.
* Creates a Packaged Procedure containing two result sets.
* Executes the procedure and retrieves the data from both result sets.
* Displays the data to the user.
* Deletes the package then logs the user out of the database.
*
*
* The following is the actual PL/SQL this code generates to
* create the stored procedures.
*
DROP PACKAGE   ODBCRefCur;
CREATE PACKAGE ODBCRefCur AS
TYPE ename_cur IS REF CURSOR;
TYPE mgr_cur   IS REF CURSOR;
PROCEDURE EmpCurs(Ename IN OUT ename_cur, Mgr IN OUT mgr_cur, pjob IN VARCHAR2);

END;

/
CREATE PACKAGE BODY ODBCRefCur AS
PROCEDURE EmpCurs(Ename IN OUT ename_cur, Mgr IN OUT mgr_cur, pjob IN VARCHAR2)
AS
BEGIN
IF NOT Ename%ISOPEN
THEN
OPEN Ename for SELECT ename from emp;
END IF;

IF NOT Mgr%ISOPEN
THEN
OPEN Mgr for SELECT mgr from emp where job = pjob;
END IF;
END;
END;
/

*
*  End PL/SQL for Reference Cursor.
*/

/*
* Include Files
*/
#include <stdio.h>
#include <sql.h>
#include <sqlext.h>
/*
* Defines
*/
#define JOB_LEN 9
#define DATA_LEN 100
#define SQL_STMT_LEN 500
/*
* Procedures
*/
void DisplayError( SWORD HandleType, SQLHANDLE hHandle, char *Module );
/*
* Main Program
*/
int main()
{
SQLHENV hEnv;
SQLHDBC hDbc;
SQLHSTMT hStmt;
SQLRETURN rc;
char *DefUserName ="jones";
char *DefPassWord ="password";
SQLCHAR ServerName[DATA_LEN];
SQLCHAR *pServerName=ServerName;
SQLCHAR UserName[DATA_LEN];
SQLCHAR *pUserName=UserName;
SQLCHAR PassWord[DATA_LEN];
SQLCHAR *pPassWord=PassWord;
char Data[DATA_LEN];
SQLINTEGER DataLen;
char error[DATA_LEN];
char *charptr;
SQLCHAR SqlStmt[SQL_STMT_LEN];
SQLCHAR *pSqlStmt=SqlStmt;
char *pSalesMan = "SALESMAN";
SQLINTEGER sqlnts=SQL_NTS;
/*
* Allocate the Environment Handle
*/
rc = SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv );
if (rc != SQL_SUCCESS)
{
printf( "Cannot Allocate Environment Handle\n");
printf( "\nHit Return to Exit\n");
charptr = gets ((char *)error);
exit(1);
}
/*
* Set the ODBC Version
*/
rc = SQLSetEnvAttr( hEnv,SQL_ATTR_ODBC_VERSION,(void *)SQL_OV_ODBC3,0);
if (rc != SQL_SUCCESS)
{
printf( "Cannot Set ODBC Version\n");
printf( "\nHit Return to Exit\n");
charptr = gets ((char *)error);
exit(1);
}
/*
* Allocate the Connection handle
*/
rc = SQLAllocHandle( SQL_HANDLE_DBC, hEnv, &hDbc );
if (rc != SQL_SUCCESS)
{
printf( "Cannot Allocate Connection Handle\n");
printf( "\nHit Return to Exit\n");
charptr = gets ((char *)error);
exit(1);
}
/*
* Get User Information
*/
strcpy ((char *) pUserName, DefUserName );
strcpy ((char *) pPassWord, DefPassWord );
/*
* Data Source name
*/
printf( "\nEnter the ODBC Data Source Name\n" );
charptr = gets ((char *) ServerName);
/*
* User Name
*/
printf ( "\nEnter User Name Default [%s]\n", pUserName);
charptr = gets ((char *) UserName);
if (*charptr == '\0')
{
strcpy ((char *) pUserName, (char *) DefUserName );
}
/*
* Password
*/
printf ( "\nEnter Password Default [%s]\n", pPassWord);
charptr = gets ((char *)PassWord);
if (*charptr == '\0')
{
strcpy ((char *) pPassWord, (char *) DefPassWord );
}
/*
* Connection to the database
*/
rc = SQLConnect( hDbc,pServerName,(SQLSMALLINT) strlen((char  *)pServerName),pUserName,(SQLSMALLINT) strlen((char *)pUserName),pPassWord,(SQLSMALLINT) strlen((char *)pPassWord));
if (rc != SQL_SUCCESS)
{
DisplayError(SQL_HANDLE_DBC, hDbc, "SQLConnect");
}
/*
* Allocate a Statement
*/
rc = SQLAllocHandle( SQL_HANDLE_STMT, hDbc, &hStmt );
if (rc != SQL_SUCCESS)
{
printf( "Cannot Allocate Statement Handle\n");
printf( "\nHit Return to Exit\n");
charptr = gets ((char *)error);
exit(1);
}
/*
* Drop the Package
*/
strcpy( (char *) pSqlStmt, "DROP PACKAGE ODBCRefCur");
rc = SQLExecDirect(hStmt, pSqlStmt, strlen((char *)pSqlStmt));
/*
* Create the Package Header
*/
strcpy( (char *) pSqlStmt, "CREATE PACKAGE ODBCRefCur AS\n");
strcat( (char *) pSqlStmt, " TYPE ename_cur IS REF CURSOR;\n");
strcat( (char *) pSqlStmt, " TYPE mgr_cur IS REF CURSOR;\n\n");
strcat( (char *) pSqlStmt, " PROCEDURE EmpCurs (Ename IN OUT ename_cur,");
strcat( (char *) pSqlStmt, "Mgr IN OUT mgr_cur,pjob IN VARCHAR2);\n\n");
strcat( (char *) pSqlStmt, "END;\n");
rc = SQLExecDirect(hStmt, pSqlStmt, strlen((char *)pSqlStmt));
if (rc != SQL_SUCCESS)
{
DisplayError(SQL_HANDLE_STMT, hStmt, "SQLExecDirect");
}
/*
* Create the Package Body
*/
strcpy( (char *) pSqlStmt, "CREATE PACKAGE BODY ODBCRefCur AS\n");
strcat( (char *) pSqlStmt, " PROCEDURE EmpCurs (Ename IN OUT ename_cur,");
strcat( (char *) pSqlStmt, "Mgr IN OUT mgr_cur, pjob IN VARCHAR2)\n AS\n  BEGIN\n");
strcat( (char *) pSqlStmt, " IF NOT Ename%ISOPEN\n THEN\n");
strcat( (char *) pSqlStmt, " OPEN Ename for SELECT ename from emp;\n");
strcat( (char *) pSqlStmt, " END IF;\n\n");
strcat( (char *) pSqlStmt, " IF NOT Mgr%ISOPEN\n THEN\n");
strcat( (char *) pSqlStmt, " OPEN Mgr for SELECT mgr from emp where job = pjob;\n");
strcat( (char *) pSqlStmt, " END IF;\n");
strcat( (char *) pSqlStmt, " END;\n");
strcat( (char *) pSqlStmt, "END;\n");
rc = SQLExecDirect(hStmt, pSqlStmt, strlen((char *)pSqlStmt));
if (rc != SQL_SUCCESS)
{
DisplayError(SQL_HANDLE_STMT, hStmt, "SQLExecDirect");
}
/*
* Bind the Parameter
*/
rc = SQLBindParameter(hStmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,JOB_LEN,0,pSalesMan,0,&sqlnts);
/*
* Call the Store Procedure which executes the Result Sets
*/
strcpy( (char *) pSqlStmt, "{CALL ODBCRefCur.EmpCurs(?)}");
rc = SQLExecDirect(hStmt, pSqlStmt, strlen((char *)pSqlStmt));
if (rc != SQL_SUCCESS)
{
DisplayError(SQL_HANDLE_STMT, hStmt, "SQLExecDirect");
}
/*
* Bind the Data
*/
rc = SQLBindCol( hStmt,1,SQL_C_CHAR,Data,sizeof(Data),&DataLen);
if (rc != SQL_SUCCESS)
{
DisplayError(SQL_HANDLE_STMT, hStmt, "SQLBindCol");
}
/*
* Get the data for Result Set 1
*/
printf( "\nEmployee Names\n\n");
while ( rc == SQL_SUCCESS )
{
rc = SQLFetch( hStmt );
if ( rc == SQL_SUCCESS )
{
printf("%s\n", Data);
}
else
{
if (rc != SQL_NO_DATA)
{
DisplayError(SQL_HANDLE_STMT, hStmt, "SQLFetch");
}
}
}
printf( "\nFirst Result Set - Hit Return to Continue\n");
charptr = gets ((char *)error);
/*
* Get the Next Result Set
*/
rc = SQLMoreResults( hStmt );
if (rc != SQL_SUCCESS)
{
DisplayError(SQL_HANDLE_STMT, hStmt, "SQLMoreResults");
}
/*
* Get the data for Result Set 2
*/
printf( "\nManagers\n\n");
while ( rc == SQL_SUCCESS )
{
rc = SQLFetch( hStmt );
if ( rc == SQL_SUCCESS )
{
printf("%s\n", Data);
}
else
{
if (rc != SQL_NO_DATA)
{
DisplayError(SQL_HANDLE_STMT, hStmt, "SQLFetch");
}
}
}
printf( "\nSecond Result Set - Hit Return to Continue\n");
charptr = gets ((char *)error);
/*
* Should Be No More Results Sets
*/
rc = SQLMoreResults( hStmt );
if (rc != SQL_NO_DATA)
{
DisplayError(SQL_HANDLE_STMT, hStmt, "SQLMoreResults");
}
/*
* Drop the Package
*/
strcpy( (char *) pSqlStmt, "DROP PACKAGE ODBCRefCur");
rc = SQLExecDirect(hStmt, pSqlStmt, strlen((char *)pSqlStmt));
/*
* Free handles close connections to the database
*/
SQLFreeHandle( SQL_HANDLE_STMT, hStmt );
SQLDisconnect( hDbc );
SQLFreeHandle( SQL_HANDLE_DBC, hDbc );
SQLFreeHandle( SQL_HANDLE_ENV, hEnv );
printf( "\nAll Done - Hit Return to Exit\n");
charptr = gets ((char *)error);
return(0);
}
/*
* Display Error Messages
*/
void DisplayError( SWORD HandleType, SQLHANDLE hHandle, char *Module )
{
SQLCHAR MessageText[255];
SQLCHAR SQLState[80];
SQLRETURN rc=SQL_SUCCESS;
long NativeError;
SWORD RetLen;
SQLCHAR error[25];
char *charptr;
rc =
SQLGetDiagRec(HandleType,hHandle,1,SQLState,&NativeError,MessageText,255,&RetLen);
printf( "Failure Calling %s\n", Module );
if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
{
printf( "\t\t\t State: %s\n", SQLState);
printf( "\t\t\t Native Error: %d\n", NativeError );
printf( "\t\t\t Error Message: %s\n", MessageText );
}
printf( "\nHit Return to Exit\n");
charptr = gets ((char *)error);
exit(1);
}

E.11 EXEC構文の有効化

使用しているSQL ServerのEXEC文の構文を変更せずに同等のOracleプロシージャ・コールに容易に変換できる場合、その構文は、このオプションを有効にすると、Oracle ODBC Driverで変換できます。

SQL Serverプロシージャの完全な名前は、次に示す最大4つの識別子で構成されます。

- サーバー名

- データベース名

- 所有者名

- プロシージャ名

この名前の書式は次のとおりです。

[[[server.][database].][owner_name].]procedure_name

Microsoft SQL ServerデータベースからOracle Databaseに移行する際、各SQL Serverプロシージャまたはファンクションの定義は同等のOracle Database構文に変換され、Oracle Databaseのスキーマで定義されます。移行したプロシージャは、多くの場合、次のいずれかの方法で再編成(およびスキーマで作成)されます。

- すべてのプロシージャが1つのスキーマに移行されます(デフォルト・オプション)。

- 1つのSQL Serverデータベースに定義されているすべてのプロシージャが、そのデータベース名の付いたスキーマに移行されます。

- 特定のユーザーが所有するすべてのプロシージャが、そのユーザー名の付いたスキーマに移行されます。

移行したプロシージャを編成するこれら3通りの方法をサポートするためには、いずれかのスキーマ名オプションを指定してプロシージャ名を変換できます。変換したOracleプロシージャ・コールのオブジェクト名では、大/小文字が区別されません。

E.12 サポートされている機能

この項では、Oracle ODBC Driverでサポートされている機能について説明します。内容は次のとおりです。

- APIへの準拠

- ODBC API関数の実装

- ODBC SQL構文の実装

- データ型の実装

E.12.1 APIへの準拠

Oracle ODBC Driverリリース10.2.0.1.0以上では、コア、レベル2およびレベル1のすべての関数をサポートしています。

E.12.2 ODBC API関数の実装

次の表に、Oracle ODBC Driverが特定の関数を実装する方法を示します。

機能

説明

SQLConnect

SQLConnectで必要なのは、DBQ、ユーザーIDおよびパスワードのみです。

SQLDriverConnect

SQLDriverConnectでは、DSN、DBQ、UIDおよびPWDの各キーワードが使用されます。

SQLSpecialColumns

SQL_BEST_ROWID属性を指定してSQLSpecialColumnsをコールすると、常にROWID列を返します。

SQLProceduresおよびSQLProcedureColumns

次の項の説明を参照してください。

すべてのカタログ関数

SQL_ATTR_METADATA_ID文の属性がSQL_TRUEに設定されている場合、文字列の引数は、識別子の引数として処理されますが、このケースはあまり重要ではありません。この場合、アンダースコア(_)およびパーセント記号(%)は検索用パターン文字ではなく、実際の文字として処理されます。これに対して、この属性をSQL_FALSEに設定すると、文字列の引数は、通常の引数またはパターン値の引数となり、リテラルに処理されるため、このケースは重要です。

SQLProceduresおよびSQLProcedureColumns

SQLProceduresコールおよびSQLProcedureColumnsコールは、パッケージ内に含まれている場合でも、すべてのプロシージャおよびファンクションに関する情報を検索して返すように変更されました。これより前のリリースでは、これらのコールで検索されるのは、パッケージ外のプロシージャとファンクションのみでした。次の例では、SQL_ATTR_METADATA_ID属性をSQL_FALSEに設定した場合に返されるプロシージャまたはファンクションを示します。

この例では、次のストアド・プロシージャがあるとします。

"BAR"
"BARX"
"XBAR"
"XBARX"
"SQLPROCTEST.BAR"
"SQLPROCTEST.BARX"
"SQLPROCTEST.XBAR"
"SQLPROCTEST.XBARX"

%または%%%%%%と指定して検索すると、これら8つのプロシージャがすべて返されます。

%_または_%と指定して検索すると、次のプロシージャが返されます。

BAR
BARX
XBAR
XBARX

.、.%、%.%、SQLPROC%.またはSQLPROC%.%と指定して検索すると、次のプロシージャが返されます。

SQLPROCTEST.BAR
SQLPROCTEST.BARX
SQLPROCTEST.XBAR
SQLPROCTEST.XBARX

%BARと指定して検索すると、次のプロシージャが返されます。

BAR
XBAR

.%BARまたは%.%BARと指定して検索すると、次のプロシージャが返されます。

SQLPROCTEST.BAR
SQLPROCTEST.XBAR

SQLPROC%または.SQLPROC%と指定して検索すると、次のプロシージャが返されます。

nothing (0 rows)

E.12.3 ODBC SQL構文の実装

比較述語で比較の2番目の式としてパラメータ・マーカーが使用され、そのパラメータの値がSQLBindParameterを使用してSQL_NULL_DATAに設定されている場合、比較は失敗します。これは、ODBC SQLのNULL述語構文と一致しています。

E.12.4 データ型の実装

プログラマがデータ型を実装する際に最も考慮する必要があるのは、CHAR、VARCHARおよびVARCHAR2の各データ型です。

SQL_VARCHARの値がfSqlTypeの場合、SQLGetTypeInfoはOracle Databaseデータ型VARCHAR2を返します。SQL_CHARの値がfSqlTypeの場合、SQLGetTypeInfoはOracle Databaseデータ型CHARを返します。

E.13 Unicodeのサポート

この項では、Unicodeのサポートについて説明します。内容は次のとおりです。

- ODBC環境内でのUnicodeのサポート

- ODBC APIでのUnicodeのサポート

- SQLGetDataのパフォーマンス

- Unicodeのサンプル

E.13.1 ODBC環境内でのUnicodeのサポート

ODBC Driver Managerを使用すると、すべてのODBCドライバは、Unicodeをサポートしているかどうかに関係なくUnicode準拠と同様に動作します。これによって、ODBCアプリケーションは、基礎となるODBCドライバのUnicode機能に関係なく記述できます。

Driver ManagerがANSI ODBCドライバに対するUnicodeサポートをエミュレートできる範囲は、Unicodeデータとローカル・コード・ページ間で可能な変換内容によって制限されます。Driver ManagerがデータをUnicodeからローカル・コード・ページに変換する際、データが失われる場合があります。基礎となるODBCドライバがUnicodeをサポートしていないかぎり、Unicodeの完全なサポートは不可能です。Oracle ODBC Driverは、Unicodeを完全にサポートしています。

E.13.2 ODBC APIでのUnicodeのサポート

ODBC APIは、WおよびA接尾辞の変換を使用して、UnicodeおよびANSIエントリ・ポイントの両方をサポートします。ODBCアプリケーション開発者は、接尾辞を指定してエントリ・ポイントを明示的にコールする必要はありません。UNICODEおよび_UNICODEプリプロセッサ定義を使用してコンパイルされたODBCアプリケーションによって、適切なコールが生成されます。たとえば、SQLPrepareへのコールは、SQLPrepareWとしてコンパイルされます。

Cデータ型のSQL_C_WCHARがODBCインタフェースに追加されたため、アプリケーションでは、入力パラメータをUnicodeとしてエンコードするように指定するか、またはUnicodeとして返された列データを要求できます。マクロのSQL_C_TCHARは、UnicodeおよびANSIの両方で作成する必要があるアプリケーションで有効です。SQL_C_TCHARマクロは、Unicodeアプリケーションの場合はSQL_C_WCHARとして、ANSIアプリケーションの場合はSQL_C_CHARとしてコンパイルされます。

SQLデータ型のSQL_WCHAR、SQL_WVARCHARおよびSQL_WLONGVARCHARがODBCインタフェースに追加され、表内で定義された列がUnicodeで表現されるようになりました。これらの値は、SQLDescribeCol、SQLColAttribute、SQLColumnsおよびSQLProcedureColumnsへのコールから返すことも可能です。

Unicodeエンコーディングは、SQL列型のNCHAR、NVARCHAR2およびNCLOBに対してサポートされています。さらに、文字セマンティクスが列定義で指定されている場合、UnicodeエンコーディングはSQL列型のCHARおよびVARCHAR2に対してもサポートされています。

Oracle ODBC Driverは、これらのSQL列型をサポートしてODBC SQLデータ型にマップします。次の表に、サポートされているSQLデータ型および対応するODBC SQLデータ型を示します。

SQLデータ型

ODBC SQLデータ型

CHAR

SQL_CHARまたはSQL_WCHAR

VARCHAR2

SQL_VARCHARまたはSQL_WVARCHAR

NCHAR

SQL_WCHAR

NVARCHAR2

SQL_WVARCHAR

NCLOB

SQL_WLONGVARCHAR

E.13.3 SQLGetDataのパフォーマンス

SQLGetData関数を使用すると、ODBCアプリケーションはデータ型を指定して、データのフェッチ後に列を取得できます。OCIでは、Oracle ODBC Driverはデータ型を指定してからフェッチする必要があります。この場合、Oracle ODBC Driverは(データベースで定義された)列のデータ型に関する情報を使用し、OCIを介して列をフェッチする最適なデフォルト方法を判断します。

文字データを含む列がSQLBindColによってバインドされていない場合、Oracle ODBC Driverは、その列をUnicodeとしてフェッチするか、またはローカル・コード・ページとしてフェッチするかを判断する必要があります。ドライバは、列をUnicodeとして受け入れるように常にデフォルト設定できます。ただし、この設定では、2回の不要な変換が実行されます。たとえば、データベース内のデータがANSIとしてエンコードされた場合、データをOracle ODBC DriverにフェッチするためにANSIからUnicodeへの変換が実行されます。次に、ODBCアプリケーションがそのデータをSQL_C_CHARとして要求すると、データを元のエンコーディングに戻すための変換が実行されます。

Oracle Database Clientのデフォルト・エンコーディングは、データをフェッチする際に使用されます。ただし、ODBCアプリケーションでは、このデフォルトを上書きし、列またはパラメータをWCHARデータ型としてバインドすることによって、データをUnicodeとしてフェッチできます。

E.13.4 Unicodeのサンプル

Oracle ODBC Driver自体がTCHARマクロを使用して実装されているため、ODBCアプリケーション・プログラムでは、TCHARを使用して、このドライバを利用することをお薦めします。

次の例では、UNICODEおよび_UNICODEを指定してコンパイルするとWCHARデータ型になるTCHARの使用方法を示します。

例E-1 データベースへの接続

このコードを使用するには、SQLConnectにUnicodeリテラルのみ指定する必要があります。

HENV         envHnd;
HDBC         conHnd;
HSTMT        stmtHnd;
RETCODE      rc;

rc  = SQL_SUCCESS;

// ENV is allocated
rc = SQLAllocEnv(&envHnd);
// Connection Handle is allocated
rc = SQLAllocConnect(envHnd, &conHnd);
rc = SQLConnect(conHnd, _T("stpc19"), SQL_NTS, _T("jones"), SQL_NTS, _T("password"), SQL_NTS);
.
.
.
if (conHnd)
SQLFreeConnect(conHnd);
if (envHnd)
SQLFreeEnv(envHnd);

例E-2 単純な取得

次の例では、EMP表から従業員名と役職名を取得します。すべてのODBC関数にTCHAR準拠のデータを指定する必要があることを除いて、ANSIの場合と違いはありません。Unicodeアプリケーションの場合は、SQLBindColのコール時にバッファ長をBYTE長に指定する必要があります。たとえば、sizeof(ename)の場合は次のとおりです。

/*
** Execute SQL, bind columns, and Fetch.
** Procedure:
**
**   SQLExecDirect
**   SQLBindCol
**   SQLFetch
**
*/
static SQLTCHAR *sqlStmt = _T("SELECT ename, job FROM emp");
SQLTCHAR   ename[50];
SQLTCHAR     job[50];
SQLINTEGER enamelen, joblen;

_tprintf(_T("Retrieve ENAME and JOB using SQLBindCol 1.../n[%s]/n"), sqlStmt);

// Step 1: Prepare and Execute
rc = SQLExecDirect(stmtHnd, sqlStmt, SQL_NTS); // select
checkSQLErr(envHnd, conHnd, stmtHnd, rc);

// Step 2: Bind Columns
rc = SQLBindCol(stmtHnd,
1,
SQL_C_TCHAR,
ename,
sizeof(ename),
&enamelen);
checkSQLErr(envHnd, conHnd, stmtHnd, rc);

rc = SQLBindCol(stmtHnd,
2,
SQL_C_TCHAR,
job,
sizeof(job),
&joblen);
checkSQLErr(envHnd, conHnd, stmtHnd, rc);

do
{
// Step 3: Fetch Data
rc = SQLFetch(stmtHnd);
if (rc == SQL_NO_DATA)
break;
checkSQLErr(envHnd, conHnd, stmtHnd, rc);
_tprintf(_T("ENAME = %s, JOB = %s/n"), ename, job);
} while (1);
_tprintf(_T("Finished Retrieval/n/n"));

例E-3 SQLGetDataを使用した取得(フェッチ後のバインド)

この例では、SQLGetDataの使用方法を示します。Unicode固有の事項に関しては、ANSIアプリケーションとの違いはありません。

/*
** Execute SQL, bind columns, and Fetch.
** Procedure:
**
**   SQLExecDirect
**   SQLFetch
**   SQLGetData
*/
static SQLTCHAR *sqlStmt = _T("SELECT ename,job FROM emp"); // same as Case 1.
SQLTCHAR         ename[50];
SQLTCHAR         job[50];

_tprintf(_T("Retrieve ENAME and JOB using SQLGetData.../n[%s]/n"), sqlStmt);
if (rc != SQL_SUCCESS)
{
_tprintf(_T("Failed to allocate STMT/n"));
goto exit2;
}

// Step 1: Prepare and Execute
rc = SQLExecDirect(stmtHnd, sqlStmt, SQL_NTS); // select
checkSQLErr(envHnd, conHnd, stmtHnd, rc);

do
{

// Step 2: Fetch
rc = SQLFetch(stmtHnd);
if (rc == SQL_NO_DATA)
break;
checkSQLErr(envHnd, conHnd, stmtHnd, rc);

// Step 3: GetData
rc = SQLGetData(stmtHnd,
1,
SQL_C_TCHAR,
(SQLPOINTER)ename,
sizeof(ename),
NULL);
checkSQLErr(envHnd, conHnd, stmtHnd, rc);
rc = SQLGetData(stmtHnd,
2,
SQL_C_TCHAR,
(SQLPOINTER)job,
sizeof(job),
NULL);
checkSQLErr(envHnd, conHnd, stmtHnd, rc);
_tprintf(_T("ENAME = %s, JOB = %s/n"), ename, job);
} while (1);
_tprintf(_T("Finished Retrieval/n/n"));

例E-4 単純な更新

この例では、データの更新方法を示します。SQLBindParameterのデータ長は、UnicodeアプリケーションでもBYTE長で指定する必要があります。

/*
** Execute SQL, bind columns, and Fetch.
** Procedure:
**
**   SQLPrepare
**   SQLBindParameter
**   SQLExecute
*/
static SQLTCHAR *sqlStmt = _T("INSERT INTO emp(empno,ename,job) VALUES(?,?,?)");
static SQLTCHAR *empno   = _T("9876");      // Emp No
static SQLTCHAR *ename   = _T("ORACLE");    // Name
static SQLTCHAR *job     = _T("PRESIDENT"); // Job

_tprintf(_T("Insert User ORACLE using SQLBindParameter.../n[%s]/n"), sqlStmt);

// Step 1: Prepare
rc = SQLPrepare(stmtHnd, sqlStmt, SQL_NTS); // select
checkSQLErr(envHnd, conHnd, stmtHnd, rc);

// Step 2: Bind Parameter
rc = SQLBindParameter(stmtHnd,
1,
SQL_PARAM_INPUT,
SQL_C_TCHAR,
SQL_DECIMAL,
4,               // 4 digit
0,
(SQLPOINTER)empno,
0,
NULL);
checkSQLErr(envHnd, conHnd, stmtHnd, rc);

rc = SQLBindParameter(stmtHnd,
2,
SQL_PARAM_INPUT,
SQL_C_TCHAR,
SQL_CHAR,
lstrlen(ename)*sizeof(TCHAR),
0,
(SQLPOINTER)ename,
lstrlen(ename)*sizeof(TCHAR),
NULL);
checkSQLErr(envHnd, conHnd, stmtHnd, rc);

rc = SQLBindParameter(stmtHnd,
3,
SQL_PARAM_INPUT,
SQL_C_TCHAR,
SQL_CHAR,
lstrlen(job)*sizeof(TCHAR),
0,
(SQLPOINTER)job,
lstrlen(job)*sizeof(TCHAR),
NULL);
checkSQLErr(envHnd, conHnd, stmtHnd, rc);

// Step 3: Execute
rc = SQLExecute(stmtHnd);
checkSQLErr(envHnd, conHnd, stmtHnd, rc);

例E-5 長いデータ(CLOB)の更新と取得

ここでは、CLOBなどの長いデータをOracle Databaseで更新および取得する最も複雑な例を示します。データ長は常にBYTE長であるため、BYTE長を導出するには式lstrlen(TCHAR data)*sizeof(TCHAR)が必要です。

/*
** Execute SQL, bind columns, and Fetch.
** Procedure:
**
**   SQLPrepare
**   SQLBindParameter
**   SQLExecute
**   SQLParamData
**   SQLPutData
**
**   SQLExecDirect
**   SQLFetch
**   SQLGetData
*/
static SQLTCHAR *sqlStmt1  = _T("INSERT INTO clobtbl(clob1) VALUES(?)");
static SQLTCHAR *sqlStmt2  = _T("SELECT clob1 FROM clobtbl");
SQLTCHAR         clobdata[1001];
SQLTCHAR         resultdata[1001];
SQLINTEGER       ind = SQL_DATA_AT_EXEC;
SQLTCHAR        *bufp;
int              clobdatalen, chunksize, dtsize, retchklen;

_tprintf(_T("Insert CLOB1 using SQLPutData.../n[%s]/n"), sqlStmt1);

// Set CLOB Data
{
int i;
SQLTCHAR ch;
for (i=0, ch=_T('A'); i< sizeof(clobdata)/sizeof(SQLTCHAR); ++i, ++ch)
{
if (ch > _T('Z'))
ch = _T('A');
clobdata[i] = ch;
}
clobdata[sizeof(clobdata)/sizeof(SQLTCHAR)-1] = _T('/0');
}
clobdatalen = lstrlen(clobdata);  // length of characters
chunksize   = clobdatalen / 7;    // 7 times to put

// Step 1: Prepare
rc = SQLPrepare(stmtHnd, sqlStmt1, SQL_NTS);
checkSQLErr(envHnd, conHnd, stmtHnd, rc);
// Step 2: Bind Parameter with SQL_DATA_AT_EXEC
rc = SQLBindParameter(stmtHnd,
1,
SQL_PARAM_INPUT,
SQL_C_TCHAR,
SQL_LONGVARCHAR,
clobdatalen*sizeof(TCHAR),
0,
(SQLPOINTER)clobdata,
clobdatalen*sizeof(TCHAR),
&ind);
checkSQLErr(envHnd, conHnd, stmtHnd, rc);
// Step 3: Execute
rc = SQLExecute(stmtHnd);
checkSQLErr(envHnd, conHnd, stmtHnd, rc);

// Step 4: ParamData (initiation)
rc = SQLParamData(stmtHnd, (SQLPOINTER*)&bufp); // set value
checkSQLErr(envHnd, conHnd, stmtHnd, rc);

for (dtsize=0, bufp = clobdata;
dtsize < clobdatalen;
dtsize += chunksize, bufp += chunksize)
{
int len;
if (dtsize+chunksize<clobdatalen)
len = chunksize;
else
len = clobdatalen-dtsize;

// Step 5: PutData
rc = SQLPutData(stmtHnd, (SQLPOINTER)bufp, len*sizeof(TCHAR));
checkSQLErr(envHnd, conHnd, stmtHnd, rc);
}

// Step 6: ParamData (temination)
rc = SQLParamData(stmtHnd, (SQLPOINTER*)&bufp);
checkSQLErr(envHnd, conHnd, stmtHnd, rc);

rc = SQLFreeStmt(stmtHnd, SQL_CLOSE);
_tprintf(_T("Finished Update/n/n"));
rc = SQLAllocStmt(conHnd, &stmtHnd);
if (rc != SQL_SUCCESS)
{
_tprintf(_T("Failed to allocate STMT/n"));
goto exit2;
}

// Clear Result Data
memset(resultdata, 0, sizeof(resultdata));
chunksize   = clobdatalen / 15;   // 15 times to put

// Step 1: Prepare
rc = SQLExecDirect(stmtHnd, sqlStmt2, SQL_NTS); // select
checkSQLErr(envHnd, conHnd, stmtHnd, rc);

// Step 2: Fetch
rc = SQLFetch(stmtHnd);
checkSQLErr(envHnd, conHnd, stmtHnd, rc);
for(dtsize=0, bufp = resultdata;
dtsize < sizeof(resultdata)/sizeof(TCHAR) && rc != SQL_NO_DATA;
dtsize += chunksize-1, bufp += chunksize-1)
{
int len; // len should contain the space for NULL termination
if (dtsize+chunksize<sizeof(resultdata)/sizeof(TCHAR))
len = chunksize;
else
len = sizeof(resultdata)/sizeof(TCHAR)-dtsize;

// Step 3: GetData
rc = SQLGetData(stmtHnd,
1,
SQL_C_TCHAR,
(SQLPOINTER)bufp,
len*sizeof(TCHAR),
&retchklen);
}
if (!_tcscmp(resultdata, clobdata))
{
_tprintf(_T("Succeeded!!/n/n"));
}
else
{
_tprintf(_T("Failed!!/n/n"));
}

E.14 パフォーマンスとチューニング

この項では、次の項目について説明します。

- ODBCプログラミングの一般的なガイドライン

- データソース構成オプション

- DATEおよびTIMESTAMPデータ型

E.14.1 ODBCプログラミングの一般的なガイドライン

ODBCアプリケーションのパフォーマンスを向上させるには、次のプログラミング・ガイドラインを適用してください。

- アプリケーションがデータソースに頻繁に接続したり切断する場合は、接続プーリングを使用可能にします。プールされた接続の再利用は、接続の再確立に比べて非常に効率的です。

- 文を準備する回数を最小限にします。可能な場合は、バインド・パラメータを使用し、別のパラメータ値に対して文を再利用できるようにします。SQLExecuteごとに文を準備するよりも、1つの文を1回準備して複数回実行する方が効率的です。

- アプリケーションが取得しないことが判明している列、特にLONG列をSELECT文に含めないでください。LONG列がSELECT文に含まれていると、データベース・サーバー・プロトコルの特性上、アプリケーションが列をバインドするかSQLGetData操作を実行するかに関係なく、Oracle ODBC Driverでは列全体をフェッチする必要があるためです。

- データソースを更新しないトランザクションを実行する場合は、ODBCのSQLSetConnectAttr関数のSQL_ATTR_ACCESS_MODE属性をSQL_MODE_READ_ONLYに設定します。

- ODBCのエスケープ句を使用しない場合は、そのODBCのSQLSetConnectAttr関数またはSQLSetStmtAttr関数のSQL_ATTR_NOSCAN属性をtrueに設定します。

- 行数の多い表からデータを取得する場合は、ODBCのSQLFetch関数のかわりにODBCのSQLFetchScroll関数を使用します。

E.14.2 データソース構成オプション

この項では、次のODBCデータソース構成オプションを使用した場合のパフォーマンスへの影響を説明します。

- 結果セットを有効化
このオプションによって、プロシージャ・コールから結果セット(RefCursorなど)を返すサポートが有効になります。デフォルトでは、結果セットを返すサポートが有効です。

Oracle ODBC Driverでは、RefCursorパラメータが存在するかどうかを判断するために、データベース・サーバーを問い合せてプロシージャのパラメータ・セットとそのデータ型を判別する必要があります。この問合せによって、最初にプロシージャが準備完了になり実行されると、追加のネットワーク・ラウンドトリップが発生します。

- LOBを有効化
このオプションによって、LOBを挿入および更新するサポートが有効になります。デフォルトではこのサポートが有効です。

Oracle ODBC Driverでは、LOBパラメータがあるかどうかを判断するために、データベース・サーバーを問い合せて、INSERT文またはUPDATE文の各パラメータのデータ型を判別する必要があります。この問合せによって、最初にINSERTまたはUPDATEが準備完了になり実行されると、追加のネットワーク・ラウンドトリップが発生します。

関連項目:
LOBの詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

注意:
LOBデータ圧縮を行うと、SecureFilesを圧縮して、ディスク、入出力およびREDOログを節約できます。この場合、圧縮により領域の使用効率が上がるため、コストが低減されます。また、圧縮により入出力およびREDOログが縮小するため、SecureFilesのパフォーマンスが向上します。
LOBデータを暗号化すると、データベースのセキュリティが強化されます。ランダムな読取りおよび書込みに対して暗号化データが使用可能になっている間、データのセキュリティは向上します。

データを圧縮および暗号化する場合、追加のメモリーが消費されます。

- TIMESTAMPをDATEとしてバインド
SQL_TIMESTAMPパラメータを適切なOracle Databaseデータ型としてバインドします。このオプションをTRUEに設定すると、SQL_TIMESTAMPはOracleのDATEデータ型としてバインドされます。このオプションをFALSEに設定すると、SQL_TIMESTAMPはOracleのTIMESTAMPデータ型としてバインドされます。これがデフォルトです。

- カーソル・クローズを有効化
ODBC関数SQLFreeStmtのSQL_CLOSEオプションは、関連するカーソルを文とともにクローズし、保留中のすべての結果を廃棄します。アプリケーションでは文を再度実行することによってカーソルを再オープンでき、SQLPrepareを再度実行する必要はありません。このオプションを使用する典型的な例は、しばらくの間アイドル状態になり、後で同じSQL文を再利用するアプリケーションの場合です。この場合、アプリケーションがアイドル状態になっている間、関連するサーバー・リソースを解放できます。

Oracle ODBC Driverが位置するOCIでは、カーソルをクローズする機能をサポートしていません。したがって、デフォルトでは、SQL_CLOSEオプションはOracle ODBC Driverに影響を与えません。カーソルおよび関連するリソースはデータベース上でオープンしたままです。

このオプションを有効にすると、データベース・サーバー上の関連するカーソルがクローズします。ただし、その結果、SQL文の解析コンテキストが失われます。ODBCアプリケーションは文を再度実行でき、SQLPrepareをコールする必要はありません。ただし、内部的には、Oracle ODBC Driverは文全体を準備して実行する必要があります。このオプションを有効にすると、文を1回準備して繰り返し実行するアプリケーションのパフォーマンスに大きな影響を与えます。

このオプションは、サーバー上のリソースを解放する必要がある場合のみ有効にしてください。

- フェッチ・バッファ・サイズ
odbc.iniファイルのフェッチ・バッファ・サイズ(FetchBufferSize)を、バイト単位で指定した値に設定します。この値は、Oracle ODBC DriverがOracle Databaseからクライントのキャッシュに1回にプリフェッチするデータの行数を決定するのに必要なメモリー量で、アプリケーション・プログラムが1回の問合せで要求する行数とは関係ありません。これによって、パフォーマンスが向上します。

また、1回にフェッチするデータが20行未満であることが多いアプリケーションで、特に、速度の遅いネットワーク接続である場合や負荷の大きいサーバーからフェッチする場合は、アプリケーションの応答時間が改善されます。この設定値が高すぎると、応答時間に悪影響が生じたり、大量のメモリーが消費される可能性があります。デフォルトは64,000バイトです。アプリケーションに対して最適な値を選択してください。

LONGおよびLOBデータ型がある場合、Oracle ODBC Driverがプリフェッチする行数はこのフェッチ・バッファ・サイズで決まりません。LONGおよびLOBデータ型が含まれると、パフォーマンスの向上は最小限になり、過剰にメモリーが使用される可能性があります。Oracle ODBC Driverはこのフェッチ・バッファ・サイズを無視し、LONGおよびLOBデータ型が存在する場合は一定の行数のみプリフェッチします。

関連項目:
「SQLDriverConnect関数の接続文字列の書式」

E.14.3 DATEおよびTIMESTAMPデータ型

WHERE句でデータベースのDATE列が使用され、その列に索引がある場合は、パフォーマンスに影響を与える可能性があります。次に例を示します。

SELECT * FROM EMP WHERE HIREDATE = ?

この例では、HIREDATE列の索引を使用して、問合せを迅速に実行できます。ただし、HIREDATEがDATE値で、Oracle ODBC Driverはこのパラメータ値をTIMESTAMPとして提供しているため、Oracle Databaseの問合せオプティマイザは変換関数を適用する必要があります。誤った結果(パラメータ値に0以外の小数秒がある場合に発生する可能性があります)を防ぐために、オプティマイザは、HIREDATE列に変換を適用するため、次のような文になります。

SELECT * FROM EMP WHERE TO_TIMESTAMP(HIREDATE) = ?

ただし、この場合はHIREDATE列で索引を使用できなくなります。かわりに、サーバーでは表の順次スキャンを実行します。したがって、表に多数の行がある場合は時間がかかる可能性があります。このような場合の次善策として、Oracle ODBC DriverにはTIMESTAMPをDATEとしてバインドする接続オプションが用意されています。このオプションを有効にすると、Oracle ODBC Driverは、SQL_TIMESTAMPパラメータをOracleのTIMESTAMPデータ型ではなくOracleのDATEデータ型としてバインドします。これによって、問合せオプティマイザはDATE列で索引を使用できます。

注意:
このオプションは、DATE列をTIMESTAMP列としてバインドするMicrosoft Accessや類似のプログラムで使用することを目的にしています。実際のTIMESTAMP列がある場合、またはデータが失われる可能性がある場合は使用しないでください。Microsoft Accessでは、主キーとして選択されたすべての列を使用してこの問合せを実行します。

E.15 エラー・メッセージ

エラーが発生すると、Oracle ODBC Driverは、システム固有のエラー番号、SQLSTATE(ODBCエラー・コード)およびエラー・メッセージを返します。ドライバは、ドライバが検出したエラーおよびOracle Databaseから返されたエラーの両方からこれらの情報を導出します。

システム固有のエラー

データソースでエラーが発生した場合、Oracle ODBC Driverは、Oracle Databaseから返されたシステム固有のエラーを返します。Oracle ODBC DriverまたはDriver Managerがエラーを検出した場合、Oracle ODBC Driverはシステム固有のエラー番号として0(ゼロ)を返します。

SQLSTATE

データソースでエラーが発生した場合、Oracle ODBC Driverは、返されたシステム固有のエラーを適切なSQLSTATEにマップします。Oracle ODBC DriverまたはDriver Managerがエラーを検出した場合は、適切なSQLSTATEを生成します。

エラー・メッセージ

データソースでエラーが発生した場合、Oracle ODBC Driverは、Oracle Databaseから返されたメッセージに基づいてエラー・メッセージを返します。Oracle ODBC DriverまたはDriver Managerでエラーが発生した場合、Oracle ODBC Driverは、SQLSTATEに関連付けられたテキストに基づいてエラー・メッセージを返します。

エラー・メッセージの書式は次のとおりです。

[vendor] [ODBC-component] [data-source] error-message

大カッコ([ ])内の接頭辞によって、エラーの発生場所を識別します。次の表に、Oracle ODBC Driverから返される接頭辞の値を示します。データソースでエラーが発生した場合は、vendorおよびODBC-component接頭辞によって、データソースからエラーを受け取ったODBCコンポーネントのベンダーと名前を識別します。

エラーの発生場所

接頭辞

値

ドライバ・マネージャ

[vendor]
[ODBC-component]

[data-source]

[unixODBC]
[Driver Manager]

該当なし

Oracle ODBC Driver

[vendor]
[ODBC-component]

[data-source]

[ORACLE]
[Oracle ODBC Driver]

該当なし

Oracle Database

[vendor]
[ODBC-component]

[data-source]

[ORACLE]
[Oracle ODBC Driver]

[Oracle OCI]

たとえば、次の書式に示すように、エラー・メッセージにOra接頭辞が付いていない場合、そのエラーはOracle ODBC Driverのエラーであることがわかります。

[Oracle][ODBC]Error message text here

また、次の書式に示すように、エラー・メッセージにOra接頭辞が付いている場合、このエラーはOracle ODBC Driverのエラーではありません。

[Oracle][ODBC][Ora]Error message text here

注意:
エラー・メッセージにORA-接頭辞が付いている場合でも、実際のエラーは複数のソースのいずれかで発生している場合があります。

エラー・メッセージのテキストがORA-接頭辞で始まっている場合、そのエラーの詳細はOracle Databaseのドキュメントを参照してください。

F データベースの制限

この付録では、データベースの制限について説明します。

F.1 データベースの制限

表F-1に、CREATE DATABASE文またはCREATE CONTROLFILE文のパラメータのデフォルト値および最大値を示します。

注意:
これらのパラメータ間の相互依存によって、許容値に影響を与える場合があります。

表F-1 CREATE CONTROLFILEおよびCREATE DATABASEのパラメータ

パラメータ

デフォルト

最大値

MAXLOGFILES

16

255

MAXLOGMEMBERS

2

5

MAXLOGHISTORY

100

65534

MAXDATAFILES

30

65534

MAXINSTANCES

1

1055

表F-2に、Oracle Databaseファイル・サイズ制限をバイト単位で示します。

表F-2 ファイル・サイズの制限

ファイル・タイプ

プラットフォーム

ファイル・サイズの制限

データファイル

すべて

4,194,303とDB_BLOCK_SIZEパラメータの値の積

インポート/エクスポート・ファイルおよびSQL*Loaderファイル

AIX、HP-UXおよびSolaris(32ビットと32ビット・ファイル)

2,147,483,647バイト

AIX、HP-UXおよびSolaris(64ビット・ファイル)

無制限

注意: ファイル・サイズは、オペレーティング・システムでそれぞれのファイル・システムに対して許可されている制限に従います。

制御ファイル

HP-UX、Linux、AIXおよびSolaris

4096バイトのブロック・サイズによる25000の制御ファイル・ブロック

G Very Large MemoryおよびHugePages

この章では、Linuxシステム管理者がLinuxシステムにVery Large Memory構成およびHugePagesを構成する方法について説明します。

次の項目について説明します。

- Linux x86のVery Large Memory

- HugePagesの概要

G.1 Linux x86のVery Large Memory

Very Large Memory(VLM)を構成することによって、32ビットのOracle Databaseが、従来はLinuxアプリケーションで利用可能だった4GB以上のRAMにアクセスできるようになります。この32ビット向けのOracle VLMオプションでは、メモリー内ファイル・システム(/dev/shm)を使用して大規模なデータベース・バッファ・キャッシュを作成します。SGAの他の部分は、通常のメモリーから割り当てられます。VLM構成では、メモリー内により多くのデータベース・バッファをキャッシュすることによって、VLMを使用しない構成に比べてディスクI/Oが大幅に削減されるため、データベースのパフォーマンスが向上します。この章では、32ビット・コンピュータでVLMを使用して、SGAメモリーを増加させる方法について説明します。

注意:
この項で説明する内容は、32ビットのLinuxオペレーティング・システムにのみ該当します。64ビットのアーキテクチャを使用する場合、システムでVLMがサポートされています。すべての64ビットLinuxオペレーティング・システムでは、仮想アドレス空間の上限を16EB(エクサバイトは2の60乗バイト)として、物理メモリーを直接使用します。

この項では、次の項目について説明します。

- 32ビットLinuxでのVLM実装

- VLM実装のための前提条件

- SGAの制限を拡大する方法

- Oracle DatabaseのVery Large Memoryの構成

- Very Large Memoryの実装に関する制限

G.1.1 32ビットLinuxでのVLM実装

32ビットのアーキテクチャでは、特定サイズのVLMウィンドウからVLMにアクセスします。VLMウィンドウは、プロセスのアドレス空間におけるデータ構造で、特定サイズのウィンドウから仮想アドレス空間全体にアクセスできるようにします。32ビットLinuxでは、パラメータUSE_INDIRECT_DATA_BUFFERS=TRUEを設定し、/dev/shm上にshmfs、tmpfs、ramfsタイプのメモリー内ファイル・システムをマウントして、使用可能なアドレス空間を増やす必要があります。

G.1.2 VLM実装のための前提条件

次に、32ビットのオペレーティング・システムにVLMを実装するための前提条件をいくつか示します。

- Oracle Databaseがインストールされたコンピュータには、4GBを超えるメモリーが必要です。

- このコンピュータは、起動時にPAEサポートを使用してカーネルを使用するように構成する必要があります。

- VLMサポートを使用するデータベース・インスタンスの初期化パラメータ・ファイルには、USE_INDIRECT_DATA_BUFFERS=TRUEを設定する必要があります。

- 初期化パラメータDB_BLOCK_BUFFERSおよびDB_BLOCK_SIZEには、Oracle Databaseに選択した値を設定する必要があります。

G.1.3 SGAの制限を拡大する方法

通常、32ビットLinuxカーネルでは、最大2.4GBのサイズのSGAを作成することができます。Linux Hugememカーネルを使用すると、3.2GBサイズまでのSGAを作成できます。32ビット・カーネルで3.2GBを超えるには、VLM機能を使用する必要があります。

32ビット・コンピュータでSGAの制限を拡大するには、次の方法があります。

- Hugememカーネル

- HugememカーネルとVery Large Memory

G.1.3.1 Hugememカーネル

Red Hat Enterprise Linux 4およびOracle Linux 4には、Hugememカーネルという新しいカーネルが含まれています。Hugememカーネルの機能は、4GB-4GBスプリット・カーネルとも呼ばれ、1プロセス当たり4GBのユーザー空間(他のカーネルの場合は3GB)、および4GBの直接カーネル空間をサポートします。このカーネルを使用すると、RHEL 4/Oracle Linux 4を最大64GBまでのメイン・メモリーを搭載したシステムで実行することができます。Hugememカーネルは、16GBを超えるメモリーを搭載したシステム構成で、すべてのメモリーを使用する必要があります。Hugememカーネルは、より少ないメモリー構成でも実行できます。

従来の32ビットの4GB仮想アドレス空間は、ユーザー・プロセス用に3GB、カーネル用に1GBに分割されます。新しい方法(4GB/4GB)では、カーネルに4GBの仮想アドレス空間を、ほぼ4GBを各ユーザー・プロセスに使用できます。Hugememカーネルによるこの方法で、間接的なデータ・バッファの方法を使用することなく3.2GBのSGAを作成することができます。

注意:
32ビットのRed Hat Enterprise Linux 5/Oracle Linux 5およびRed Hat Enterprise Linux 6/Oracle Linux 6にはhugememカーネルがありません。ユーザー・プロセスに3GB/カーネルに1GBの分割のみサポートされています。これにはPAEカーネルがあり、4GBを超える(16GBまで)RAMを搭載したシステムがサポートされます。3GB/1GBカーネル分割機能により、システムのロードが多数のlowmemを消費する場合、システムのlowmemが不足することがあります。Enterprise Linux 5には、hugememと同等のカーネルがないため、Enterprise Linux 4でhugememを使用するか、または64ビットへの移行が推奨されています。

アドレス空間の切替えによるパフォーマンスのオーバーヘッドと比較して、Hugememカーネルは大容量のコンピュータの安定性を向上します。

次のコマンドを実行すると、Hugememカーネルを使用しているかどうかを判別できます。

$ uname -r
2.6.9-5.0.3.ELhugemem

G.1.3.2 HugememカーネルとVery Large Memory

32ビット・システムでHugememカーネルのみを使用する場合、SGAサイズは若干増やすことができます。詳細は、「Hugememカーネル」を参照してください。

注意:
Red Hat Enterprise Linux 5/Oracle Linux 5およびRed Hat Enterprise Linux 6/Oracle Linux 6はhugememカーネルをサポートしません。PAEカーネルがサポートされ、物理メモリーが16GB以下の間、Very Large Memory(VLM)を実装することができます。

この項では、32ビット・システムで、HugememカーネルとVLMを使用することで、SGAを大幅に増やす方法について説明します。

64GBのRAMを搭載した32ビット・システムで、SGAを62GB(ブロック・サイズに応じて異なる)まで増やすことができます。Page Address Extension(PAE)と呼ばれるプロセッサ機能により、64GBまでのRAMを物理アドレスにできます。PAEでは、プロセスまたはプログラムを4GBを超えて直接アドレス指定したり、4GBを超える仮想アドレス空間を指定することはできないため、プロセスを共有メモリーに直接アタッチすることはできません。この問題に対処するには、共有メモリー・ファイルシステム(メモリーベースのファイルシステム)を作成しておく必要があります。これは、カーネルでサポートされる仮想メモリーの上限と同じサイズまで作成できます。共有メモリー・ファイルシステムを使用すると、プロセスをファイルシステムの領域に動的にアタッチし、Oracleなどのアプリケーションで32ビット・オペレーティング・システムにより大きな共有メモリーを事実上使用できます。この問題は、64ビット・オペレーティング・システムにはありません。

VLMは、SGAのデータベース・バッファ・キャッシュの部分をSystem Vの共有メモリーから共有メモリー・ファイル・システムに移動します。これは、引続き1つの大きなSGAとみなされますが、2つの異なるオペレーティング・システムの共有メモリー・エンティティから構成されています。VLMはバッファ・キャッシュ以外の512MBのSGAを使用してVLMを管理します。32ビット・システムでは、プロセスを4GBを超えて直接アタッチすることができないため、このメモリー領域は、間接的なデータ・バッファ(共有メモリー・ファイルシステム・バッファ)をプロセス・アドレス空間にマッピングするために必要です。

注意:
Very Large Memoryサポートを使用するデータベース・インスタンスの初期化パラメータ・ファイルに、USE_INDIRECT_DATA_BUFFERS=TRUEを設定する必要があります。このパラメータを設定しないと、Oracle Database 11gリリース2(11.2)以上の動作が、以前のリリースと同じになります。
また、初期化パラメータDB_BLOCK_BUFFERSおよびSHARED_POOL_SIZEにOracle Databaseで選択した値を設定する必要があります。自動メモリー管理(AMM)は使用できません。初期化パラメータDB_BLOCK_SIZEは、インスタンスのバッファ・キャッシュ・サイズを指定するDB_BLOCK_BUFFERSと組み合せて、ブロック・サイズを設定します。

たとえば、バッファ・キャッシュ以外のSGAが2.5GBの場合、VLMの管理に512MBが使用されるため、共有プール、ラージ・プールおよびREDOログ・バッファ用に、バッファ・キャッシュ以外のSGAは2GBのみです。バッファ・キャッシュ・サイズが512MB未満の場合、VLMの使用はお薦めしません。

RHEL 4/ Oracle Linux 4では、VLMに使用できる異なるメモリー・ファイル・システムが2つあります。

- tmpfsまたはshmfsの使用: 特定のサイズのshmfsを/dev/shmにマウントし、適切な権限を設定します。tmpfsの場合、サイズを指定する必要はありません。Tmpfsまたはshmfsによって割り当てられたメモリーはページング可能です。
次に例を示します。

Example Mount shmfs:
# mount -t shm shmfs -o size=20g /dev/shm

Edit /etc/fstab:
shmfs /dev/shm shm size=20g 0 0

OR

Example Mount tmpfs:
# mount –t tmpfs tmpfs /dev/shm

Edit /etc/fstab:
none /dev/shm tmpfs defaults 0 0

- ramfsの使用: ramfsは、shmfsに類似していますが、ページングまたはスワッピングできないという点が異なります。この方法を使用すると、一般に望ましい効果が得られます。ramfsは、次のようにして作成します。

umount /dev/shm
mount -t ramfs ramfs /dev/shm

G.1.4 Oracle DatabaseのVery Large Memoryの構成

ramfsを使用してRed Hat Enterprise Linux 4/ Oracle Linux 4にVery Large Memoryを構成するには、次の手順を実行します。

1. rootユーザーでログインします。

sudo -sh
Password:

2. /etc/rc.localファイルを編集し、次のエントリを追加して、コンピュータの起動時にramfsが/dev/shmディレクトリにマウントされるようにコンピュータを構成します。

umount /dev/shm
mount -t ramfs ramfs /dev/shm
chown oracle:oinstall /dev/shm

このコマンドで、oracleはOracleソフトウェア・ファイルの所有者、oinstallはOracle所有者アカウントのグループです。新しい構成で、/etc/rc.localファイルが無効化されているか、または/etc/init.dファイルの下にあるLinuxサービス・スクリプトを使用してOracle Databaseインスタンスを起動した場合、これらのエントリをサービス・スクリプトに追加できます。

この構成は、システムで、重要なOracle Databaseインスタンスを自動起動する前であっても、ramfsが準備されることに注意してください。起動スクリプトにコマンドを含めることもできます。再起動操作を繰り返してコマンドを広範囲にテストする必要があり、コンピュータを構成した後、次の手順を実行します。

3. サーバーを再起動します。

4. rootユーザーでログインします。

5. 次のコマンドを実行して、/dev/shmディレクトリにramfsタイプがマウントされていることを確認します。

/dev/shm directory is mounted with the ramfs type:

# mount | grep shm
ramfs on /dev/shm type ramfs (rw)

6. 次のコマンドを実行して、/dev/shmディレクトリの権限を確認します。

# ls -ld /dev/shm
drwxr-xr-x  3 oracle oinstall 0 Jan 13 12:12 /dev/shm

7. /etc/security/limits.confファイルを編集し、次のエントリを追加して、メモリー・ロックの上限値を大きくします。

soft    memlock        3145728
hard    memlock        3145728

8. oracleユーザーに切り替えます。

# sudo - oracle
Password:

9. 次のコマンドを実行して、メモリー・ロックの上限値を確認します。

$ ulimit -l
3145728

10. Very Large Memoryのインスタンス・パラメータを構成するには、次の手順を実行します。

1. DB_CACHE_SIZE、DB_xK_CACHE_SIZE、sga_targetおよびmemory_targetパラメータをDB_BLOCK_BUFFERSパラメータに置き換えます。

2. USE_INDIRECT_DATA_BUFFERS=TRUEパラメータを追加します。

3. SGAの要件に従ってSGAを構成します。

4. SGA_TARGET、MEMORY_TARGETまたはMEMORY_MAX_TARGETパラメータを削除します(設定されている場合)。

11. データベース・インスタンスを起動します。

12. 次のコマンドを実行して、メモリー割当てを確認します。

$ ls -l /dev/shm
$ ipcs -m

関連項目:
HugePagesの詳細は、「LinuxでのHugePagesの構成」を参照してください。

G.1.5 Very Large Memoryの実装に関する制限

コンピュータをVery Large Memoryモードで実行する場合の制限事項は次のとおりです。

- ramfsを使用してVLMを実装すると、動的SGAチューニングでAMMが動作するため、自動メモリー管理(AMM)は使用できません。AMMスワッピングは可能です。たとえば、未使用のSGA領域をマッピング解除して、PGAにマッピングできます。動的SGAおよびマルチ・ブロック・サイズは、ramfsがスワッピング可能でないため、Very Large Memoryではサポートされません。Very Large Memoryを有効にするには、MEMORY_TARGETの値を0に設定する必要があります。

- VLMはデータベース・バッファ・キャッシュのサイズが512MBを超える場合のみ実装できます。

G.2 HugePagesの概要

HugePagesは、Linuxカーネル2.6に統合された機能です。HugePagesを有効にすると、オペレーティング・システムはデフォルト(通常、4KB)より大きいメモリー・ページをサポートできます。大規模なページ・サイズを使用すると、ページ表エントリへのアクセスに必要なシステム・リソースの量を削減することにより、システム・パフォーマンスを向上させることができます。32ビットおよび64ビット構成の両方で使用できます。HugePageサイズは、カーネル・バージョンおよびハードウェア・アーキテクチャに応じて、2MBから256MBと異なります。Oracle Databaseの場合、HugePagesを使用すると、ページ状態のオペレーティング・システム・メンテナンスが軽減され、Translation Lookaside Buffer(TLB)ヒット率が向上します。

この項では、次の項目について説明します。

- HugePagesによるSGAのチューニング

- LinuxでのHugePagesの構成

- HugePages構成の制限

- 透過的なHugePagesの無効化

G.2.1 HugePagesによるSGAのチューニング

HugePagesを使用しない場合、1ページ当たり4KBのメモリーがオペレーティング・システムに保持され、SGAに割り当てられる際に、ページのライフサイクル(ダーティ、空き、プロセスにマップ済など)がオペレーティング・システム・カーネルによって最新に保たれます。

HugePagesを使用する場合、各ページ表エントリが2MBから256MBのページを指すため、オペレーティング・システム・ページ表(仮想メモリーから物理メモリーへのマッピング)は小さくなります。また、カーネルでは、ライフサイクルを監視する必要があるページが少なくなります。

注意:
Linux x86-64、Linux x86およびIBM: Linux on System zで使用できるHugePagesのサイズは2MBです。

HugePagesを使用した場合のメリットは次のとおりです。

- TLBヒットが増加することによってパフォーマンスが向上します。

- ページがメモリー内でロックされ、スワップ・アウトされないため、SGAのような共有メモリーがRAMに残ります。

- 連続するページを事前に割り当てるため、System V共有メモリー(SGAなど)以外に使用できなくなります。

- より大きなページ・サイズによる仮想メモリーの部分のため、カーネル用の記録操作が削減されます。

G.2.2 LinuxでのHugePagesの構成

コンピュータにHugePagesを構成するには、次の手順を実行します。

1. /etc/security/limits.confファイルのmemlock設定を編集します。memlock設定はKB単位で指定し、搭載RAMよりも若干小さく設定します。たとえば、64GBのRAMが搭載されている場合は、次のエントリを追加してメモリー・ロックの上限値を大きくします。

*   soft   memlock    60397977
*   hard   memlock    60397977

memlockの値をSGA要件よりも大きく設定することもできます。

2. 再度oracleユーザーとしてログインし、ulimit -lコマンドを実行して新しいmemlock設定を確認します。

$ ulimit -l
60397977

3. 次のコマンドを実行して、変数Hugepagesizeの値を表示します。

$ grep Hugepagesize /proc/meminfo

4. 現行の共有メモリー・セグメントのhugepages構成の推奨値を計算するスクリプトを作成するには、次の手順を実行します。

注意:
変更が必要な場合がある例は、次のとおりです。

1. hugepages_settings.shという名前のテキスト・ファイルを作成します。

2. 次の内容をファイルに追加します。

#!/bin/bash
#
# hugepages_settings.sh
#
# Linux bash script to compute values for the
# recommended HugePages/HugeTLB configuration
#
# Note: This script does calculation for all shared memory
# segments available when the script is run, no matter it
# is an Oracle RDBMS shared memory segment or not.
# Check for the kernel version
KERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'`
# Find out the HugePage size
HPG_SZ=`grep Hugepagesize /proc/meminfo | awk {'print $2'}`
# Start from 1 pages to be on the safe side and guarantee 1 free HugePage
NUM_PG=1
# Cumulative number of pages required to handle the running shared memory segments
for SEG_BYTES in `ipcs -m | awk {'print $5'} | grep "[0-9][0-9]*"`
do
MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q`
if [ $MIN_PG -gt 0 ]; then
NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q`
fi
done
# Finish with results
case $KERN in
'2.4') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`;
echo "Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;;
'2.6'|'3.8') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
*) echo "Unrecognized kernel version $KERN. Exiting." ;;
esac
# End

3. 次のコマンドを実行して、ファイルの権限を変更します。

$ chmod +x hugepages_settings.sh

5. hugepages_settings.shスクリプトを実行して、hugepages構成の値を計算します。

$ ./hugepages_settings.sh

6. 次のカーネル・パラメータを設定します。

# sysctl -w vm.nr_hugepages=value_displayed_in_step_5

7. コンピュータの再起動時に常にこのパラメータ値が使用されるようにするには、/etc/sysctl.confファイルを編集して、次のエントリを追加します。

vm.nr_hugepages=value_displayed_in_step_5

8. サーバーを再起動します。

注意:
使用可能なHugePagesを確認するには、次のコマンドを実行します。

$ grep Huge /proc/meminfo

G.2.3 HugePages構成の制限

HugePagesを使用した場合の制限は次のとおりです。

- 自動メモリー管理(AMM)とHugePagesは、互換性がありません。AMMを使用すると、SGAメモリー全体は/dev/shmの下にファイルを作成することによって割り当てられます。Oracle DatabaseがAMMを使用してSGAを割り当てると、HugePagesは予約されません。Oracle Database 12cでHugePagesを使用するには、AMMを無効にする必要があります。

- VLMを32ビット環境で使用する場合、データベース・バッファ・キャッシュにHugePagesを使用することはできません。HugePagesは、shared_pool、large_poolなど、他の部分のSGAに使用できます。VLM(バッファ・キャッシュ)のためのメモリー割当ては、共有メモリー・ファイルシステム(ramfs/tmpfs/shmfs)を使用して実行されます。メモリー・ファイルシステムでは、HugePagesは予約または使用されません。

- システムの起動後に、HugePagesを割当てまたは解放することはできません。ただし、システム管理者が、使用可能なページ数を変更するか、またはプール・サイズを変更することによって、HugePages構成を変更した場合は例外です。システムの起動時に必要な領域がメモリー内に確保されなかった場合、HugePagesの割当てに失敗します。

G.2.4 透過的なHugePagesの無効化

Red Hat Enterprise Linux 6、SUSE 11、および以前のリリースのOracle Linux Unbreakable Enterprise Kernel 2 (UEK2)に付属するOracle Linux 6では、透過的なHugePagesメモリーがデフォルトで有効になっています。それ以降のリリースのUEK2カーネルでは、透過的なHugePagesメモリーはデフォルトで無効になっています。

透過的なHugePagesを使用すると、実行時にメモリー割当ての遅延が生じます。パフォーマンスの問題を回避するために、透過的なHugePagesはすべてのOracle Databaseサーバーで無効にすることをお薦めします。かわりに標準のHugePagesを使用すると、パフォーマンスが向上します。

透過的なHugePagesメモリーが標準のHugePagesメモリーと異なるのは、カーネルのkhugepagedスレッドが実行時にメモリーを動的に割り当てるためです。標準のHugePagesメモリーは起動時に事前割当てされ実行中には変更されません。

透過的なHugePagesが有効かどうかを確認するには、rootユーザーとして次のコマンドのいずれかを実行します。

Red Hat Enterprise Linuxカーネルの場合:

# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled

その他のカーネルの場合:

# cat /sys/kernel/mm/transparent_hugepage/enabled

次に示すのは、[always]フラグを有効にして使用している透過的なHugePagesを示す出力例です。

[always] never

注意:
透過的なHugePagesをカーネルから削除した場合、/sys/kernel/mm/transparent_hugepageまたは/sys/kernel/mm/redhat_transparent_hugepageファイルは存在しません。

透過的なHugePagesを無効にするには、次の手順を実行します。

1. /etc/grub.confファイルで、カーネル・ブートの行に次のエントリを追加します。

transparent_hugepage=never

次に例を示します。

title Oracle Linux Server (2.6.32-300.25.1.el6uek.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-300.25.1.el6uek.x86_64 ro root=LABEL=/ transparent_hugepage=never
initrd /initramfs-2.6.32-300.25.1.el6uek.x86_64.img

索引
A  B  C  D  E  F  G  H  I  J  L  M  O  P  R  S  T  U  V  X

記号

@略称, 1.1

A

A_TERM環境変数, 6.4.1.2

A_TERMCAP環境変数, 6.4.1.2

ADA_PATH環境変数, 1.2.2

adaptersユーティリティ, 5.2

コマンドラインSQLの管理, 4.1

管理者

オペレーティング・システム・アカウント, 1.4.1

AIXのツール

Base Operation Systemツール, 8.2.5.1

Performance Tool Box Agent, 8.2.5.2

Performance Tool Box Manager, 8.2.5.2

SMIT, 8.2.5.3

System Management Interface Tool, 8.2.5.3

AIXTHREAD_SCOPE環境変数, A.4 アーカイブ・バッファ

チューニング, A.1.6

ASM_DISKSTRING初期化パラメータ, 1.3.2 アシスタント

Oracle Database Configuration Assistant, 3.1.3

Oracle Database Upgrade Assistant, 3.1.2

Oracle Net Configuration Assistant, 3.1.1

SGAの非同期フラグ, C.4.4 非同期入出力, C.4, C.4.2

検証, C.4.3

自動ストレージ管理

再起動, 2.2.1.2

停止, 2.2.1

自動ストレージ管理, 使用, 8.4.1 自動化

停止, 2.1

起動, 2.1

B

ビット長サポート, 6.2

ブロック・サイズ, A.1.5

調整, 8.3.3

バッファ・キャッシュ

制限事項, B.1

ページング・アクティビティ, A.1.1

サポート, B.1

チューニング, A.1.1

チューニング・サイズ, 8.7

バッファ・マネージャ, 8.3, 8.3 BUFFERパラメータ, A.1.7

C

キャッシュ・サイズ, 8.7

受取りルーチン, 6.12

例, 6.12

CLASSPATH環境変数, 1.2.2 クライアント共有ライブラリ, 6.1.6 クライアント静的ライブラリ, 6.1.6 COBDIR環境変数, 6.4.1.1 コマンド

iostat, 8.2.3

lsps, 8.2.4

sar, 8.2.2

SPOOL, 4.2.4

スワップ, 8.2.4

swapinfo, 8.2.4

swapon, 8.2.4

vmo, A.1.1

vmstat, 8.2.1

共通の環境

設定, 1.2.3

同時入出力, A.2.2 構成ファイル

ottcfg.cfg, 6.1.1

pcbcfg.cfg, 6.1.1

pccfor.cfg, 6.1.1

pcscfg.cfg, 6.1.1

pmscfg.cfg, 6.1.1

プリコンパイラ, 6.1.1

構成

Oracleユーザーのアカウント, 1.4.2

Oracle Database, 3.1.4

coraenvファイル, 1.2.3 CPUのスケジューリング, A.3 CPU_COUNT初期化パラメータ, C.6, C.6 CREATE CONTROLFILEのパラメータ, F.1 CREATE DATABASEのパラメータ, F.1

D

データベース

ブロック・サイズ, A.1.5

データベース・ブロック・サイズ

設定, A.1.5

Database Control

「Oracle Enterprise Manager Database Control」を参照

データベースの制限, F.1 DB_BLOCK_SIZE初期化パラメータ, 1.3.1, 8.6, 8.6, 8.6 DB_CACHE_SIZE初期化パラメータ, 8.6 DB_FILE_MULTIBLOCK_READ_COUNTパラメータ, A.2.5 DBA

「管理者」を参照

dbhomeファイル, 1.2.3 デバッガ・プログラム, 6.1.4 demo_proc32.mkファイル, 6.3.2 demo_procob.mkファイル, 6.4.4 デモ・プログラム

Pro*COBOL, 6.4.3

Oracle JDBC/Oracle Call Interface, 6.8

Pro*C/C++, 6.3.1

Pro*FORTRAN, 6.5.1

SQL*Module for Ada, 6.6.1

デモ

PL/SQL, 7.2

プリコンパイラ, 7.2

SQL*Loader, 7.1

ダイレクト入出力, A.2.2 ディスク入出力

ファイル・システム・タイプ, 8.4.2

入出力

スレーブ, A.2.4

ペーシング, A.2.8 チューニング, 8.4 ディスク

パフォーマンスの監視, 8.5

DISM, D.1 DISPLAY環境変数, 1.2.2 動的キャッシュ・パラメータ, B.1 動的リンク

Oracleライブラリとプリコンパイラ, 6.1.5

E

環境変数, 6.4.1.1

A_TERM, 6.4.1.2

A_TERMCAP, 6.4.1.2

ADA_PATH, 1.2.2

AIXTHREAD_SCOPE, A.4

すべて, 1.2.1

CLASSPATH, 1.2.2

COBDIR, 6.4.1.1

DISPLAY, 1.2.2

Pro*COBOL, 6.4.1

HOME, 1.2.2

LANG, 1.2.2

LANGUAGE, 1.2.2

LD_LIBRARY_PATH, 1.2.2, 6.4.1.1, 6.4.1.2

LD_OPTIONS, 1.2.2

LIBPATH, 6.4.1.1

LPDEST, 1.2.2

MicroFocus COBOLコンパイラ, 6.4.1.1

ORA_TZFILE, 1.2.1

ORACLE_BASE, 1.2.1

ORACLE_HOME, 1.2.1

ORACLE_PATH, 1.2.1

ORACLE_SID, 1.1, 1.2.1, 1.2.1

ORACLE_TRACE, 1.2.1

ORAENV_ASK, 1.2.1

PATH, 1.2.2, 4.2.1, 6.4.1.1, 6.4.1.2

PRINTER, 1.2.2

SHLIB_PATH, 6.4.1.1

SQLPATH, 1.2.1, 1.2.1

TMPDIR, 1.2.2

TNS_ADMIN, 5.1

TWO_TASK, 1.2.1

実行可能ファイル

プリコンパイラ, 6.1.2

プリコンパイラ, 6.1.2

再リンク, 3.2

拡張ファイル・システム, 8.4.2

F

ファイル・バッファ・キャッシュ

AIXでのチューニング, A.1.2

ファイル・システム

ext2/ext3, 8.4.2

GPFS, 8.4.2

JFS, 8.4.2

OCFS2, 8.4.2

S5, 8.4.2

UFS, 8.4.2

VxFS, 8.4.2

ファイル

アラート, 1.5

coraenv, 1.2.3

dbhome, 1.2.3

demo_procob.mk, 6.4.4

glogin.sql, 4.1.1

ins_precomp.mk, 6.1.2

login.sql, 4.1.1

Oracle Net Servicesの構成, 5.1

oraenv, 1.2.3

ottcfg.cfg, 6.1.1

pcbcfg.cfg, 6.1.1

pccfor.cfg, 6.1.1

pcscfg.cfg, 6.1.1

pmscfg.cfg, 6.1.1

privgroup, C.2.1, C.4.1

README, 6.1.3

root.sh, 1.2.3

services, 5.4

トレース, 1.5

FORMATプリコンパイラ, 6.4.4

Pro*COBOL, 6.4.5

G

getprivgrpコマンド, C.2.1, C.4.1

glogin.sqlファイル, 4.1.1

GPFS

使用する際の考慮事項, A.2.2

H

環境変数HOME, 1.2.2

HP-UX動的プロセッサ再構成, C.6

HP-UXのツール, 8.2.6

Glance/UX, 8.2.6

hugetlbfs

SUSE, B.2

I

非同期入出力の実装, C.4.2

インポート・ユーティリティ, A.1.7

初期化パラメータ, 1.3

ASM_DISKSTRING, 1.3.2

CPU_COUNT, C.6

DB_BLOCK_SIZE, 1.3.1, 8.6, 8.6, 8.6

DB_CACHE_SIZE, 8.6

JAVA_POOL_SIZE, 8.6

LARGE_POOL_SIZE, 8.6

LOG_ARCHIVE_DEST_n, 1.3.3

LOG_BUFFERS, 8.6

SHARED_POOL_SIZE, 8.6

メモリー内ファイル・システム, B.1 入出力

非同期, A.2.3, C.4

スレーブ, A.2.4

チューニング, 8.4

ins_precomp.mkファイル, 6.1.2 インストール

SQL*Plusのコマンドライン・ヘルプ, 4.1.4.1

緊密共有メモリー, D.1 I/OバッファおよびSQL*Loader, A.1.7 I/Oサポート

直接, B.4

iostatコマンド, 8.2.3 IPCプロトコル, 5.3.1 IRECLEN, 6.1.4 ISM, D.1

J

JAVA_POOL_SIZE初期化パラメータ, 8.6

JFS2の考慮事項, A.2.2

JFSの考慮事項, A.2.2

ジャーナル・ファイル・システム, 8.4.2, A.2.2, A.2.2, A.2.2

L

LANG環境変数, 1.2.2

LANGUAGE環境変数, 1.2.2

LARGE_POOL_SIZE初期化パラメータ, 8.6

LD_LIBRARY_PATH環境変数, 1.2.2, 6.4.1.1, 6.4.1.2

LD_OPTIONS環境変数, 1.2.2

LIBPATH環境変数, 6.4.1.1

ライブラリ

クライアント共有とクライアント静的, 6.1.6

軽量タイマーの実装, C.3 Linuxのツール, 8.2.7 リスナー

TCP/IPまたはSecure Sockets Layer付きTCP/IP用の設定, 5.4

LOG_ARCHIVE_DEST_n初期化パラメータ, 1.3.3 LOG_BUFFERS初期化パラメータ, 8.6 論理ボリューム・マネージャ, A.2.1 login.sqlファイル, 4.1.1 LPDEST環境変数, 1.2.2 lspsコマンド, 8.2.4

M

Makeファイル

カスタム, 6.9

demo_proc32.mk, 6.3.2

demo_procob.mk, 6.4.4

ins_precomp.mk, 6.1.2

MAXDATAFILESパラメータ, F.1 maxfreeパラメータ, A.1.1 MAXINSTANCESパラメータ, F.1, F.1 MAXLOGFILESパラメータ, F.1 MAXLOGHISTORYパラメータ, F.1 MAXLOGMEMBERSパラメータ, F.1 maxpermパラメータ, A.1.1, A.1.2 メモリー

競合, A.1

ページングの制御, 8.3.2

スワップ領域, 8.3.1

チューニング, 8.3

MicroFocus COBOLコンパイラ, 6.4.1.1 移行, 3.1.2 minfreeパラメータ, A.1.1 8ビットのマイナー番号, C.4.2 minpermパラメータ, A.1.1, A.1.2 MLOCK権限, C.4.1 mpstatコマンド, 8.2.8 複数のシグナル・ハンドラ, 6.12 マルチスレッド・アプリケーション, 6.11

O

オペレーティング・システムのバッファ・キャッシュ, チューニング, 8.7

オペレーティング・システム・コマンド

getprivgrp, C.2.1

実行, 4.2.2

setprivgrp, C.2.1

オペレーティング・システム・グループ

OSDBA, 1.4.1

OSOPER, 1.4.1

オペレーティング・システムのツール

AIXの場合, 8.2.5

iostat, 8.2.3

lsps, 8.2.4

sar, 8.2.2

スワップ, 8.2.4

swapinfo, 8.2.4

swapon, 8.2.4

vmstat, 8.2.1

ORA_NLS10環境変数, 1.2.1 ORA_TZFILE環境変数, 1.2.1 Oracleブロック・サイズ, 調整, 8.3.3 Oracleバッファ・マネージャ, 8.3 Oracle C++ Callインタフェース

デモ・プログラム, 6.7.1

概要, 6.7

ユーザー・プログラム, 6.7.2

Oracle Call Interface

デモ・プログラム, 6.7.1

概要, 6.7

ユーザー・プログラム, 6.7.2

Oracle Cluster Services Synchronizationデーモン

起動, 2.2.2

停止, 2.2.2

Oracle Database, 3.1.3

再起動, 2.2.1.2

Oracle Database Configuration Assistant

構成, 3.1.3

Oracle Databaseの環境変数

Oracle Databaseの変数, 1.2.1

Oracle Databaseプロセス

停止, 2.2.1

Oracle Databaseサンプル・スキーマ, 4.1.3 Oracle Databaseのチューニングと大規模メモリーの割当て, C.5 Oracle Database Upgrade Assistant, 3.1.2 Oracle Enterprise Manager Database Control

起動, 2.2.3

停止, 2.2.3

Oracle環境変数

ORA_NLS10, 1.2.1

ORACLE_BASE, 1.2.1

ORACLE_HOME, 1.2.1

ORACLE_SID, 1.2.1

Oracle JDBC/Oracle Call Interface

デモ・プログラム, 6.8

Oracle Management Agent

起動, 2.2.4

停止, 2.2.4

Oracle Net Configuration Assistant

使用, 3.1.1

Oracle Net Services

構成ファイル, 5.1

IPCプロトコル, 5.3.1

プロトコルのサポート, 5.3

プロトコル, 5.3

Secure Sockets Layerプロトコル, 5.3.3

TCP/IPプロトコル, 5.3.2

Oracle Protocol Support

IPCプロトコル, 5.3.1

TCP/IPプロトコル, 5.3.2

Secure Sockets Layer付きTCP/IPプロトコル, 5.3.3

Oracleユーザー・アカウント

構成, 1.4.2

ORACLE_BASE環境変数, 1.2.1 ORACLE_HOME環境変数, 1.2.1 ORACLE_PATH環境変数, 1.2.1 ORACLE_SID環境変数, 1.1, 1.2.1, 1.2.1 ORACLE_TRACE環境変数, 1.2.1 oradismコマンド, D.1 oraenvファイル, 1.2.3 ORAENV_ASK環境変数, 1.2.1 ORECLEN, 6.1.4 OSDBAグループ, 1.4.1 OSOPERグループ, 1.4.1 ottcfg.cfgファイル, 6.1.1

P

ページアウト・アクティビティ, 8.3.2

ページング

十分な割当て, A.1.3

制御, A.1.4

チューニング, 8.3

パラメータ

BUFFER, A.1.7

CREATE CONTROLFILE, F.1

CREATE DATABASE, F.1

DB_FILE_MULTIBLOCK_READ_COUNT, A.2.5

動的キャッシュ, B.1

MAXDATAFILES, F.1

maxfree, A.1.1

MAXLOGFILES, F.1

MAXLOGHISTORY, F.1

MAXLOGMEMBERS, F.1

maxperm, A.1.1, A.1.2

minfree, A.1.1

minperm, A.1.1, A.1.2

SCHED_NOAGE, C.2

SGA_MAX_SIZE, D.1

shm_max, 8.6

shm_seg, 8.6

shmmax, 8.6

shmseg, 8.6

USE_INDIRECT_DATA_BUFFERS, B.1

PATH環境変数, 1.2.2, 4.2.1, 6.4.1.1, 6.4.1.2 pcbcfg.cfgファイル, 6.1.1 pccfor.cfgファイル, 6.1.1 pcscfg.cfgファイル, 6.1.1 Performance Tool Box Agent, 8.2.5.2 パフォーマンス・チューニング・ツール, 8.2.6 PL/SQLのデモ, 7.2 PL/SQLカーネル・デモ, 7.2 pmscfg.cfgファイル, 6.1.1 インストール後のタスク

コンフィギュレーション・アシスタント, 3.1

プリコンパイラ実行可能ファイル

再リンク, 6.1.2

プリコンパイラ

実行可能ファイル, 6.1.2

概要, 6.1

Pro*C/C++, 6.3

Pro*COBOL, 6.4

READMEファイル, 6.1.3

デモの実行, 7.2

シグナル, 6.12

大文字から小文字への変換, 6.1.4

IRECLENおよびORECLENの値, 6.1.4

ベンダー提供のデバッガ・プログラム, 6.1.4

PRINTER環境変数, 1.2.2 privgroupファイル, C.2.1, C.4.1 Pro*C/C++

デモ・プログラム, 6.3.1

Makeファイル, 6.3.1

シグナル, 6.12

ユーザー・プログラム, 6.3.2

Pro*C/C++プリコンパイラ, 6.3 Pro*COBOL

デモ・プログラム, 6.4.3

環境変数, 6.4.1

FORMATプリコンパイラ, 6.4.4, 6.4.5

ネーミングの相違点, 6.4

Oracleランタイム・システム, 6.4.2

ユーザー・プログラム, 6.4.4

Pro*FORTRANのデモ・プログラム, 6.5.1 SMPシステムでのプロセッサ・バインディング

使用, A.3.2

PRODUCT_USER_PROFILE表, 4.1.2 Programmer's Analysis Kit, 8.2.6 プロトコル, 5.3

R

RAWデバイス

バッファ・キャッシュ・サイズ, 8.7

RAW論理ボリューム, A.2.2, A.2.2, A.2.2 実行可能ファイルの再リンク, 3.2 削除

SQL*Plusのコマンドライン・ヘルプ, 4.1.4.2

ミラー復元, Oracle Database, A.2.9 再起動

自動ストレージ管理, 2.2.1.2

Oracle Database, 2.2.1.2

制限事項, SQL*Plus, 4.3

パスワード, 4.3.3

ウィンドウのサイズ変更, 4.3.1

リターン・コード, 4.3.2

root.shスクリプト, 1.2.3

S

サンプル・スキーマ

「Oracle Databaseサンプル・スキーマ」を参照

sarコマンド, 8.2.2, 8.3.2 SCHED_NOAGE

有効化, C.2.1

スケジュール・ポリシー, C.2

スクリプト

root.sh, 1.2.3

順次先読み

チューニング, A.2.7

servicesファイル, 5.4 setprivgrpコマンド, C.2.1, C.4.1 SGA, 8.6

サイズの確認, 8.6.1

SGA_MAX_SIZEパラメータ, D.1 共有メモリー・セグメント, C.1 共有メモリー, AIX, 8.6.3 SHARED_POOL_SIZE初期化パラメータ, 8.6 SHLIB_PATH環境変数, 6.4.1.1 shm_maxパラメータ, 8.6 shm_segパラメータ, 8.6 shmmaxパラメータ, 8.6 shmsegパラメータ, 8.6 停止

自動化, 2.1

SIGCLDシグナル, 6.12 SIGCONTシグナル, 6.12 SIGINTシグナル, 6.12 SIGIOシグナル, 6.12 シグナル・ハンドラ, 6.12 シグナル・ルーチン, 6.12

例, 6.12

シグナル

SIGCLD, 6.12

SIGCONT, 6.12

SIGINT, 6.12

SIGIO, 6.12

SIGPIPE, 6.12

SIGTERM, 6.12

SIGURG, 6.12

SIGPIPEシグナル, 6.12 SIGTERMシグナル, 6.12 SIGURGシグナル, 6.12 Solarisのツール, 8.2.8 SPOOLコマンド

SQL*Plus, 4.2.4

SQL*Loader, A.1.7 SQL*Loaderのデモ, 7.1 SQL*Module for Ada, 6.6

デモ・プログラム, 6.6.1

ユーザー・プログラム, 6.6.2

SQL*Plus

コマンドライン・ヘルプ, 4.1.4

デフォルト・エディタ, 4.2.1

エディタ, 4.2.1

割込み, 4.2.3

PRODUCT_USER_PROFILE表, 4.1.2

制限事項, 4.3

オペレーティング・システム・コマンドの実行, 4.2.2

サイト・プロファイル, 4.1.1

SPOOLコマンド, 4.2.4

システム・エディタ, 4.2.1

ユーザー・プロファイル, 4.1.1

コマンドラインSQL*Plusの使用, 4.2

SQL*Plusのコマンドライン・ヘルプ

インストール, 4.1.4.1

削除, 4.1.4.2

SQL*Plus, 割込み, 4.2.3 SQLPATH環境変数, 1.2.1, 1.2.1 起動

Oracle Cluster Services Synchronizationデーモン, 2.2.2

Oracle Enterprise Manager Database Control, 2.2.3

Oracle Management Agent, 2.2.4

起動

自動化, 2.1

静的リンク

Oracleライブラリとプリコンパイラ, 6.1.5

停止

Oracle Cluster Services Synchronizationデーモン, 2.2.2

Oracle Enterprise Manager Database Control, 2.2.3

Oracle Management Agent, 2.2.4

ストライプ化論理ボリューム

設計, A.2.1

swapコマンド, 8.2.4 スワップ領域, 8.3

チューニング, 8.3

スワップ領域の割当て, 8.3.1 swapinfoコマンド, 8.2.4 swaponコマンド, 8.2.4 symfindユーティリティ, 6.10 SYSDATE, 1.2.4 システム・エディタ

SQL*Plus, 4.2.1

システム時刻, 1.2.4

T

表

PRODUCT_USER_PROFILE, 4.1.2

TCP/IPプロトコル, 5.3.2 Secure Sockets Layer付きTCP/IPプロトコル, 5.3.3 スレッドのサポート, 6.11 TMPDIR環境変数, 1.2.2 トレース・アラート, 1.5 トレース・ファイル, 1.5 チューニング, 8.3

ディスク入出力, 8.4

入出力ボトルネック, 8.4

大規模メモリーの割当て, C.5

メモリー管理, 8.3

推奨事項, C.5.2

順次先読み, A.2.7

チューニング・ツール

Glance/UXユーティリティ, 8.2.6

iostatコマンド, 8.2.3

lspsコマンド, 8.2.4

mpstat, 8.2.8

Performance Tool Box Agent, 8.2.5.2

Performance Tool Box Manager, 8.2.5.2

Programmer's Analysis Kit, 8.2.6

sarコマンド, 8.2.2

swapコマンド, 8.2.4

swapinfoコマンド, 8.2.4

swaponコマンド, 8.2.4

vmstatコマンド, 8.2.1

TWO_TASK環境変数, 1.2.1

U

未定義シンボル, 6.10

Unifiedファイル・システム, 8.4.2

UNIX System Vファイル・システム, 8.4.2

アップグレード済データベース

構成, 3.1.4

アップグレード, 3.1.2

USE_INDIRECT_DATA_BUFFERSパラメータ, B.1 ユーザー割込みハンドラ, 6.12 ユーザー・プロファイル

SQL*Plus, 4.1.1

ユーザー・プログラム

Pro*C/C++, 6.3.2

Oracle C++ Call Interface, 6.7.2

Oracle Call Interface, 6.7.2

Pro*C/C++, 6.3.2

Pro*COBOL, 6.4.4

SQL*Module for Ada, 6.6.2

コマンドラインSQL*Plusの使用, 4.2 ユーティリティ

アダプタ, 5.2

インポート, A.1.7

symfind, 6.10

UTLRP.SQL

無効なSQLモジュールの再コンパイル, 3.1.4

V

VERITASファイル・システム, 8.4.2

仮想メモリー・データ・ページ

Oracle Databaseのチューニング, C.5

仮想メモリー・マネージャ A.2.7 仮想メモリー・ページ・サイズ, デフォルト, C.5.1 vmoコマンド, A.1.1 vmstatコマンド, 8.2.1

X

XA機能, 6.13

X/Open Distributed Transaction Processing XAインタフェース, 6.13

Oracleの法律上の注意点

コピーライト

Copyright © 1994-2018, Oracle and/or its affiliates. All rights reserved.

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクルまでご連絡ください。

制限付権利について

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、Oracle Corporationおよびその関連会社は一切の責任を負いかねます。

商標と登録商標について

OracleおよびJavaはオラクルおよびその関連会社の登録商標です。その他の社名、商品名等は各社の商標または登録商標である場合があります。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

Pre-General Availability (一般提供前)版のドキュメントについて

このドキュメントがPre-General Availability (一般提供前)版の場合:

このドキュメントはPre-General Availability (一般提供前)版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。Oracle Corporationおよびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

非公開のPre-General Availability (一般提供前)版のドキュメントについて

このドキュメントが非公開のPre-General Availability (一般提供前)版の場合:

このドキュメントに含まれる情報は、情報の共有のみを目的としたものであって、顧客諮問委員会(Customer Advisory Board)のメンバーとしてのお客様の立場でのみ、またはお客様のPre-General Availability Trial Agreement (Pre-GAトライアル契約)のみに従って検討されるべきものとします。マテリアル、コード、または機能の提供をお約束するものではなく、購入決定を行う際の判断材料とすべきではありません。このドキュメントに記載されている特徴または機能の開発、リリースおよび時期については、オラクルの裁量により決定されます。

このドキュメントには、ソフトウェアまたは印刷物などの形式を問わず、オラクルが独占的な権利を有する財産的情報が含まれています。この機密資料へのアクセスと使用は、お客様とオラクルとの間で締結され、お客様が遵守に同意した、Oracle Master Agreement、Oracle License and Oracle Services Agreement (オラクル・ライセンスおよびサービスに関する契約書)、Oracle Partner Network Agreement、Oracle Distribution Agreementまたはその他のライセンス契約の条件に従うものとします。このドキュメントとその内容の開示、コピー、複製および配布には、オラクルによる事前の承諾を必要とします。このドキュメントはライセンス契約の一部となるものではなく、オラクルおよびその子会社や関連会社との契約を構成するものではありません。

ドキュメントのアクセシビリティ

オラクルのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

サポートをご契約のお客様には、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info)か、聴覚に障害のあるお客様は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。