« 2013年7月 | メイン | 2013年9月 »

2013年8月 アーカイブ

2013年8月12日

@IT連載「ユーザー目線でチェック! Oracle Database 12cの知りたいところ」掲載開始!

「ユーザー目線でチェック! Oracle Database 12cの知りたいところ」と題して、@ITでOracle Database 12cに関する連載をさせていただけることになりました。第1弾は、

です。この記事は私が書かせていただきました。

2009年のOracle Database 11g R2のリリースから約4年が過ぎ、Oracle Databaseの最新バージョンOracle Database 12c R1がリリースされました。本連載では、Oracle Database 12c R1の主要な新機能をユーザーの立場に立って実際に使用、評価し、新機能の活用方法や注意点を紹介します。

第1弾となる本記事では、Oracle Database導入を実施ならびに支援するサービスプロバイダという筆者の立ち場から、ユーザーにとってのOracle Database 新バージョンの意義を考えながら、Oracle Database 12c R1の新機能や廃止された機能などをご紹介します。

2番目以降の記事では私以外のコーソルのエンジニア が執筆する予定です。もしご興味があれば、連載の各記事をご覧いただけると嬉しいです。

ちなみに以下は2013/8/12 の朝に取得した@ITのトップページです。自分の記事がトップページからリンクが張られるなんて、感動しますね~ ではでは

CDBのAWRレポート

CDBでAWRレポートを取得してみます。

通常のデータベースと大幅に異なるところは無いようですが、細かいところでPDBに関する情報が追加されていることが確認できます。

SQL Ordered by XXXセクションにはPDBに関する列が追加され、どのPDBで実行されたSQLであるかが分かるようになっています。

awr_cdb_sql_ordered.jpg

I/O関連のセクションにはPDBに関する列が追加され、どのPDB内の表領域、データファイルに対するI/Oかどうかがわかるようになっています。 同一名称の表領域が存在しうることへの配慮でしょう。

awr_cdb_iostat.jpg

セグメントI/OのセクションにはPDBに関する列が追加され、どのPDB内のセグメントに対するI/Oかどうかがわかるようになっています。

awr_cdb_segments.jpg

2013年8月 9日

弊社主催キャリアディベロップメントセミナーではからずも考えさせられたこと

昨日、弊社セミナールームにて、

と題して、IT業界の構造(開発、運用における会社、チームの責任分担)や、各人が 担当する役割としての職務(プロジェクトマネージャ、システムエンジニア、データベースエンジニア、テクニカルサポートなど)を概説させていただき、そのうえで、「適職」とは何か?を考える セミナーを実施し、そこで講師を担当させていただきました。

このようなセミナーを実施する背景としては、エンジニアが転職する際に、 データベースエンジニアという職種が、選択肢として取り上げられにくい点があります。 もちろん、それぞれのスキルや指向、実績により、最適と考えうる職種は異なるわけで、 全ての人にデータベースエンジニアという職種をお勧めするわけではないのですが、 いかんせん、転職というステージにおける「データベースエンジニアという職種」の存在感、 もう少し一般化するなら、「テクニカル系スペシャリスト」の存在感が薄いと考えています。 その存在感を少しでもUPさせるために、俯瞰した観点で職種全体を捉えてもらい、 「テクニカル系スペシャリスト」の存在を認知してもらい、あわよくば その人の中で「テクニカル系スペシャリスト」の存在感を高めてもらおうという考えです。 (もちろん、最終的にはコーソルに転職いただけるのがうれしいのですが、このセミナーでは 意図的にその観点は極端には前面に押し出しておりません)

セミナーの趣旨としては以上なのですが、セミナーを通して自分にとっての隠れた収穫がありました。 このセミナーは複数の講師を立てて実施しており、前半は私が担当し、後半は別の社員が経験談を語るという構成になっています。その経験談のなかで、どのようなことが語られるのかというと、基本的には前職での悩みと悩みを解決する手段としての「コーソルへの転職」です。その話を通して、日ごろはあまり聞く機会のない、同僚がコーソルに期待している(していた)点を聞く形になりました。

コーソルとして、期待されていた部分に十分こたえられているか?を自問しました。 自身 日中夜間の社内セミナーの講師や土日の社内セミナー再演、Web媒体への記事執筆の指導などを通して、 皆さんが「テクニカル系スペシャリスト」になるべく早くなれるように頑張っているつもりではありますが、他にもできることはあるのではないか?と思う、いい機会になりました。これからもさらに頑張ります!

Oracle Database 12c R1のマニュアル構成を11g R2と比較する

ふと思い立ってOracle Database 12c R1のマニュアル構成と11g R2のマニュアル構成を比較してみました。 基本的には以下のURLのマニュアル一覧をテキストに落として、diffを取っただけです。

$ diff 12cR1_manuals.txt 12cR1_manuals_mod.txt
27c27
< Concepts
---
> Database Concepts

ただし、一部のマニュアルに表記のブレ(Concept or Database Concept)があったので、修正を加えています。

$ diff -y --suppress-common-lines  <(sort 12cR1_manuals_mod.txt)  11gR2_manuals.txt
                                                              > 2 Day + .NET Developer's Guide for Microsoft Windows
                                                              > 2 Day + Data Replication and Integration Guide
                                                              > 2 Day + Data Warehousing Guide
Advanced Queuing User's Guide                                 | Advanced Application Developer's Guide
Advanced Security Guide                                       | Advanced Security Administrator's Guide
                                                              > Airlines Data Model Implementation and Operations Guide
                                                              > Airlines Data Model Installation Guide
                                                              > Airlines Data Model Reference
                                                              > Airlines Data Model Release Notes
                                                              > Application Express Advanced Tutorials
Application Express End User Guide                            <
Application Express SQL Workshop Guide                        | Application Express SQL Workshop and Utilities Guide
                                                              > Client Release Notes for Apple Mac OS X
                                                              > COM Automation Feature Developer's Guide for Microsoft Window
                                                              > Communications Data Model Implementation and Operations Guide
                                                              > Communications Data Model Installation Guide
                                                              > Communications Data Model Reference
                                                              > Communications Data Model Release Notes
                                                              > Data Mining Administrator's Guide
                                                              > Data Mining Application Developer's Guide
Data Mining User's Guide                                      | Data Mining Java API Reference (Javadoc)
Data Provider for .NET Developer's Guide for Microsoft Window | Data Provider for .NET Developer's Guide
                                                              > Database Client Installation Guide for Apple Mac OS X
                                                              > Database Client Installation Guide for HP-UX
                                                              > Database Client Installation Guide for IBM AIX on POWER Syste
                                                              > Database Client Quick Installation Guide for HP-UX Itanium
                                                              > Database Client Quick Installation Guide for HP-UX PA-RISC (6
                                                              > Database Client Quick Installation Guide for IBM AIX on POWER
                                                              > Database Client Quick Installation Guide for IBM: Linux on Sy
                                                              > Database Client Quick Installation Guide for Linux x86
                                                              > Database Client Quick Installation Guide for Microsoft Window
Database Gateway for APPC Installation and Configuration Guid | Database Gateway for APPC Installation and Configuration Guid
                                                              > Database Gateway for IMS, VSAM, and Adabas Installation and C
                                                              > Database Gateway for IMS, VSAM, and Adabas Installation and C
Database Gateway Installation and Configuration Guide for IBM | Database Gateway Installation and Configuration Guide for AIX
                                                              > Database Installation and Administration Guide for Fujitsu BS
                                                              > Database Installation Guide for HP-UX
                                                              > Database Installation Guide for IBM AIX on POWER Systems (64-
                                                              > Database Quick Installation Guide for HP-UX Itanium
                                                              > Database Quick Installation Guide for HP-UX PA-RISC (64-Bit)
                                                              > Database Quick Installation Guide for IBM AIX on POWER System
                                                              > Database Quick Installation Guide for IBM: Linux on System z
                                                              > Database Quick Installation Guide for Linux x86
                                                              > Database Quick Installation Guide for Microsoft Windows (32-B
Development Guide                                             | Enterprise Manager System Monitoring Plug-in for Oracle Times
Enterprise Manager System Monitoring Plug-in for Oracle Times <
Exadata MAA Best Practices (Virtual Book)                     <
                                                              > Gateway for Adabas User's Guide
                                                              > Gateway for IMS User's Guide
Global Data Services Concepts and Administration Guide        | Gateway for VSAM User's Guide
                                                              > Grid Infrastructure Installation Guide for HP-UX
                                                              > Grid Infrastructure Installation Guide for IBM AIX on POWER S
                                                              > High Availability Best Practices
Migrating and Upgrading an Oracle Database to Linux Using Dat <
Migrating and Upgrading an Oracle Database to Solaris Using D <
Migration Assistant for Unicode Guide                         <
Migration Guide                                               <
                                                              > Oracle Connect for IMS, VSAM, and Adabas Gateways Installatio
                                                              > Oracle Objects for OLE Developer's Guide for Microsoft Window
Pro*C/C++ Release Notes                                       <
Pro*COBOL Release Notes                                       <
                                                              > R Enterprise Installation and Administration Guide
Real Application Security Administrator's and Developer's Gui | Real Application Testing User's Guide
Real Application Security Java API Reference (Javadoc)        <
                                                              > Release Notes for HP-UX
                                                              > Release Notes for IBM AIX on POWER Systems (64-Bit)
                                                              > Retail Data Model Implementation and Operations Guide
                                                              > Retail Data Model Installation Guide
                                                              > Retail Data Model Reference
                                                              > Retail Data Model Release Notes
                                                              > Rules Manager and Expression Filter Developer's Guide
                                                              > Semantic Technologies Developer's Guide
Spatial and Graph Developer's Guide                           | Spatial Developer's Guide
Spatial and Graph GeoRaster Developer's Guide                 | Spatial GeoRaster Developer's Guide
Spatial and Graph Java API Reference (Javadoc)                | Spatial Java API Reference (Javadoc)
Spatial and Graph RDF Semantic Graph Developer's Guide        | Spatial Topology and Network Data Models Developer's Guide
Spatial and Graph Topology Data Model and Network Data Model  <
SQL Tuning Guide                                              <
                                                              > Streams Advanced Queuing Java API Reference (Javadoc)
                                                              > Streams Advanced Queuing User's Guide
Testing Guide                                                 <
Upgrade and migrate to Solaris and Oracle ASM from third-part | Universal Installer and OPatch User's Guide for Windows and U
                                                              > User's Guide for Fujitsu BS2000/OSD
                                                              > Warehouse Builder API and Scripting Reference
                                                              > Warehouse Builder Concepts
                                                              > Warehouse Builder Data Modeling, ETL, and Data Quality Guide
                                                              > Warehouse Builder Installation and Administration Guide
                                                              > Warehouse Builder OMB*Plus Command Reference
                                                              > Warehouse Builder Release Notes
                                                              > Warehouse Builder Sources and Targets Guide
                                                              >

気になる点いくつか

Migration Guide
http://docs.oracle.com/cd/E16655_01/gateways.121/e22508/toc.htm

どこまで本気かわかりませんが、Oracle Database 12c R1では、他RDBMS製品向けに作成されたアプリケーションの移行を狙った機能がいくつか用意されています。 Migration Guideではこれらの機能に関する説明が記載されています。

  • SQL Translation Framework Example
  • MySQL Client Library Driver for Oracle
SQL Tuning Guide
http://docs.oracle.com/cd/E16655_01/server.121/e15858/index.htm

Performance Tuning Guideとは別にSQL Tuning Guideが導入されました。

インスタンスチューニング、データベースチューニングといった比較的マクロな視点での チューニングについてはPerformance Tuning Guideで、個別のSQLに対するチューニングについてはSQL Tuning Guideでという形でマニュアルを分けたように思われます。

ただ、単純に分冊しただけでなく、ちらりと見た限りでは、SQL Tuning Guideの内容はかなり新規に追加した内容が多く、充実した内容になっています。

Testing Guide
http://docs.oracle.com/cd/E16655_01/server.121/e20852/index.htm

Real Application Testing User's GuideからTesting Guideに変更されたようです。

ちらりと見た限りでは、内容はReal Application Testing User's Guideからさほど変わっていないように思えます。

マニュアルの数

現時点で Oracle Database 12c R1のマニュアルの数は194・・・ 現時点では 11g R2より少ないですが、順次追加されていく形になるのでしょう。

$ wc -l 12cR1_manuals.txt 11gR2_manuals.txt
  194 12cR1_manuals.txt
  244 11gR2_manuals.txt
  438 合計

2013年8月 8日

OSS-DB Exam Silver 技術解説無料セミナー(PostgreSQL)の資料が公開されました

弊社コーソルは、「CO-Solutions=共に解決する」の理念のもと、Oracle技術に特化した事業を展開しておりますが、現在PostgreSQL、MySQLなどのOSS-DB領域へも事業範囲を広げています。

事業範囲をOSS-DB領域へ広げる取り組みの一環として、LPI-Japan様主催セミナーの講師を務めた際に使用した資料が公開されておりますので紹介させていただきます。

資料作成にすこし気合を入れすぎてしまい、資料の総ページ数が212ページ(!) に達してしまいました。 セミナーではすべてのトピックについて説明できませんでしたが、セミナーで説明を割愛させていただいたSQLの箇所については、今後の試験勉強の参考にしていただければと思います。

Oracle DatabaseをはじめとするRDBMS製品に関する使用経験をお持ちの方が多いこと、本セミナーの趣旨がポイント解説であること、資料のボリュームが多いことから、スピーディな解説を心がけました。アンケートでは、80%以上の方から「大変満足」「満足」という回答をいただけました(参加者数90名、アンケート未回答の5名を含めた満足率算出)。

本資料がPostgreSQL、OSS-DB技術者認定試験にご興味がある方のお役に立てれば幸いです!

通常のDBをPDBとしてplugする

プラガブルデータベースではない、通常のデータベースをPDBとしてCDBにplugしてみます。

基本的には以下のマニュアルに記載の手順を実行するだけです。

plugしようとしている通常のデータベースにSYSユーザーで接続し、テスト用のユーザーとデータを作成します。

[oracle@l63x64a ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on 金 8月 2 04:25:57 2013

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

アイドル・インスタンスに接続しました。

SQL> startup
ORACLEインスタンスが起動しました。

Total System Global Area  417546240 bytes
Fixed Size                  2289064 bytes
Variable Size             268436056 bytes
Database Buffers          142606336 bytes
Redo Buffers                4214784 bytes
データベースがマウントされました。
データベースがオープンされました。

SQL> CREATE USER rywatabe IDENTIFIED BY rywatabe;

ユーザーが作成されました。

SQL> GRANT DBA TO rywatabe;
権限付与が成功しました。

SQL> create table rywatabe.test (n number);

表が作成されました。

SQL> insert into rywatabe.test values(1);

1行が作成されました。

SQL> commit;

コミットが完了しました。

インスタンスをshutdownして、読み取り専用でOPENし、DBMS_PDB.DESCRIBEを実行して メタデータを作成します。


SQL> SHUTDOWN IMMEDIATE
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> startup mount
ORACLEインスタンスが起動しました。

Total System Global Area  417546240 bytes
Fixed Size                  2289064 bytes
Variable Size             268436056 bytes
Database Buffers          142606336 bytes
Redo Buffers                4214784 bytes
データベースがマウントされました。
SQL> ALTER DATABASE OPEN READ ONLY;

データベースが変更されました。

SQL> SELECT name, value FROM V$PARAMETER WHERE NAME = 'compatible';

NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
compatible
12.1.0.0.0


SQL> exec DBMS_PDB.DESCRIBE(pdb_descr_file => '/var/tmp/c101.xml');

PL/SQLプロシージャが正常に完了しました。

SQL> SHUTDOWN IMMEDIATE
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL>

次にコンテナデータベースに接続し、CREATE PLUGGABLE DATABASE USING ... でデータベースをplugします。

SYS@c101cdb##CDB$ROOT> SELECT PDB_NAME, STATUS FROM CDB_PDBS;

PDB_NAME                 STATUS
------------------------ -------------
PDB$SEED                 NORMAL
PDB1                     NEW

SYS@c101cdb##CDB$ROOT> CREATE PLUGGABLE DATABASE pdb2 USING '/var/tmp/c101.xml'
  2    COPY
  3      FILE_NAME_CONVERT = ('/u02/app/oracle/oradata/c101/', '/u02/app/oracle/oradata/c101cdb/pdb2/');

プラガブル・データベースが作成されました。

SYS@c101cdb##CDB$ROOT> SELECT PDB_NAME, STATUS FROM CDB_PDBS;

PDB_NAME                 STATUS
------------------------ -------------
PDB2                     NEW
PDB$SEED                 NORMAL
PDB1                     NEW

この後、PDBで @?/rdbms/admin/noncdb_to_pdb.sql を実行します。

SYS@c101cdb##PDB2> @?/rdbms/admin/noncdb_to_pdb.sql
SYS@c101cdb##PDB2> SET SERVEROUTPUT ON
SYS@c101cdb##PDB2> SET FEEDBACK 1
SYS@c101cdb##PDB2> SET NUMWIDTH 10
SYS@c101cdb##PDB2> SET LINESIZE 80
SYS@c101cdb##PDB2> SET TRIMSPOOL ON
  : 
  : 様々な処理が実行されます
  : 
SYS@c101cdb##PDB2> -- leave the PDB in the same state it was when we started
SYS@c101cdb##PDB2> BEGIN
  2    execute immediate '&open_sql &restricted_state';
  3  EXCEPTION
  4    WHEN OTHERS THEN
  5    BEGIN
  6      IF (sqlcode <> -900) THEN
  7        RAISE;
  8      END IF;
  9    END;
 10  END;
 11  /

PL/SQLプロシージャが正常に完了しました。

SYS@c101cdb##PDB2>
SYS@c101cdb##PDB2> WHENEVER SQLERROR CONTINUE;

引き続きDBMS_PDB.SYNC_PDB();を実行します。

SYS@c101cdb##PDB2> ALTER PLUGGABLE DATABASE pdb2 OPEN READ WRITE RESTRICTED;

プラガブル・データベースが変更されました。

SYS@c101cdb##PDB2> ALTER SESSION SET CONTAINER = pdb2;

セッションが変更されました。

SYS@c101cdb##PDB2> exec DBMS_PDB.SYNC_PDB();

PL/SQLプロシージャが正常に完了しました。

SYS@c101cdb##PDB2> SHUTDOWN IMMEDIATE
プラガブル・データベースがクローズされました。

PDBにplug前のデータがあることを確認します。

SYS@c101cdb##PDB2> STARTUP
プラガブル・データベースがオープンされました。SYS@c101cdb##PDB2>
SYS@c101cdb##PDB2> col name format a16
SYS@c101cdb##PDB2> col network_name format a24
SYS@c101cdb##PDB2> col pdb format a8
SYS@c101cdb##PDB2> SELECT name, network_name, pdb, con_id FROM V$SERVICES;

NAME             NETWORK_NAME             PDB          CON_ID
---------------- ------------------------ -------- ----------
pdb2.world       pdb2.world               PDB2              4

1行が選択されました。


SYS@c101cdb##PDB2> conn rywatabe/rywatabe@localhost:12101/pdb2.world
接続されました。




1行が選択されました。

RYWATABE@localhost:12101/pdb2.world##PDB2> SELECT * FROM test;

         N
----------
         1

1行が選択されました。

RYWATABE@localhost:12101/pdb2.world##PDB2>

2013年8月 7日

rlwrap: Oops, crashed (caught SIGFPE) - this should not have happened!

少しハマったので、将来の自分と同じトラブルに出くわした方へのメモ代わりに残しておきます。

sqlplusを'rlwrap sqlplus'にaliasしているVM(Oracle VM)環境で、これまでrlwrapがうまく動作していたにも関わらず、 SIGFPEで動作しなくなることがありました。

[oracle@l63x64b ~]$ which sqlplus
alias sqlplus='rlwrap sqlplus'
        /usr/bin/rlwrap
[oracle@l63x64b ~]$ uname -a
Linux l63x64b.domain 2.6.39-200.32.1.el6uek.x86_64 #1 SMP Wed Sep 26 23:11:38 PDT 2012 x86_64 x86_64 x86_64 GNU/Linux
[oracle@l63x64b ~]$ rpm -qa |grep rlwrap
rlwrap-0.37-1.el6.x86_64
[oracle@l63x64b ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on 水 8月 7 18:42:18 2013

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


rlwrap: Oops, crashed (caught SIGFPE) - this should not have happened!
If you need a core dump, re-configure with --enable-debug and rebuild
Resetting terminal and cleaning up...

原因はどうやらxm consoleを使ってVMのCUIコンソールにアクセスし、このコンソールで rlwrapを使用しているためのようでした。VMにssh経由で接続したところ、問題は発生しませんでした。根本原因の追究まではしていませんが、同じ原因でトラブルとなった人のためにblogとして記録しておきます(=Googleの検索インデックスに追加しておきます)。

SQL*Plusのプロンプトに接続先コンテナ名を表示する方法

マルチテナントデータベースを使用してると、現在のセッションの接続先である コンテナが何であるかを知りたくなる瞬間が多くあります。 もちろん show con_name や select sys_context('userenv', 'con_name') from dual;を実行すれば、接続先コンテナはわかりますが、プロンプトに表示されていると便利でしょう。

また、端末の出力をメモとして記録するとき、特に意識しなくても接続先コンテナが自然と記録に残るため、検証に便利です。

SQL*Plusのプロンプトに接続先コンテナ名を表示するためには、環境変数SQLPATHでポイントされるディレクトリにlogin.sqlというファイルを作成し、以下の内容を記載しておきます。

col CONT new_value CONT noprint
select sys_context('userenv', 'con_name') as CONT from dual;
set sqlprompt "_USER'@'_CONNECT_IDENTIFIER##&&CONT> "

ただし、この方法では、ALTER SESSION SET CONTAINER = <コンテナ名>; で接続先コンテナを 変更した場合に、併せてプロンプトが変更されません。変更後あらためて login.sqlを実行する必要があります。

[oracle@l63x64a ~]$ sqlplus system/oracle

SQL*Plus: Release 12.1.0.1.0 Production on 金 8月 2 02:02:42 2013

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

最終正常ログイン時間: 金 8月  02 2013 01:51:56 -04:00


Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
に接続されました。




SYSTEM@c101cdb##CDB$ROOT> ALTER SESSION SET CONTAINER = PDB1;

セッションが変更されました。

SYSTEM@c101cdb##CDB$ROOT> show con_name

CON_NAME
------------------------------
PDB1
SYSTEM@c101cdb##CDB$ROOT> @login




SYSTEM@c101cdb##PDB1>
参考

以下の記事を参考にさせていただきました。感謝!

unplugしたPDBを再度plugするとORA-65122

昨日は某社のサポートパートナーイベントでタダメシをいただいてきました。ビュッフェとはいえ、ホテルのご飯はやっぱりおいしいですね。それはさておき、最近個人的な宿題になっている Oracle Database 12cについて書きます。

一旦アンプラグしたプラガブルデータベースを再度プラグしようとしたところ、 ORA-65122: プラガブル・データベースのGUIDが既存のコンテナのGUIDと競合しています。 が発生しました。

SYS@c101cdb##CDB$ROOT> CREATE PLUGGABLE DATABASE pdb2 USING '/var/tmp/pdb1.xml' NOCOPY;
CREATE PLUGGABLE DATABASE pdb2 USING '/var/tmp/pdb1.xml' NOCOPY
*
行1でエラーが発生しました。:
ORA-65122:
プラガブル・データベースのGUIDが既存のコンテナのGUIDと競合しています。
ルートコンテナに登録されている不要なプラガブルデータベースを削除してから、プラグすることでエラーを回避できましたよと。
SYS@c101cdb##CDB$ROOT> select pdb_name, GUID, status from cdb_pdbs;
  
PDB_NAME                 GUID                             STATUS
------------------------ -------------------------------- -------------
PDB1                     E2DFA4C0079F2F16E04301871FACBD5C UNPLUGGED ←★
PDB$SEED                 E2DECC24DB832838E04301871FAC6FE6 NORMAL
  
SYS@c101cdb##CDB$ROOT> DROP PLUGGABLE DATABASE pdb1;
  
プラガブル・データベースが削除されました。
  
SYS@c101cdb##CDB$ROOT> select pdb_name, GUID, status from cdb_pdbs;
  
PDB_NAME                 GUID                             STATUS
------------------------ -------------------------------- -------------
PDB$SEED                 E2DECC24DB832838E04301871FAC6FE6 NORMAL
  
SYS@c101cdb##CDB$ROOT> CREATE PLUGGABLE DATABASE pdb1 USING '/var/tmp/pdb1.xml' NOCOPY;
  
プラガブル・データベースが作成されました。

アラートログ出力

ついでに、アラートログ出力も転記しておきます。

DROP PLUGGABLE DATABASE pdb1
Fri Aug 02 03:17:32 2013
Deleted file /u02/app/oracle/oradata/c101cdb/pdb1/temp01.dbf
Completed: DROP PLUGGABLE DATABASE pdb1
CREATE PLUGGABLE DATABASE pdb1 USING '/var/tmp/pdb1.xml' NOCOPY
Fri Aug 02 03:18:13 2013
****************************************************************
Pluggable Database PDB1 with pdb id - 3 is created as UNUSABLE.
If any errors are encountered before the pdb is marked as NEW,
then the pdb must be dropped
****************************************************************
Deleting old file#8 from file$
Deleting old file#9 from file$
Deleting old file#10 from file$
Adding new file#11 to file$(old file#8)
Adding new file#12 to file$(old file#9)
Adding new file#13 to file$(old file#10)
Successfully created internal service pdb1.world at open
ALTER SYSTEM: Flushing buffer cache inst=0 container=3 local
****************************************************************
Post plug operations are now complete.
Pluggable database PDB1 with pdb id - 3 is now marked as NEW.
****************************************************************
Completed: CREATE PLUGGABLE DATABASE pdb1 USING '/var/tmp/pdb1.xml' NOCOPY

2013年8月 6日

12.1.0.1 DBCA画面キャプチャ - プラガブルデータベースの作成

コンテナデータベースの作成に引き続き、プラガブルデータベースを作成したときの DBCAの画面をキャプチャしてみました。

12101_dbca_create_pdb01.jpg

  • "Manage Pluggable Databases"という項目を選択します。

12101_dbca_create_pdb02.jpg

  • "Create Pluggable Database"という項目を選択します。

12101_dbca_create_pdb03.jpg

  • プラガブルデータベースを作成するコンテナデータベースを選択します。

12101_dbca_create_pdb04.jpg

  • スクラッチからプラガブルデータベースを作成する場合は、"Create a new Pluggable Database"を選択すると思われます。

12101_dbca_create_pdb05.jpg

12101_dbca_create_pdb06.jpg

12101_dbca_create_pdb07.jpg

  • インスタンスに関する設定、すなわち初期化パラメータに関する設定がありません。
  • また、コンポーネントに関する設定がありません。とてもシンプルです。

12101_dbca_create_pdb08.jpg

12101_dbca_create_pdb09.jpg

12101_dbca_create_pdb10.jpg

2013年8月 5日

9/6 19:00- JPOUG Tech Talk Night #2 やりますよ~

7月の「JPOUG Tech Talk Night #1」に続き、9月6日(金) 19:00から「JPOUG Tech Talk Night #2」 を開催することになりました。

jpoug-simple-logo.jpg

「絵で見てわかるOracleの仕組み」「門外不出のOracle現場ワザ」 などの多くの著書で有名な日本オラクルのコンサルタント小田圭二さんと、多くのJavaエンジニアからに注目を集めた人気連載「Javaはどのように動くのか~図解でわかるJVMの仕組み」の執筆者である同じ日本オラクルの伊藤智博さんにセッションを担当していただきます。 お二人はベンダの立場から、JPOUGとボードメンバーの活動を支援いただいている支援メンバーでもあります。(いつもありがとうございます!)

講演内容に興味がある方は、必ず有益な話が聞けるかと思いますので、是非OACに足をお運びください!

また、イベント終了後には、われわれが「夜会」と呼ぶ懇親会があります。小田さんをはじめとするOracle Databaseのスペシャリストの方と交流を深めながら、技術的な質問もできてしまうというOracle Database好きにはたまらない場になっています。お酒を交えながらアットホームな雰囲気で行われますので、知り合いがいなくても大丈夫です!(もちろんお酒を飲まれなくても、場を楽しむ気持ちがあればOK!)
(前回の夜会の様子はfacebookに少し画像がアップロードされています → https://www.facebook.com/photo.php?fbid=551175078280217&set=a.551174558280269.1073741826.252121998185528&type=3&theater)

IT勉強会では「懇親会が本番」なんてことも言われます。もしセッションに参加される場合は、夜会にも併せてご参加ください!

ちなみに夜会の参加登録は、セッション本体とは別にhttp://jpoug.doorkeeper.jp/events/5235で受け付けていますので、ご注意くださいな。では、イベント当日お会いできることをお待ちしています!!

何故に今? Oracle ACEの記念品をいただきました

何故今いただいたのかわかりませんが、Oracle ACEの記念品をいただきました!

oracleace_present.jpg

7月からOracle Corporationの新年度が始まり、予算を充当できたからかな? ;-)

なんにせよ、ありがたく頂戴いたします。m(_ _)m

12.1.0.1 DBCA画面キャプチャ - コンテナデータベースの作成

初めてコンテナデータベースを作成したので、DBCAの画面をキャプチャしてみました。 たまにあとから「どういう画面があったかな?」って調べたくなる時があるので・・・。

12101_dbca_cdb01.jpg

12101_dbca_cdb02.jpg

12101_dbca_cdb03.jpg

12101_dbca_cdb04.jpg

  • "Create As Container Database"を選択してコンテナデータベースを作成します。

12101_dbca_cdb05.jpg

12101_dbca_cdb06.jpg

12101_dbca_cdb07.jpg

12101_dbca_cdb08.jpg

12101_dbca_cdb09.jpg

12101_dbca_cdb10.jpg

12101_dbca_cdb11.jpg

12101_dbca_cdb12.jpg

12101_dbca_cdb13.jpg

12101_dbca_cdb14.jpg

12101_dbca_cdb15.jpg

12101_dbca_cdb16.jpg

12101_dbca_cdb17.jpg

12101_dbca_cdb18.jpg

画面キャプチャからお分かりのとおり、"Create As Container Database"を選択する以外は、通常のデータベースと特に変わるところはありません。

2013年8月30日

PDBのdual表

12.1.0.1で確認した動作ですが・・・

SQL> alter session set container=pdb1;

セッションが変更されました。
SQL> select * from dual;

ADDR                   INDX    INST_ID     CON_ID D
---------------- ---------- ---------- ---------- -
000000000CA1EA5C          0          1          0 X

SQL> show con_name;

CON_NAME
------------------------------
PDB1

この動作、いいのかな?

SQL> alter session set container=cdb$root;

セッションが変更されました。

SQL> select * from dual;

D
-
X

やっぱりこうだよね・・・。

2013年8月29日

12c新機能 - Temporary Undo

Oracle Database 12c R1 より、一時表のデータ更新におけるREDO生成量をさらに削減する機能が導入されています。

ただし、Oracle Database 11g以前から一時表のデータ更新に伴うREDO生成量は、通常の表よりも削減されていました。まずはこの点をsnapperを使って確認してみましょう。

通常の表と一時表のREDO生成量比較

SQL> SELECT DISTINCT sid FROM V$MYSTAT;

       SID
----------
        61

SQL> CREATE TABLE tbl_temp (id number, str char(2000));

表が作成されました。

SQL> insert into tbl_temp select level, level from dual connect by level <= 10000;

10000行が作成されました。

別のセッションでINSERT実行前にsnapperを実行しておきます。なお、スクリプトのファイル名が snapper12c.sql となっていますが気にしないでください。

SQL> @snapper12c stats 10 1 61
Sampling SID 61 with interval 10 seconds, taking 1 snapshots...

-- Session Snapper v3.52 by Tanel Poder @ E2SN ( http://tech.e2sn.com )

----------------------------------------------------------------------------------------------------------------------------------------------------
    SID, USERNAME  , TYPE, STATISTIC                                                 ,         DELTA,     HDELTA, HDELTA/SEC,    %TIME, GRAPH
----------------------------------------------------------------------------------------------------------------------------------------------------
     61, RYWATABE  , STAT, Requests to/from client                                   ,             1,          1,         .1,
     61, RYWATABE  , STAT, opened cursors cumulative                                 ,           233,        233,       23.3,
     61, RYWATABE  , STAT, user calls                                                ,             2,          2,         .2,
     61, RYWATABE  , STAT, recursive calls                                           ,           785,        785,       78.5,
     61, RYWATABE  , STAT, recursive cpu usage                                       ,            18,         18,        1.8,
     61, RYWATABE  , STAT, session logical reads                                     ,         41758,     41.76k,      4.18k,
     61, RYWATABE  , STAT, CPU used when call started                                ,            13,         13,        1.3,
     61, RYWATABE  , STAT, CPU used by this session                                  ,            39,         39,        3.9,
     61, RYWATABE  , STAT, DB time                                                   ,           159,        159,       15.9,
     61, RYWATABE  , STAT, concurrency wait time                                     ,            26,         26,        2.6,
     61, RYWATABE  , STAT, user I/O wait time                                        ,             8,          8,         .8,
     61, RYWATABE  , STAT, non-idle wait time                                        ,            40,         40,          4,
     61, RYWATABE  , STAT, non-idle wait count                                       ,           504,        504,       50.4,
     61, RYWATABE  , STAT, session uga memory                                        ,        458416,    458.42k,     45.84k,
     61, RYWATABE  , STAT, messages sent                                             ,            87,         87,        8.7,
     61, RYWATABE  , STAT, session pga memory                                        ,       5570560,      5.57M,    557.06k,
     61, RYWATABE  , STAT, enqueue requests                                          ,           790,        790,         79,
     61, RYWATABE  , STAT, enqueue releases                                          ,           788,        788,       78.8,
     61, RYWATABE  , STAT, physical read total IO requests                           ,           313,        313,       31.3,
     61, RYWATABE  , STAT, physical read total bytes                                 ,       4857856,      4.86M,    485.79k,
     61, RYWATABE  , STAT, physical write total IO requests                          ,           129,        129,       12.9,
     61, RYWATABE  , STAT, physical write total multi block requests                 ,            28,         28,        2.8,
     61, RYWATABE  , STAT, physical write total bytes                                ,      19841024,     19.84M,      1.98M,
     61, RYWATABE  , STAT, cell physical IO interconnect bytes                       ,      24698880,      24.7M,      2.47M,
     61, RYWATABE  , STAT, max cf enq hold time                                      ,            10,         10,          1,
     61, RYWATABE  , STAT, total cf enq hold time                                    ,            50,         50,          5,
     61, RYWATABE  , STAT, total number of cf enq holders                            ,            42,         42,        4.2,
     61, RYWATABE  , STAT, db block gets                                             ,         29264,     29.26k,      2.93k,
     61, RYWATABE  , STAT, db block gets from cache                                  ,         29264,     29.26k,      2.93k,
     61, RYWATABE  , STAT, db block gets from cache (fastpath)                       ,          7336,      7.34k,      733.6,
     61, RYWATABE  , STAT, consistent gets                                           ,         12494,     12.49k,      1.25k,
     61, RYWATABE  , STAT, consistent gets from cache                                ,         12494,     12.49k,      1.25k,
     61, RYWATABE  , STAT, consistent gets pin                                       ,         11622,     11.62k,      1.16k,
     61, RYWATABE  , STAT, consistent gets pin (fastpath)                            ,         11622,     11.62k,      1.16k,
     61, RYWATABE  , STAT, consistent gets examination                               ,           872,        872,       87.2,
     61, RYWATABE  , STAT, consistent gets examination (fastpath)                    ,           872,        872,       87.2,
     61, RYWATABE  , STAT, logical read bytes from cache                             ,     342081536,    342.08M,     34.21M,
     61, RYWATABE  , STAT, physical reads                                            ,             5,          5,         .5,
     61, RYWATABE  , STAT, physical reads cache                                      ,             5,          5,         .5,
     61, RYWATABE  , STAT, physical read IO requests                                 ,             5,          5,         .5,
     61, RYWATABE  , STAT, physical read bytes                                       ,         40960,     40.96k,       4.1k,
     61, RYWATABE  , STAT, db block changes                                          ,         23569,     23.57k,      2.36k,
     61, RYWATABE  , STAT, change write time                                         ,            16,         16,        1.6,
     61, RYWATABE  , STAT, free buffer requested                                     ,          3495,       3.5k,      349.5,
     61, RYWATABE  , STAT, commit cleanouts                                          ,             8,          8,         .8,
     61, RYWATABE  , STAT, commit cleanouts successfully completed                   ,             8,          8,         .8,
     61, RYWATABE  , STAT, switch current to new buffer                              ,             3,          3,         .3,
     61, RYWATABE  , STAT, shared hash latch upgrades - no wait                      ,             7,          7,         .7,
     61, RYWATABE  , STAT, calls to kcmgcs                                           ,          7320,      7.32k,        732,
     61, RYWATABE  , STAT, calls to kcmgas                                           ,           104,        104,       10.4,
     61, RYWATABE  , STAT, calls to get snapshot scn: kcmgss                         ,           354,        354,       35.4,
     61, RYWATABE  , STAT, redo entries                                              ,         17976,     17.98k,       1.8k,
     61, RYWATABE  , STAT, redo size                                                 ,      22487908,     22.49M,      2.25M, <===
     61, RYWATABE  , STAT, redo synch time                                           ,             2,          2,         .2,
     61, RYWATABE  , STAT, redo synch time (usec)                                    ,         22717,     22.72k,      2.27k,
     61, RYWATABE  , STAT, redo synch time overhead (usec)                           ,            80,         80,          8,
     61, RYWATABE  , STAT, redo synch time overhead count (  2ms)                    ,             1,          1,         .1,
     61, RYWATABE  , STAT, redo synch writes                                         ,             1,          1,         .1,
     61, RYWATABE  , STAT, redo write info find                                      ,             1,          1,         .1,
     61, RYWATABE  , STAT, file io service time                                      ,            20,         20,          2,
     61, RYWATABE  , STAT, file io wait time                                         ,          1723,      1.72k,      172.3,
     61, RYWATABE  , STAT, undo change vector size                                   ,        370988,    370.99k,      37.1k,
     61, RYWATABE  , STAT, no work - consistent read gets                            ,          7401,       7.4k,      740.1,
     61, RYWATABE  , STAT, rollback changes - undo records applied                   ,            42,         42,        4.2,
     61, RYWATABE  , STAT, transaction rollbacks                                     ,            42,         42,        4.2,
     61, RYWATABE  , STAT, immediate (CURRENT) block cleanout applications           ,             1,          1,         .1,
     61, RYWATABE  , STAT, deferred (CURRENT) block cleanout applications            ,             7,          7,         .7,
     61, RYWATABE  , STAT, active txn count during cleanout                          ,           621,        621,       62.1,
     61, RYWATABE  , STAT, cleanout - number of ktugct calls                         ,           621,        621,       62.1,
     61, RYWATABE  , STAT, commit batch/immediate requested                          ,            42,         42,        4.2,
     61, RYWATABE  , STAT, commit immediate requested                                ,            42,         42,        4.2,
     61, RYWATABE  , STAT, commit batch/immediate performed                          ,            42,         42,        4.2,
     61, RYWATABE  , STAT, commit immediate performed                                ,            42,         42,        4.2,
     61, RYWATABE  , STAT, IMU Flushes                                               ,             3,          3,         .3,
     61, RYWATABE  , STAT, IMU undo allocation size                                  ,           144,        144,       14.4,
     61, RYWATABE  , STAT, TBS Extension: tasks created                              ,            14,         14,        1.4,
     61, RYWATABE  , STAT, KTFB alloc req                                            ,            52,         52,        5.2,
     61, RYWATABE  , STAT, KTFB alloc space (block)                                  ,      28966912,     28.97M,       2.9M,
     61, RYWATABE  , STAT, KTFB alloc time (ms)                                      ,        815390,    815.39k,     81.54k,
     61, RYWATABE  , STAT, KTFB apply req                                            ,            10,         10,          1,
     61, RYWATABE  , STAT, KTFB apply time (ms)                                      ,            98,         98,        9.8,
     61, RYWATABE  , STAT, Heatmap BlkLevel Flushed                                  ,             1,          1,         .1,
     61, RYWATABE  , STAT, Heatmap BlkLevel Flushed to BF                            ,             1,          1,         .1,
     61, RYWATABE  , STAT, Heatmap BlkLevel Ranges Flushed                           ,             1,          1,         .1,
     61, RYWATABE  , STAT, table scans (short tables)                                ,            47,         47,        4.7,
     61, RYWATABE  , STAT, table scan rows gotten                                    ,        248879,    248.88k,     24.89k,
     61, RYWATABE  , STAT, table scan blocks gotten                                  ,          7182,      7.18k,      718.2,
     61, RYWATABE  , STAT, table fetch by rowid                                      ,            75,         75,        7.5,
     61, RYWATABE  , STAT, cluster key scans                                         ,            52,         52,        5.2,
     61, RYWATABE  , STAT, cluster key scan block gets                               ,            52,         52,        5.2,
     61, RYWATABE  , STAT, rows fetched via callback                                 ,             1,          1,         .1,
     61, RYWATABE  , STAT, index fetch by key                                        ,            61,         61,        6.1,
     61, RYWATABE  , STAT, index scans kdiixs1                                       ,           128,        128,       12.8,
     61, RYWATABE  , STAT, HSC Heap Segment Block Changes                            ,          5005,      5.01k,      500.5,
     61, RYWATABE  , STAT, Heap Segment Array Inserts                                ,          5000,         5k,        500,
     61, RYWATABE  , STAT, Heap Segment Array Updates                                ,             2,          2,         .2,
     61, RYWATABE  , STAT, sql area evicted                                          ,             4,          4,         .4,
     61, RYWATABE  , STAT, CCursor + sql area evicted                                ,             3,          3,         .3,
     61, RYWATABE  , STAT, session cursor cache hits                                 ,           212,        212,       21.2,
     61, RYWATABE  , STAT, cursor authentications                                    ,             2,          2,         .2,
     61, RYWATABE  , STAT, buffer is pinned count                                    ,             2,          2,         .2,
     61, RYWATABE  , STAT, buffer is not pinned count                                ,           396,        396,       39.6,
     61, RYWATABE  , STAT, workarea executions - optimal                             ,            12,         12,        1.2,
     61, RYWATABE  , STAT, parse count (total)                                       ,           107,        107,       10.7,
     61, RYWATABE  , STAT, parse count (hard)                                        ,            23,         23,        2.3,
     61, RYWATABE  , STAT, execute count                                             ,           234,        234,       23.4,
     61, RYWATABE  , STAT, bytes sent via SQL*Net to client                          ,           195,        195,       19.5,
     61, RYWATABE  , STAT, bytes received via SQL*Net from client                    ,           371,        371,       37.1,
     61, RYWATABE  , STAT, SQL*Net roundtrips to/from client                         ,             1,          1,         .1,
     61, RYWATABE  , STAT, sorts (memory)                                            ,            99,         99,        9.9,
     61, RYWATABE  , STAT, sorts (rows)                                              ,           784,        784,       78.4,
     61, RYWATABE  , TIME, hard parse elapsed time                                   ,         45534,    45.53ms,     4.55ms,      .5%, |          |
     61, RYWATABE  , TIME, repeated bind elapsed time                                ,           387,      387us,     38.7us,      .0%, |          |
     61, RYWATABE  , TIME, parse time elapsed                                        ,         54539,    54.54ms,     5.45ms,      .5%, |@         |
     61, RYWATABE  , TIME, DB CPU                                                    ,        390941,   390.94ms,    39.09ms,     3.9%, |@         |
     61, RYWATABE  , TIME, sql execute elapsed time                                  ,       1569667,      1.57s,   156.97ms,    15.7%, |@@        |
     61, RYWATABE  , TIME, hard parse (sharing criteria) elapsed time                ,          4437,     4.44ms,    443.7us,      .0%, |          |
     61, RYWATABE  , TIME, DB time                                                   ,       1594932,      1.59s,   159.49ms,    15.9%, |@@        |
     61, RYWATABE  , WAIT, Disk file operations I/O                                  ,         12477,    12.48ms,     1.25ms,      .1%, |          |
     61, RYWATABE  , WAIT, Data file init write                                      ,         60417,    60.42ms,     6.04ms,      .6%, |@         |
     61, RYWATABE  , WAIT, control file sequential read                              ,          2118,     2.12ms,    211.8us,      .0%, |          |
     61, RYWATABE  , WAIT, control file parallel write                               ,         30629,    30.63ms,     3.06ms,      .3%, |          |
     61, RYWATABE  , WAIT, buffer busy waits                                         ,        260594,   260.59ms,    26.06ms,     2.6%, |@         |
     61, RYWATABE  , WAIT, log file sync                                             ,         22702,     22.7ms,     2.27ms,      .2%, |          |
     61, RYWATABE  , WAIT, db file sequential read                                   ,          1952,     1.95ms,    195.2us,      .0%, |          |
     61, RYWATABE  , WAIT, db file single write                                      ,          4622,     4.62ms,    462.2us,      .0%, |          |
     61, RYWATABE  , WAIT, SQL*Net message to client                                 ,             3,        3us,       .3us,      .0%, |          |
     61, RYWATABE  , WAIT, SQL*Net message from client                               ,       9412738,      9.41s,   941.27ms,    94.1%, |@@@@@@@@@@|
--  End of Stats snap 1, end=2013-08-29 04:24:03, seconds=10



PL/SQLプロシージャが正常に完了しました。

SQL>

同様のINSERT文を、一時表に対して実行して確認してみます。

SQL> CREATE GLOBAL TEMPORARY TABLE tbl_temp (id number, str char(2000)) ON COMMIT PRESERVE ROWS;

表が作成されました。

SQL> insert into tbl_temp select level, level from dual connect by level <= 10000;

10000行が作成されました。
SQL> @snapper12c stats 10 1 61
Sampling SID 61 with interval 10 seconds, taking 1 snapshots...

-- Session Snapper v3.52 by Tanel Poder @ E2SN ( http://tech.e2sn.com )

----------------------------------------------------------------------------------------------------------------------------------------------------
    SID, USERNAME  , TYPE, STATISTIC                                                 ,         DELTA,     HDELTA, HDELTA/SEC,    %TIME, GRAPH
----------------------------------------------------------------------------------------------------------------------------------------------------
     61, RYWATABE  , STAT, Requests to/from client                                   ,             1,          1,        .09,
     61, RYWATABE  , STAT, opened cursors cumulative                                 ,            10,         10,        .91,
     61, RYWATABE  , STAT, user calls                                                ,             2,          2,        .18,
     61, RYWATABE  , STAT, recursive calls                                           ,            47,         47,       4.27,
     61, RYWATABE  , STAT, session logical reads                                     ,         19780,     19.78k,       1.8k,
     61, RYWATABE  , STAT, CPU used when call started                                ,            13,         13,       1.18,
     61, RYWATABE  , STAT, CPU used by this session                                  ,            15,         15,       1.36,
     61, RYWATABE  , STAT, DB time                                                   ,            27,         27,       2.45,
     61, RYWATABE  , STAT, non-idle wait count                                       ,             1,          1,        .09,
     61, RYWATABE  , STAT, session uga memory                                        ,        516416,    516.42k,     46.95k,
     61, RYWATABE  , STAT, messages sent                                             ,             1,          1,        .09,
     61, RYWATABE  , STAT, session pga memory                                        ,        458752,    458.75k,      41.7k,
     61, RYWATABE  , STAT, enqueue requests                                          ,           748,        748,         68,
     61, RYWATABE  , STAT, enqueue releases                                          ,           744,        744,      67.64,
     61, RYWATABE  , STAT, db block gets                                             ,         17232,     17.23k,      1.57k,
     61, RYWATABE  , STAT, db block gets from cache                                  ,         17232,     17.23k,      1.57k,
     61, RYWATABE  , STAT, db block gets from cache (fastpath)                       ,             8,          8,        .73,
     61, RYWATABE  , STAT, consistent gets                                           ,          2548,      2.55k,     231.64,
     61, RYWATABE  , STAT, consistent gets from cache                                ,          2548,      2.55k,     231.64,
     61, RYWATABE  , STAT, consistent gets pin                                       ,          2516,      2.52k,     228.73,
     61, RYWATABE  , STAT, consistent gets pin (fastpath)                            ,          2516,      2.52k,     228.73,
     61, RYWATABE  , STAT, consistent gets examination                               ,            32,         32,       2.91,
     61, RYWATABE  , STAT, consistent gets examination (fastpath)                    ,            32,         32,       2.91,
     61, RYWATABE  , STAT, logical read bytes from cache                             ,     162037760,    162.04M,     14.73M,
     61, RYWATABE  , STAT, db block changes                                          ,         24818,     24.82k,      2.26k,
     61, RYWATABE  , STAT, consistent changes                                        ,         19757,     19.76k,       1.8k,
     61, RYWATABE  , STAT, change write time                                         ,             2,          2,        .18,
     61, RYWATABE  , STAT, free buffer requested                                     ,          3368,      3.37k,     306.18,
     61, RYWATABE  , STAT, calls to kcmgcs                                           ,          9175,      9.18k,     834.09,
     61, RYWATABE  , STAT, calls to kcmgas                                           ,             4,          4,        .36,
     61, RYWATABE  , STAT, calls to get snapshot scn: kcmgss                         ,            12,         12,       1.09,
     61, RYWATABE  , STAT, redo entries                                              ,          5012,      5.01k,     455.64,
     61, RYWATABE  , STAT, redo size                                                 ,        751380,    751.38k,     68.31k, <==
     61, RYWATABE  , STAT, temp space allocated (bytes)                              ,      28311552,     28.31M,      2.57M,
     61, RYWATABE  , STAT, undo change vector size                                   ,        347016,    347.02k,     31.55k,
     61, RYWATABE  , STAT, no work - consistent read gets                            ,             8,          8,        .73,
     61, RYWATABE  , STAT, active txn count during cleanout                          ,            20,         20,       1.82,
     61, RYWATABE  , STAT, cleanout - number of ktugct calls                         ,            20,         20,       1.82,
     61, RYWATABE  , STAT, IMU Flushes                                               ,             1,          1,        .09,
     61, RYWATABE  , STAT, IMU ktichg flush                                          ,             1,          1,        .09,
     61, RYWATABE  , STAT, KTFB alloc req                                            ,             4,          4,        .36,
     61, RYWATABE  , STAT, KTFB alloc space (block)                                  ,        262144,    262.14k,     23.83k,
     61, RYWATABE  , STAT, KTFB alloc time (ms)                                      ,           212,        212,      19.27,
     61, RYWATABE  , STAT, KTFB apply req                                            ,             4,          4,        .36,
     61, RYWATABE  , STAT, KTFB apply time (ms)                                      ,            43,         43,       3.91,
     61, RYWATABE  , STAT, table scans (short tables)                                ,             1,          1,        .09,
     61, RYWATABE  , STAT, cluster key scans                                         ,             1,          1,        .09,
     61, RYWATABE  , STAT, cluster key scan block gets                               ,             1,          1,        .09,
     61, RYWATABE  , STAT, index fetch by key                                        ,             2,          2,        .18,
     61, RYWATABE  , STAT, index scans kdiixs1                                       ,             7,          7,        .64,
     61, RYWATABE  , STAT, HSC Heap Segment Block Changes                            ,          5000,         5k,     454.55,
     61, RYWATABE  , STAT, Heap Segment Array Inserts                                ,          5000,         5k,     454.55,
     61, RYWATABE  , STAT, session cursor cache hits                                 ,             6,          6,        .55,
     61, RYWATABE  , STAT, buffer is not pinned count                                ,            10,         10,        .91,
     61, RYWATABE  , STAT, workarea executions - optimal                             ,             1,          1,        .09,
     61, RYWATABE  , STAT, parse count (total)                                       ,             4,          4,        .36,
     61, RYWATABE  , STAT, parse count (hard)                                        ,             1,          1,        .09,
     61, RYWATABE  , STAT, execute count                                             ,            10,         10,        .91,
     61, RYWATABE  , STAT, bytes sent via SQL*Net to client                          ,           195,        195,      17.73,
     61, RYWATABE  , STAT, bytes received via SQL*Net from client                    ,           371,        371,      33.73,
     61, RYWATABE  , STAT, SQL*Net roundtrips to/from client                         ,             1,          1,        .09,
     61, RYWATABE  , STAT, sorts (memory)                                            ,             3,          3,        .27,
     61, RYWATABE  , STAT, sorts (rows)                                              ,             1,          1,        .09,
     61, RYWATABE  , TIME, hard parse elapsed time                                   ,          2273,     2.27ms,   206.64us,      .0%, |          |
     61, RYWATABE  , TIME, repeated bind elapsed time                                ,            18,       18us,     1.64us,      .0%, |          |
     61, RYWATABE  , TIME, parse time elapsed                                        ,          2729,     2.73ms,   248.09us,      .0%, |          |
     61, RYWATABE  , TIME, DB CPU                                                    ,        156977,   156.98ms,    14.27ms,     1.4%, |@         |
     61, RYWATABE  , TIME, sql execute elapsed time                                  ,        269177,   269.18ms,    24.47ms,     2.4%, |@         |
     61, RYWATABE  , TIME, DB time                                                   ,        271488,   271.49ms,    24.68ms,     2.5%, |@         |
     61, RYWATABE  , WAIT, SQL*Net message to client                                 ,             4,        4us,      .36us,      .0%, |          |
     61, RYWATABE  , WAIT, SQL*Net message from client                               ,       9623807,      9.62s,   874.89ms,    87.5%, |@@@@@@@@@ |
--  End of Stats snap 1, end=2013-08-29 04:17:25, seconds=11



PL/SQLプロシージャが正常に完了しました。

通常の表(永続表)ではredo sizeが 22.49M でしたが、一時表ではredo sizeが 751.38k に削減されています。

REDO生成量が削減された理由は、一時表領域におけるデータ更新ではREDOが生成されないためです。通常の表はデータを永続表領域に確保しますが、 一時表は一時表領域に確保します。REDO生成量削減によるI/O量削減のトレードオフとして、ロールフォワードができなくなります。したがって、一時表はバックアップからのリカバリにより復元することができません。 ただ、この制約は一般に問題となりません。

Temporay Undo使用時のREDO生成量

次にOracle Database 12c新機能のTemporay Undoを有効にして、REDO生成量を確認します。

SQL> alter session set temp_undo_enabled=true;

セッションが変更されました。

SQL> insert into tbl_temp select level, level from dual connect by level <= 10000;

10000行が作成されました。
SQL> @snapper12c stats 10 1 61
Sampling SID 61 with interval 10 seconds, taking 1 snapshots...

-- Session Snapper v3.52 by Tanel Poder @ E2SN ( http://tech.e2sn.com )

----------------------------------------------------------------------------------------------------------------------------------------------------
    SID, USERNAME  , TYPE, STATISTIC                                                 ,         DELTA,     HDELTA, HDELTA/SEC,    %TIME, GRAPH
----------------------------------------------------------------------------------------------------------------------------------------------------
     61, RYWATABE  , STAT, Requests to/from client                                   ,             1,          1,        .06,
     61, RYWATABE  , STAT, opened cursors cumulative                                 ,             1,          1,        .06,
     61, RYWATABE  , STAT, user calls                                                ,             2,          2,        .13,
     61, RYWATABE  , STAT, recursive calls                                           ,            29,         29,       1.81,
     61, RYWATABE  , STAT, recursive cpu usage                                       ,             1,          1,        .06,
     61, RYWATABE  , STAT, session logical reads                                     ,         19718,     19.72k,      1.23k,
     61, RYWATABE  , STAT, CPU used by this session                                  ,            15,         15,        .94,
     61, RYWATABE  , STAT, DB time                                                   ,            46,         46,       2.88,
     61, RYWATABE  , STAT, non-idle wait count                                       ,             2,          2,        .13,
     61, RYWATABE  , STAT, session uga memory                                        ,        523952,    523.95k,     32.75k,
     61, RYWATABE  , STAT, session pga memory                                        ,        262144,    262.14k,     16.38k,
     61, RYWATABE  , STAT, enqueue requests                                          ,           741,        741,      46.31,
     61, RYWATABE  , STAT, enqueue releases                                          ,           737,        737,      46.06,
     61, RYWATABE  , STAT, db block gets                                             ,         17215,     17.22k,      1.08k,
     61, RYWATABE  , STAT, db block gets from cache                                  ,         17215,     17.22k,      1.08k,
     61, RYWATABE  , STAT, consistent gets                                           ,          2503,       2.5k,     156.44,
     61, RYWATABE  , STAT, consistent gets from cache                                ,          2503,       2.5k,     156.44,
     61, RYWATABE  , STAT, consistent gets pin                                       ,          2502,       2.5k,     156.38,
     61, RYWATABE  , STAT, consistent gets pin (fastpath)                            ,          2502,       2.5k,     156.38,
     61, RYWATABE  , STAT, consistent gets examination                               ,             1,          1,        .06,
     61, RYWATABE  , STAT, consistent gets examination (fastpath)                    ,             1,          1,        .06,
     61, RYWATABE  , STAT, logical read bytes from cache                             ,     161529856,    161.53M,      10.1M,
     61, RYWATABE  , STAT, db block changes                                          ,         24814,     24.81k,      1.55k,
     61, RYWATABE  , STAT, consistent changes                                        ,         24812,     24.81k,      1.55k,
     61, RYWATABE  , STAT, free buffer requested                                     ,          3393,      3.39k,     212.06,
     61, RYWATABE  , STAT, calls to kcmgcs                                           ,          9169,      9.17k,     573.06,
     61, RYWATABE  , STAT, calls to kcmgas                                           ,             1,          1,        .06,
     61, RYWATABE  , STAT, calls to get snapshot scn: kcmgss                         ,             2,          2,        .13,
     61, RYWATABE  , STAT, redo entries                                              ,             1,          1,        .06,
     61, RYWATABE  , STAT, redo size                                                 ,           272,        272,         17,<==
     61, RYWATABE  , STAT, temp space allocated (bytes)                              ,      29360128,     29.36M,      1.84M,
     61, RYWATABE  , STAT, undo change vector size                                   ,        426788,    426.79k,     26.67k,
     61, RYWATABE  , STAT, active txn count during cleanout                          ,             1,          1,        .06,
     61, RYWATABE  , STAT, cleanout - number of ktugct calls                         ,             1,          1,        .06,
     61, RYWATABE  , STAT, IMU Flushes                                               ,             1,          1,        .06,
     61, RYWATABE  , STAT, IMU ktichg flush                                          ,             1,          1,        .06,
     61, RYWATABE  , STAT, HSC Heap Segment Block Changes                            ,          5000,         5k,      312.5,
     61, RYWATABE  , STAT, Heap Segment Array Inserts                                ,          5000,         5k,      312.5,
     61, RYWATABE  , STAT, session cursor cache count                                ,             1,          1,        .06,
     61, RYWATABE  , STAT, workarea executions - optimal                             ,             1,          1,        .06,
     61, RYWATABE  , STAT, parse count (total)                                       ,             1,          1,        .06,
     61, RYWATABE  , STAT, execute count                                             ,             1,          1,        .06,
     61, RYWATABE  , STAT, bytes sent via SQL*Net to client                          ,           195,        195,      12.19,
     61, RYWATABE  , STAT, bytes received via SQL*Net from client                    ,           371,        371,      23.19,
     61, RYWATABE  , STAT, SQL*Net roundtrips to/from client                         ,             1,          1,        .06,
     61, RYWATABE  , STAT, sorts (memory)                                            ,             1,          1,        .06,
     61, RYWATABE  , STAT, sorts (rows)                                              ,             1,          1,        .06,
     61, RYWATABE  , WAIT, Disk file operations I/O                                  ,            66,       66us,     4.13us,      .0%, |          |
     61, RYWATABE  , WAIT, SQL*Net message to client                                 ,             4,        4us,      .25us,      .0%, |          |
     61, RYWATABE  , WAIT, SQL*Net message from client                               ,      16000000,        16s,         1s,   100.0%, |@@@@@@@@@@|
--  End of Stats snap 1, end=2013-08-29 04:20:19, seconds=16



PL/SQLプロシージャが正常に完了しました。

Temporay Undoを有効にしなかったときのredo size 751.38k から、272バイトまで削減されています。

Temporay Undoを有効にして、REDO生成量が削減された理由は、UNDOデータがUNDO表領域に格納されなくなったためです。 Temporay Undoを有効にしない状況でも、一時表領域内のデータ更新についてはREDOは生成されませんが、UNDO表領域におけるデータ更新についてはREDOが生成されます。Temporay Undoを有効にすることで、 UNDO表領域を使用することがなくなり、ひいてはUNDO表領域におけるデータ更新に関わるREDOが生成されなくなるというわけです。

OUIでの日本語の文字化けへの対処例

私はたいてい、日本語表示のトラブルを避けるために、Oracle Universal InstallerをLANG=C(またはLANG=C相当)で起動し、メッセージを英語で表示していました。ただ、スクリーンキャプチャを取得するようになると、表示を日本語にしたくなります。というわけで、LANG=ja_JP.utf8でOracle Linux 6.3 で Patch set 11.2.0.4 のOUIを起動してみたところ、日本語表示がおなじみの「トーフ表示」で文字化けしてしまいました。

oui_11204_tofu.jpg

[oracle@l63x64a lib]$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.3 (Santiago)
[oracle@l63x64a lib]$ cat /etc/oracle-release
Oracle Linux Server release 6.3
[oracle@l63x64a lib]$ echo $LANG
ja_JP.utf8

OUIが使用するjavaをOS標準のOpenJDKに変更する方向でこの問題に対処できたので、対処の一例としてメモしておきます。

[oracle@l63x64a lib]$ which java
/usr/bin/java
[oracle@l63x64a lib]$ ls -l /usr/bin/java
lrwxrwxrwx. 1 root root 22 10月  9 15:47 2012 /usr/bin/java -> /etc/alternatives/java
[oracle@l63x64a lib]$ ls -l /etc/alternatives/java
lrwxrwxrwx. 1 root root 46 10月  9 15:47

OpenJDKのfontconfig.propertiesを準備する

/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/lib/fontconfig.propertiesを作成します。 /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/lib/fontconfig.RedHat.6.properties.src を元に、若干の修正を行いました。

[oracle@l63x64a lib]$ pwd
/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/lib
[oracle@l63x64a lib]$ cat fontconfig.properties
#
# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

# Version

# Uses Fedora 14  fonts and file paths, added VL-gothic
version=1

# Component Font Mappings

dialog.plain.latin-1=DejaVu Sans
#dialog.plain.japanese-x0208=Sazanami Gothic
dialog.plain.japanese-x0208=VL PGothic
dialog.plain.korean=Baekmuk Gulim
  : 
#filename.Sazanami_Gothic=/usr/share/fonts/sazanami/gothic/sazanami-gothic.ttf
#filename.Sazanami_Mincho=/usr/share/fonts/sazanami/mincho/sazanami-mincho.ttf
filename.VL_Gothic=/usr/share/fonts/vlgothic/VL-Gothic-Regular.ttf
#filename.VL_PGothic=/usr/share/fonts/svlgothic/VL-PGothic-Regular.ttf 
filename.VL_PGothic=/usr/share/fonts/vlgothic/VL-Gothic-Regular.ttf <======
  :

なぜか /usr/share/fonts/svlgothic/VL-PGothic-Regular.ttf が存在しなかったため、filename.VL_PGothicを /usr/share/fonts/vlgothic/VL-Gothic-Regular.ttf に向けています。

OUIを-jreLocオプション付きで起動します

OUIにはJREがふくまれており、デフォルトではこのJRE(Java)を使用してOUIが実行されます。今回はJREのフォント設定を調整したかったので、-jreLocオプションでOpenJDKのJRE_HOMEを指定して、OUIを起動し、OpenJDKのJREを使用しました。

[oracle@l63x64a lib]$ ./runInstaller -jreLoc /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/
Oracle Universal Installerを起動中です...

oui_11204.jpg

無事文字化けが解消されました~

参考

  • https://forums.ubuntulinux.jp/viewtopic.php?id=9161

2013年8月28日

Oracle Database Patch Set 11.2.0.4 がリリースされています

Oracle Database Patch Set 11.2.0.4 がリリースされています。 Linux x86_64 向けを見つけられました。探し方が悪いのかもしれませんが、Linux x86向けは見つけられませんでした。

Oracle VMテンプレートについてはLinux x86, Linux x86_64の両方がリリースされていました。

12.1.0.1 DBCA画面キャプチャ - RACデータベースの作成

Oracle Database 12c (12.1.0.1) のRAC データベースを作成したので、DBCAの画面をキャプチャしてみました。 たまにあとから「どういう画面があったかな?」って調べたくなる時があるのです。

dbca_12101_rac_1.jpg

dbca_12101_rac_2.jpg

dbca_12101_rac_3.jpg

dbca_12101_rac_4.jpg

dbca_12101_rac_5.jpg

dbca_12101_rac_6.jpg

dbca_12101_rac_7.jpg

dbca_12101_rac_8.jpg

dbca_12101_rac_9.jpg

dbca_12101_rac_10.jpg

dbca_12101_rac_11.jpg

dbca_12101_rac_12.jpg

dbca_12101_rac_13.jpg

dbca_12101_rac_14.jpg

dbca_12101_rac_15.jpg

dbca_12101_rac_16.jpg

dbca_12101_rac_17.jpg

この間にサマリ画面が表示されますが、なぜかキャプチャできていませんでした。

dbca_12101_rac_18.jpg

dbca_12101_rac_19.jpg

dbca_12101_rac_20.jpg

2013年8月27日

Oracle Database 12c 8ノード RACをOracle VM上に作成

Oracle VM上にOracle Database 12c のVMテンプレートを活用して、Oracle Database 12c 8ノード RACを作成してみました。

Oracle VM 3環境を使用している場合、VMテンプレートを用いたVMの構成は、通常 DeployClusterを使用します。しかし、いくつかの理由により、Dom-0のコマンド操作ならびに自作のシェルスクリプトでVMを構成しました。

一部の作業をシェルスクリプト化していることから、再現可能なレベルでの手順をお伝えすることは難しいですが、大枠の流れは以下の通りになりました。

VMテンプレート 初期構成サービス用の設定ファイルを準備

VMテンプレートに含まれるVMをsingleモードで起動(xm create -c vm.cfg extra=" console=hvc0 single")、するか、仮想ディスクのファイルをkpartxコマンドでマウントするなどして、VM内の初期構成サービス用の設定ファイルを編集および配置する。ランレベル3,5でVMを起動(いわゆる通常の起動)すると、ブート時に初期構成サービスが起動して、初期構成作業が始まってしまうので注意。

  • /etc/sysconfig/ovmd を INITIAL_CONFIG=noに(VM起動時にovmdによる設定処理が起動しないように)。
  • /u01/racovm/netconfig.ini に全ノードのIPアドレス情報などを記載 (netconfig.shによるネットワーク設定に使用される)
  • /u01/racovm/params.ini にOracle Grid Infrastructure, Oracle Databaseの構成情報を記載(buildcluster.shにより使用される)

VM共通に追加したい作業をあらかじめ実施

VM共通に追加したい作業を、VMの複製前にあらかじめ実施しておくと、VMを複製してからそれぞれのVMに実行する手間を省けます。

singleモードで起動して、以下のコマンドを実行して、一旦 VMテンプレート 初期構成サービスを無効化します。

chkconfig boot-line-dbracovm-template-bypass off
chkconfig ovmd off
chkconfig dbracovm-template.init off

この状態で、VM共通に追加したい作業をあらかじめ実施します。私の場合は、以下の作業を実行しました。

  • X-Windowサーバをインストール
    yum groupinstall 'X Window System' 'Desktop' 'General Purpose Desktop' 'Japanese Support'
  • sudo設定を修正(oracle, gridユーザーでのsudo実行設定の制限を弱める)
  • など

OCFS2 reflinkで仮想ディスクファイルをThin Clone

VMテンプレート(1台分の仮想ディスクファイル)を VMの数だけ、Thin Cloneでコピーします。Thin Cloneであるため、使用するディスク容量を節約できます。

共有ディスクを追加

ddコマンドで共有ディスクを追加し、vm.cfgに共有ディスクの接続情報を記載します

VMテンプレートにより若干の違いはあるはずですが、このVMテンプレートを用いてRACを構成する場合、/dev/xvc, /dev/xvd, /dev/xve, /dev/xvf, /dev/xvgの5つの共有ディスクを構成することが原則的に必須になるはずです。

初期構成サービスのオプションを指定してVMを起動する

kernelに渡されるパラメータとして template-reconfig-args=... を指定して、ノード1以外の全ノードを起動します。このtemplate-reconfig-argsの指定は、boot-line-dbracovm-template-bypassサービスを経由して、ovmdサービスに渡され、オプションに応じて初期構成スクリプトが実行するためのものです。オプションを指定しないと、ブート時に指定項目の入力を求められる点に注意が必要です。

-n? オプションは、VM起動時に -n? オプションを指定して /u01/racovm/netconfig.sh コマンドを実行することを指定するものです。下記のようにVMを起動すると、ノード2では/u01/racovm/netconfig.sh -n2が実行されます。 他のノードについても同様です。netconfig.shはnetconfig.iniにしたがい、各VMのネットワーク設定を行うコマンドです。

xm create vm.cfg.2 extra=" console=hvc0 template-reconfig-args='-n2'"
  : 
xm create vm.cfg.8 extra=" console=hvc0 template-reconfig-args='-n8'" 

ノード1以外の全ノードが起動し、ネットワーク設定が完了していることをpingコマンドなどで確認したら、ノード1を起動します。

xm create -c vm.cfg.1 extra=" console=hvc0 template-reconfig-args='-n1 -b'"

template-reconfig-argsに -n1 に加えて-b を指定し、以下の処理が実行されるようにします。

  • /u01/racovm/netconfig.sh -n1
  • /u01/racovm/buildcluster.sh

buildcluster.shは/u01/racovm/params.iniの設定に従い、Oracle Grid Infrastructure, Oracle Databaseの構成を行うスクリプトです。

構成完了!

6コア+HTの物理サーバ上に、各VMに1CPU, メモリ2Gを割り当てる構成として、1時間10分ほどで buildcluster.shの実行が完了しました。(本来であれば、VM起動時に自動的にbuildcluster.shが実行されますが、以下では手動でbuildcluster.shを実行しています)

[root@lc101ru1 ~]# /u01/racovm/buildcluster.sh
Are you sure you want to install RAC Cluster?
Do not run if software is already installed and/or running..  [yes|no]? yes
Invoking on lc101ru1 as root...
   Oracle DB/RAC 12c/11gR2 OneCommand (v2.0.11) for Oracle VM - (c) 2010-2013 Oracle Corporation
   Cksum: [2018127693 489500 racovm.sh] at Fri Aug 23 03:25:41 EDT 2013
   Kernel: 2.6.39-400.109.1.el6uek.x86_64 (x86_64) [1 processor(s)] 1997 MB | xen
   Kit Version: 12.1.0.1.0 (RAC Mode, 8 nodes)
   Step(s): buildcluster

INFO (node:lc101ru1): Skipping confirmation, flag (-s) supplied on command line
2013-08-23 03:25:41:[buildcluster:Start:lc101ru1] Building 12c RAC Cluster
2013-08-23 03:25:42:[setsshroot:Start:lc101ru1] SSH Setup for the root user...

  : 
  
INFO (node:lc101ru1): Running on: lc101ru1 as root: /u01/app/12.1.0/grid/bin/crsctl status resource -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.dg
               ONLINE  ONLINE       lc101ru1                 STABLE
               ONLINE  ONLINE       lc101ru2                 STABLE
               ONLINE  ONLINE       lc101ru3                 STABLE
               ONLINE  ONLINE       lc101ru4                 STABLE
               ONLINE  ONLINE       lc101ru5                 STABLE
               ONLINE  ONLINE       lc101ru6                 STABLE
               ONLINE  ONLINE       lc101ru7                 STABLE
               ONLINE  ONLINE       lc101ru8                 STABLE
ora.LISTENER.lsnr
               ONLINE  ONLINE       lc101ru1                 STABLE
               ONLINE  ONLINE       lc101ru2                 STABLE
               ONLINE  ONLINE       lc101ru3                 STABLE
               ONLINE  ONLINE       lc101ru4                 STABLE
               ONLINE  ONLINE       lc101ru5                 STABLE
               ONLINE  ONLINE       lc101ru6                 STABLE
               ONLINE  ONLINE       lc101ru7                 STABLE
               ONLINE  ONLINE       lc101ru8                 STABLE
ora.asm
               ONLINE  ONLINE       lc101ru1                 STABLE
               ONLINE  ONLINE       lc101ru2                 Started,STABLE
               ONLINE  ONLINE       lc101ru3                 Started,STABLE
               ONLINE  ONLINE       lc101ru4                 Started,STABLE
               ONLINE  ONLINE       lc101ru5                 Started,STABLE
               ONLINE  ONLINE       lc101ru6                 Started,STABLE
               ONLINE  ONLINE       lc101ru7                 Started,STABLE
               ONLINE  ONLINE       lc101ru8                 Started,STABLE
ora.net1.network
               ONLINE  ONLINE       lc101ru1                 STABLE
               ONLINE  ONLINE       lc101ru2                 STABLE
               ONLINE  ONLINE       lc101ru3                 STABLE
               ONLINE  ONLINE       lc101ru4                 STABLE
               ONLINE  ONLINE       lc101ru5                 STABLE
               ONLINE  ONLINE       lc101ru6                 STABLE
               ONLINE  ONLINE       lc101ru7                 STABLE
               ONLINE  ONLINE       lc101ru8                 STABLE
ora.ons
               ONLINE  ONLINE       lc101ru1                 STABLE
               ONLINE  ONLINE       lc101ru2                 STABLE
               ONLINE  ONLINE       lc101ru3                 STABLE
               ONLINE  ONLINE       lc101ru4                 STABLE
               ONLINE  ONLINE       lc101ru5                 STABLE
               ONLINE  ONLINE       lc101ru6                 STABLE
               ONLINE  ONLINE       lc101ru7                 STABLE
               ONLINE  ONLINE       lc101ru8                 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       lc101ru1                 STABLE
ora.c101ru.db
      1        ONLINE  ONLINE       lc101ru1                 Open,STABLE
      2        ONLINE  ONLINE       lc101ru2                 Open,STABLE
      3        ONLINE  ONLINE       lc101ru3                 Open,STABLE
      4        ONLINE  ONLINE       lc101ru4                 Open,STABLE
      5        ONLINE  ONLINE       lc101ru5                 Open,STABLE
      6        ONLINE  ONLINE       lc101ru6                 Open,STABLE
      7        ONLINE  ONLINE       lc101ru7                 Open,STABLE
      8        ONLINE  ONLINE       lc101ru8                 Open,STABLE
ora.cvu
      1        ONLINE  ONLINE       lc101ru1                 STABLE
ora.lc101ru1.vip
      1        ONLINE  ONLINE       lc101ru1                 STABLE
ora.lc101ru2.vip
      1        ONLINE  ONLINE       lc101ru2                 STABLE
ora.lc101ru3.vip
      1        ONLINE  ONLINE       lc101ru3                 STABLE
ora.lc101ru4.vip
      1        ONLINE  ONLINE       lc101ru4                 STABLE
ora.lc101ru5.vip
      1        ONLINE  ONLINE       lc101ru5                 STABLE
ora.lc101ru6.vip
      1        ONLINE  ONLINE       lc101ru6                 STABLE
ora.lc101ru7.vip
      1        ONLINE  ONLINE       lc101ru7                 STABLE
ora.lc101ru8.vip
      1        ONLINE  ONLINE       lc101ru8                 STABLE
ora.oc4j
      1        OFFLINE OFFLINE                               STABLE
ora.scan1.vip
      1        ONLINE  ONLINE       lc101ru1                 STABLE
--------------------------------------------------------------------------------

INFO (node:lc101ru1): For an explanation on resources in OFFLINE state, see Note:1068835.1
2013-08-23 04:35:55:[clusterstate:Time :lc101ru1] Completed successfully in 5 seconds (0h:00m:05s)
2013-08-23 04:35:55:[buildcluster:Done :lc101ru1] Building 12c RAC Cluster
2013-08-23 04:35:56:[buildcluster:Time :lc101ru1] Completed successfully in 4214 seconds (1h:10m:14s)

INFO (node:lc101ru1): This entire build was logged in logfile: /u01/racovm/buildcluster1.log
[root@lc101ru1 ~]#

なかなか壮観でしょ ;-)

仮想環境での多ノードRACといえば・・・

仮想環境での多ノードRACといえば、JPOUGの大島さんです。 Amazon EC2上で16ノード構成のRACを構築されたこともある、多ノードRAC構築の達人です。

いつかOracle VMでも16ノードRACを構成してみたいですね!

2013年8月26日

SQL*Plusのマルチテナント・アーキテクチャ向け拡張

Oracle Databaseエンジニアみんな大好きSQL*Plusで、いくつかのコマンドが マルチテナント・アーキテクチャ向けに拡張されています。

なお、以下の記述における内部的に実行しているコマンドは、SQLトレースを使用して確認しました。

SHOWコマンド

SHOWコマンドにいくつか機能が追加されています。

  • SHOW CON_ID : 現在接続中のコンテナのコンテナIDが表示されます。sys_context('USERENV', 'CON_ID'))の値です。
  • SHOW CON_NAME: 現在接続中のコンテナの名称が表示されます。sys_context('USERENV', 'CON_NAME')) の値です。
  • SHOW PDBS:PDBの一覧が表示されます。V$PDBSの値です。
SQL> SHOW CON_ID

CON_ID
------------------------------
3
SQL> SHOW CON_NAME

CON_NAME
------------------------------
PDB1
SQL> alter session set container=cdb$root;

セッションが変更されました。

SQL> SHOW CON_ID

CON_ID
------------------------------
1
SQL> SHOW CON_NAME

CON_NAME
------------------------------
CDB$ROOT
SQL> SHOW PDBS

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           MOUNTED

startupコマンド

OPENされていない(対応するインスタンスが起動していない)CDBでstartupコマンドを実行すると、従来型データベースと同様にインスタンスが起動して、データベース(=CDB)がOPENされます。

CDBがOPENされた状態でPDBに接続して、startupコマンドを実行すると、PDBがOPENされます。内部的には ALTER PLUGGABLE DATABASE OPEN; が実行されます。 また、CDBに接続した状態でPDBを起動するコマンドとして、startup pluggable database も導入されています。

shutdownコマンド

OPENされている(対応するインスタンスが起動している)CDBでshutdownコマンドを実行すると、従来型データベースと同様にインスタンスが停止して、データベース(=CDB)がCLOSEされます。

CDBがOPENされた状態でPDBに接続して、shutdownコマンドを実行すると、PDBがCLOSEされます。内部的には ALTER PLUGGABLE DATABASE CLOSE; が実行されます。また、shutdown immediateを実行すると、ALTER PLUGGABLE DATABASE CLOSE IMMEDIATE;が実行されれます。

なお、shutdown transactional、shutdown abortは キーワードに対応した処理が実行されません。内部的にはそれぞれ ALTER PLUGGABLE DATABASE CLOSE; 、ALTER PLUGGABLE DATABASE CLOSE IMMEDIATE;が実行されます。

2013年8月23日

PDBで実行できない操作とNONCDB_COMPATIBLEパラメータ

PDBの特性上、実行できないコマンドがいくつかあります。たとえば、 ALTER SYSTEM SWITCH LOGFILE; や ALTER SYSTEM ARCHIVE LOG CURRENT; は、 PDBに接続した状態では実行できず、実行するとエラー 「ORA-65040: プラガブル・データベース内からの操作は許可されていません」 が発生します。

SQL> ALTER SESSION SET CONTAINER=PDB1;

セッションが変更されました。

SQL> SHOW CON_NAME

CON_NAME
------------------------------
PDB1

SQL> ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM SWITCH LOGFILE
*
行1でエラーが発生しました。:
ORA-65040: プラガブル・データベース内からの操作は許可されていません

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
ALTER SYSTEM ARCHIVE LOG CURRENT
*
行1でエラーが発生しました。:
ORA-65040: プラガブル・データベース内からの操作は許可されていません

REDOの管理はCDBレベルで行われることから、ある意味、これは自然な制約ですが、 何らかの理由で、従来のデータベースと同様にPDBでもこれらのコマンドが実行できると嬉しい場合もあるでしょう。 この場合は NONCDB_COMPATIBLE初期化パラメータをtrueに設定します(要再起動)。

SQL> ALTER SYSTEM SET NONCDB_COMPATIBLE=true scope=spfile;

システムが変更されました。

SQL> shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> startup
ORACLEインスタンスが起動しました。

Total System Global Area  626327552 bytes
Fixed Size                  2291472 bytes
Variable Size             473958640 bytes
Database Buffers          146800640 bytes
Redo Buffers                3276800 bytes
データベースがマウントされました。
データベースがオープンされました。
SQL> ALTER SESSION SET CONTAINER=PDB1;

セッションが変更されました。

SQL> SHOW CON_NAME

CON_NAME
------------------------------
PDB1
SQL> ALTER SYSTEM SWITCH LOGFILE;

システムが変更されました。
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

システムが変更されました。

すると、PDBでもALTER SYSTEM SWITCH LOGFILE; や ALTER SYSTEM ARCHIVE LOG CURRENT; が実行できるようになります。

2013年8月22日

リモート接続時のSQL*Loader Express Modeの若干奇妙な挙動

ちょっと余談的な話になりますが、外部表が使えない場合の一例として、SQL*Loaderからインスタンスにリモート接続する場合が挙げられます。SQL*Loaderを実行するのはデータベースサーバではなくてクライアントマシンですので、SQL*Loaderのデータファイル(ロード対象となるフラットファイル)は、クライアントマシンに配置されます。したがって、データファイルが置かれているディレクトリをディレクトリオブジェクトとして定義できません。

でも・・・

[oracle@l63x64b tmp]$ sqlldr rywatabe/rywatabe@C101TMP TABLE=emp

SQL*Loader: Release 12.1.0.1.0 - Production on 火 8月 20 20:34:00 2013

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

エクスプレス・モード・ロードの表: EMP
使用パス:      外部表, DEGREE_OF_PARALLELISM=AUTO

表EMP:
  2行のロードに成功しました。

確認するログ・ファイル:
  emp.log
  emp_%p.log_xt
ロードの詳細を参照してください。
[oracle@l63x64b tmp]$ cat emp.log

SQL*Loader: Release 12.1.0.1.0 - Production on 火 8月 20 20:34:00 2013

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

エクスプレス・モード・ロードの表: EMP
データファイルemp.dat
  不良ファイル:  emp_%p.bad
  廃棄ファイル:  指定なし

 (すべて廃棄できます)

ロード数: ALL
スキップ数: 0
許容エラー数: 50
継続文字:    指定なし
使用パス:      外部表

表EMP、 ロード済 すべての論理レコードから
この表に対する有効な挿入オプション: APPEND

   列名                  位置   長さ  用語暗号化データ型
------------------------------ ---------- ----- ---- ---- ---------------------
EMPNO                              FIRST    *  ,     CHARACTER
ENAME                               NEXT    *  ,     CHARACTER
HIREDATE                            NEXT    *  ,     DATE "RR-MM-DD"
DEPTNO                              NEXT    *  ,     CHARACTER

可能性のある再使用のために生成された制御ファイル:
OPTIONS(EXTERNAL_TABLE=EXECUTE, TRIM=LRTRIM)
LOAD DATA
INFILE 'emp'
APPEND
INTO TABLE EMP
FIELDS TERMINATED BY ","
(
  EMPNO,
  ENAME,
  HIREDATE DATE,
  DEPTNO
)
可能性のある再使用のために生成された制御ファイルの終わり。

一時ディレクトリ・オブジェクトSYS_SQLLDR_XT_TMPDIR_00000がパス/var/tmpに対して作成されました

パラレルDML: ALTER SESSION ENABLE PARALLEL DMLを有効化します

外部表"SYS_SQLLDR_X_EXT_EMP"を作成しています

CREATE TABLE "SYS_SQLLDR_X_EXT_EMP"
(
  "EMPNO" NUMBER(4),
  "ENAME" VARCHAR2(10),
  "HIREDATE" DATE,
  "DEPTNO" NUMBER(2)
)
ORGANIZATION external
(
  TYPE oracle_loader
  DEFAULT DIRECTORY SYS_SQLLDR_XT_TMPDIR_00000
  ACCESS PARAMETERS
  (
    RECORDS DELIMITED BY NEWLINE CHARACTERSET AL32UTF8
    BADFILE 'SYS_SQLLDR_XT_TMPDIR_00000':'emp_%p.bad'
    LOGFILE 'emp_%p.log_xt'
    READSIZE 1048576
    FIELDS TERMINATED BY "," LRTRIM
    REJECT ROWS WITH ALL NULL FIELDS
    (
      "EMPNO" CHAR(255),
      "ENAME" CHAR(255),
      "HIREDATE" CHAR(255)
        DATE_FORMAT DATE MASK "RR-MM-DD",
      "DEPTNO" CHAR(255)
    )
  )
  location
  (
    'emp.dat'
  )
)REJECT LIMIT UNLIMITED

INSERT文を実行してデータベース表EMPをロードしています

INSERT /*+ append parallel(auto) */ INTO EMP
(
  EMPNO,
  ENAME,
  HIREDATE,
  DEPTNO
)
SELECT
  "EMPNO",
  "ENAME",
  "HIREDATE",
  "DEPTNO"
FROM "SYS_SQLLDR_X_EXT_EMP"

外部表"SYS_SQLLDR_X_EXT_EMP"を削除しています

表EMP:
  2行のロードに成功しました。

実行開始火 8月  20 20:34:00 2013
実行終了火 8月  20 20:34:01 2013

実行時間:        00: 00: 00.99
CPU時間 :        00: 00: 00.02
[oracle@l63x64b tmp]$

しれっと正常ロードできてしまいました。でも何かおかしい・・・ もしや、クライアントマシンにあるデータファイルではなくて、データベースサーバにあるデータファイルをロードしているのでは・・・・

というわけで、データベースサーバにあったファイル(/var/tmp/emp.dat)をリネームしてから、再度同じコマンドを実行すると・・・


[oracle@l63x64b tmp]$ sqlldr rywatabe/rywatabe@C101TMP TABLE=emp

SQL*Loader: Release 12.1.0.1.0 - Production on 火 8月 20 20:34:56 2013

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

エクスプレス・モード・ロードの表: EMP
使用パス:      外部表, DEGREE_OF_PARALLELISM=AUTO
SQL*Loader-807: 表をロード中にエラーが発生しました
ORA-29913: ODCIEXTTABLEOPENコールアウトの実行中にエラーが発生しました。
ORA-29400: データ・カートリッジ・エラーが発生しました
KUP-04040: ファイルemp.datがSYS_SQLLDR_XT_TMPDIR_00000で見つかりません

表EMP:
  0行のロードに成功しました。

確認するログ・ファイル:
  emp.log
  emp_%p.log_xt
ロードの詳細を参照してください。
[oracle@l63x64b tmp]$ cat emp.log

SQL*Loader: Release 12.1.0.1.0 - Production on 火 8月 20 20:34:56 2013

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

エクスプレス・モード・ロードの表: EMP
データファイルemp.dat
  不良ファイル:  emp_%p.bad
  廃棄ファイル:  指定なし

 (すべて廃棄できます)

ロード数: ALL
スキップ数: 0
許容エラー数: 50
継続文字:    指定なし
使用パス:      外部表

表EMP、 ロード済 すべての論理レコードから
この表に対する有効な挿入オプション: APPEND

   列名                  位置   長さ  用語暗号化データ型
------------------------------ ---------- ----- ---- ---- ---------------------
EMPNO                              FIRST    *  ,     CHARACTER
ENAME                               NEXT    *  ,     CHARACTER
HIREDATE                            NEXT    *  ,     DATE "RR-MM-DD"
DEPTNO                              NEXT    *  ,     CHARACTER

可能性のある再使用のために生成された制御ファイル:
OPTIONS(EXTERNAL_TABLE=EXECUTE, TRIM=LRTRIM)
LOAD DATA
INFILE 'emp'
APPEND
INTO TABLE EMP
FIELDS TERMINATED BY ","
(
  EMPNO,
  ENAME,
  HIREDATE DATE,
  DEPTNO
)
可能性のある再使用のために生成された制御ファイルの終わり。

一時ディレクトリ・オブジェクトSYS_SQLLDR_XT_TMPDIR_00000がパス/var/tmpに対して作成されました

パラレルDML: ALTER SESSION ENABLE PARALLEL DMLを有効化します

外部表"SYS_SQLLDR_X_EXT_EMP"を作成しています

CREATE TABLE "SYS_SQLLDR_X_EXT_EMP"
(
  "EMPNO" NUMBER(4),
  "ENAME" VARCHAR2(10),
  "HIREDATE" DATE,
  "DEPTNO" NUMBER(2)
)
ORGANIZATION external
(
  TYPE oracle_loader
  DEFAULT DIRECTORY SYS_SQLLDR_XT_TMPDIR_00000
  ACCESS PARAMETERS
  (
    RECORDS DELIMITED BY NEWLINE CHARACTERSET AL32UTF8
    BADFILE 'SYS_SQLLDR_XT_TMPDIR_00000':'emp_%p.bad'
    LOGFILE 'emp_%p.log_xt'
    READSIZE 1048576
    FIELDS TERMINATED BY "," LRTRIM
    REJECT ROWS WITH ALL NULL FIELDS
    (
      "EMPNO" CHAR(255),
      "ENAME" CHAR(255),
      "HIREDATE" CHAR(255)
        DATE_FORMAT DATE MASK "RR-MM-DD",
      "DEPTNO" CHAR(255)
    )
  )
  location
  (
    'emp.dat'
  )
)REJECT LIMIT UNLIMITED

INSERT文を実行してデータベース表EMPをロードしています

INSERT /*+ append parallel(auto) */ INTO EMP
(
  EMPNO,
  ENAME,
  HIREDATE,
  DEPTNO
)
SELECT
  "EMPNO",
  "ENAME",
  "HIREDATE",
  "DEPTNO"
FROM "SYS_SQLLDR_X_EXT_EMP"
SQL*Loader-807: 表をロード中にエラーが発生しました
ORA-29913: ODCIEXTTABLEOPENコールアウトの実行中にエラーが発生しました。
ORA-29400: データ・カートリッジ・エラーが発生しました
KUP-04040: ファイルemp.datがSYS_SQLLDR_XT_TMPDIR_00000で見つかりません


外部表"SYS_SQLLDR_X_EXT_EMP"を削除しています

表EMP:
  0行のロードに成功しました。

実行開始火 8月  20 20:34:56 2013
実行終了火 8月  20 20:34:56 2013

実行時間:        00: 00: 00.45
CPU時間 :        00: 00: 00.03
[oracle@l63x64b tmp]$

今度はエラー。リモート接続でSQL*Loaderを実行しても、データベースサーバ上のデータファイルにアクセスする? この動作・・・・微妙・・・・。

2013年8月21日

外部表が使えない場合のSQL*Loader Express Mode

SQL*Loader Express Modeは、デフォルトでは外部表を使ってデータをロードするようですが、状況によっては外部表が使えない場合もあります。その場合、自動的に外部表を使用しないロード方法(ダイレクトパスのようです)に切り替えて、ロード処理を実行します。なかなか気が利いています。

SQL*Loader実行ユーザーがCREATE ANY DIRECTORYシステム権限を持っていない場合

[oracle@l63x64a tmp]$ sqlldr rywatabe2/rywatabe2 TABLE=emp

SQL*Loader: Release 12.1.0.1.0 - Production on 火 8月 20 20:11:41 2013

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

エクスプレス・モード・ロードの表: EMP
使用パス:      外部表, DEGREE_OF_PARALLELISM=AUTO
SQL*Loader-816: 一時ディレクトリ・オブジェクトSYS_SQLLDR_XT_TMPDIR_00000をファイルemp.datに対して作成中にエラーが発生しました
ORA-01031: 権限が不足しています。
SQL*Loader-579: ロードのディレクト・パスに切替え中
SQL*Loader-583: ダイレクト・パスの切捨て設定を無視し、LDRTRIMの値を使用します
SQL*Loader-584: ダイレクト・パスのDEGREE_OF_PARALLELISM設定を無視し、NONEの値を 使用します
エクスプレス・モード・ロードの表: EMP
使用パス:      ダイレクト

ロードは完了しました。 - 論理レコード件数2

表EMP:
  2行のロードに成功しました。

確認するログ・ファイル:
  emp.log
ロードの詳細を参照してください。
[oracle@l63x64a tmp]$ ls
emp.dat  emp.log  tmp
[oracle@l63x64a tmp]$ cat emp.log

SQL*Loader: Release 12.1.0.1.0 - Production on 火 8月 20 20:11:41 2013

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

エクスプレス・モード・ロードの表: EMP
データファイルemp.dat
  不良ファイル:  emp_%p.bad
  廃棄ファイル:  指定なし

 (すべて廃棄できます)

ロード数: ALL
スキップ数: 0
許容エラー数: 50
継続文字:    指定なし
使用パス:      外部表

表EMP、 ロード済 すべての論理レコードから
この表に対する有効な挿入オプション: APPEND

   列名                  位置   長さ  用語暗号化データ型
------------------------------ ---------- ----- ---- ---- ---------------------
EMPNO                              FIRST    *  ,     CHARACTER
ENAME                               NEXT    *  ,     CHARACTER
HIREDATE                            NEXT    *  ,     DATE "RR-MM-DD"
DEPTNO                              NEXT    *  ,     CHARACTER

可能性のある再使用のために生成された制御ファイル:
OPTIONS(EXTERNAL_TABLE=EXECUTE, TRIM=LRTRIM)
LOAD DATA
INFILE 'emp'
APPEND
INTO TABLE EMP
FIELDS TERMINATED BY ","
(
  EMPNO,
  ENAME,
  HIREDATE DATE,
  DEPTNO
)
可能性のある再使用のために生成された制御ファイルの終わり。

SQL*Loader-816: 一時ディレクトリ・オブジェクトSYS_SQLLDR_XT_TMPDIR_00000をファイルemp.datに対して作成中にエラーが発生しました
ORA-01031: 権限が不足しています。

------------------------------------------------------------------------
SQL*Loader-579: ロードのディレクト・パスに切替え中
SQL*Loader-583: ダイレクト・パスの切捨て設定を無視し、LDRTRIMの値を使用します
SQL*Loader-584: ダイレクト・パスのDEGREE_OF_PARALLELISM設定を無視し、NONEの値を 使用します
------------------------------------------------------------------------

エクスプレス・モード・ロードの表: EMP
データファイルemp.dat
  不良ファイル:  emp.bad
  廃棄ファイル:  指定なし

 (すべて廃棄できます)

ロード数: ALL
スキップ数: 0
許容エラー数: 50
継続文字:    指定なし
使用パス:      ダイレクト

表EMP、 ロード済 すべての論理レコードから
この表に対する有効な挿入オプション: APPEND

   列名                  位置   長さ  用語暗号化データ型
------------------------------ ---------- ----- ---- ---- ---------------------
EMPNO                              FIRST    *  ,     CHARACTER
ENAME                               NEXT    *  ,     CHARACTER
HIREDATE                            NEXT    *  ,     DATE RR-MM-DD
DEPTNO                              NEXT    *  ,     CHARACTER

可能性のある再使用のために生成された制御ファイル:
OPTIONS(DIRECT=TRUE)
LOAD DATA
INFILE 'emp'
APPEND
INTO TABLE EMP
FIELDS TERMINATED BY ","
(
  EMPNO,
  ENAME,
  HIREDATE DATE,
  DEPTNO
)
可能性のある再使用のために生成された制御ファイルの終わり。


表EMP:
  2行のロードに成功しました。
  0行はデータ・エラーのためロードされませんでした。
  0行はWHEN句のエラーのためロードされませんでした。
  0行はすべてのフィールドがNULLのためロードされませんでした。
  日付キャッシュ:
   最大サイズ:      1000
   エントリ :         2
   ヒット    :         0
   ミス  :         0

バインド配列サイズはダイレクト・パスで使用されません。
列配列の行数:     5000
ストリーム・バッファのバイト数:   256000
読取りバッファのバイト数:  1048576

スキップされた論理レコードの合計:           0
読み込まれた論理レコードの合計:             2
拒否された論理レコードの合計:               0
廃棄された論理レコードの合計:        0
SQL*Loaderのメイン・スレッドによってロードされたストリーム・バッファの合計:        1
SQL*Loaderのロード・スレッドによってロードされたストリーム・バッファの合計:        0

実行開始火 8月  20 20:11:41 2013
実行終了火 8月  20 20:11:41 2013

実行時間:        00: 00: 00.55
CPU時間 :        00: 00: 00.02

便利便利。でもこの機能って、10年前ぐらいから存在すべき機能だよね ;-)

2013年8月20日

SQL*Loader Express Modeと外部表

Oracle Database 12cよりSQL*Loader にExpress Modeと呼ばれる制御ファイルなしで データを簡単にローディングできる手段が提供されました。使用方法は簡単でsqlldrにTABLEパラメータを指定するだけです。

SQL> CREATE TABLE EMP
  2  (EMPNO number(4) not null,
  3  ENAME varchar2(10),
  4  HIREDATE date,
  5  DEPTNO number(2));

表が作成されました。
[oracle@l63x64a tmp]$ cat emp.dat
7782,Clark,81-06-09,10
7839,King,81-11-17,12

パラメータ値と同名のテーブルとCSVファイルを用意しておくと、以下のコマンド 一発でロードが可能です。摩訶不思議なSQL*Loadre制御ファイルの文法と格闘しなくてもよいので、 個人的ななかなかうれしい新機能です。

[oracle@l63x64a tmp]$ sqlldr rywatabe/rywatabe TABLE=emp

SQL*Loader: Release 12.1.0.1.0 - Production on 火 8月 20 05:21:15 2013

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

エクスプレス・モード・ロードの表: EMP
使用パス:      外部表, DEGREE_OF_PARALLELISM=AUTO

表EMP:
  2行のロードに成功しました。

確認するログ・ファイル:
  emp.log
  emp_%p.log_xt
ロードの詳細を参照してください。

ログファイルを覗いていみるとちょっと面白いことがわかります。

[oracle@l63x64a tmp]$ cat emp.log

SQL*Loader: Release 12.1.0.1.0 - Production on 火 8月 20 05:24:38 2013

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

エクスプレス・モード・ロードの表: EMP
データファイルemp.dat
  不良ファイル:  emp_%p.bad
  廃棄ファイル:  指定なし

 (すべて廃棄できます)

ロード数: ALL
スキップ数: 0
許容エラー数: 50
継続文字:    指定なし
使用パス:      外部表

表EMP、 ロード済 すべての論理レコードから
この表に対する有効な挿入オプション: APPEND

   列名                  位置   長さ  用語暗号化データ型
------------------------------ ---------- ----- ---- ---- ---------------------
EMPNO                              FIRST    *  ,     CHARACTER
ENAME                               NEXT    *  ,     CHARACTER
HIREDATE                            NEXT    *  ,     DATE "RR-MM-DD"
DEPTNO                              NEXT    *  ,     CHARACTER

可能性のある再使用のために生成された制御ファイル:
OPTIONS(EXTERNAL_TABLE=EXECUTE, TRIM=LRTRIM)
LOAD DATA
INFILE 'emp'
APPEND
INTO TABLE EMP
FIELDS TERMINATED BY ","
(
  EMPNO,
  ENAME,
  HIREDATE DATE,
  DEPTNO
)
可能性のある再使用のために生成された制御ファイルの終わり。

一時ディレクトリ・オブジェクトSYS_SQLLDR_XT_TMPDIR_00000がパス/var/tmpに対して作成されました

パラレルDML: ALTER SESSION ENABLE PARALLEL DMLを有効化します

外部表"SYS_SQLLDR_X_EXT_EMP"を作成しています

CREATE TABLE "SYS_SQLLDR_X_EXT_EMP"
(
  "EMPNO" NUMBER(4),
  "ENAME" VARCHAR2(10),
  "HIREDATE" DATE,
  "DEPTNO" NUMBER(2)
)
ORGANIZATION external
(
  TYPE oracle_loader
  DEFAULT DIRECTORY SYS_SQLLDR_XT_TMPDIR_00000
  ACCESS PARAMETERS
  (
    RECORDS DELIMITED BY NEWLINE CHARACTERSET AL32UTF8
    BADFILE 'SYS_SQLLDR_XT_TMPDIR_00000':'emp_%p.bad'
    LOGFILE 'emp_%p.log_xt'
    READSIZE 1048576
    FIELDS TERMINATED BY "," LRTRIM
    REJECT ROWS WITH ALL NULL FIELDS
    (
      "EMPNO" CHAR(255),
      "ENAME" CHAR(255),
      "HIREDATE" CHAR(255)
        DATE_FORMAT DATE MASK "RR-MM-DD",
      "DEPTNO" CHAR(255)
    )
  )
  location
  (
    'emp.dat'
  )
)REJECT LIMIT UNLIMITED

INSERT文を実行してデータベース表EMPをロードしています

INSERT /*+ append parallel(auto) */ INTO EMP
(
  EMPNO,
  ENAME,
  HIREDATE,
  DEPTNO
)
SELECT
  "EMPNO",
  "ENAME",
  "HIREDATE",
  "DEPTNO"
FROM "SYS_SQLLDR_X_EXT_EMP"

外部表"SYS_SQLLDR_X_EXT_EMP"を削除しています

表EMP:
  2行のロードに成功しました。

実行開始火 8月  20 05:24:38 2013
実行終了火 8月  20 05:24:39 2013

実行時間:        00: 00: 01.02
CPU時間 :        00: 00: 00.03

見ての通りデータファイルが配置されているディレクトリに一時ディレクトリオブジェクトを作成し、データファイルをデータソースに指定した外部表を作成し、INSERT AS SELECTでデータをローディングしているようです。このデータローディング方法の方が、SQL*Loaderダイレクトパスロードよりも高速ということでしょうか? 興味深いためメモしておきます。

2013年8月19日

フラッディングモード対応L2スイッチをOracle Database Firewallに活用する

現在、Ethernetネットワークを構築するために使用されるL2スイッチは、 特定のホスト間で送受信されるパケットを、それらのホストが接続されていない無関係なポートに出力しません。

┌─────────┐        ┌─────┐        ┌──────┐
│                  │ ←── │          │ ←── │            │
│データベースサーバ├────┤ スイッチ ├────┤クライアント│
│                  │ ──→ │          │ ←─→ │            │
└─────────┘        └──┬──┘        └──────┘
                                    │
                                    │
                                    │
                              ┌──┴──┐
                              │          │
                              │          │
                              │          │                          
                              └─────┘

この動作は、不要なパケットの処理にともなう負荷を軽減できるため、 通常の用途においては望ましいですが、何らかの理由で特定のホスト間で 送受信されるパケット通信を覗き見したい場合には問題となります。たとえば、トラブルシュートのため、パケットをキャプチャして詳細な調査をしたい場合などです。

このような場合は、特定のホスト間で送受信されるパケット通信を、それらのホストが接続されていないポートにコピーする機能をもつ特殊なスイッチを使用する必要があります。

このような機能を持つスイッチは、単にパケットをキャプチャするだけではなく、アプリケーションに近い上位の処理を監視するOracle Database Firewallのような製品にも活用できるため、1つあると何かと便利です。

しかし、あまり広く使われる種類の製品ではないため、価格が高価だったり、すでに販売を終了していたりと手ごろに入手できるものを見つけることができず、結果として入手しそびれていました。少し前、あらためて再度探したところ、フラッディングモード機能をもつ安価なスイッチとしてCentreCOM GS905LF を見つけ、購入しました。11,000円~12,000円程度で入手できるのでお勧めです。

なお、このような機能を持つスイッチには、トラフィックをある特定のポートだけにコピーするミラーポート機能を持つスイッチ、全てのトラフィックを全てのポートにコピーするフラッディングモード機能を持つスイッチ の2種類があり、若干動作が異なる点にご注意ください。

┌─────────┐        ┌─────┐        ┌──────┐
│                  │ ←── │          │ ←── │            │
│データベースサーバ├────┤ スイッチ ├────┤クライアント│
│                  │ ──→ │          │ ←─→ │            │
└─────────┘        └──┬──┘        └──────┘
                                    ││
                                    ││copy
                                    │↓
                              ┌──┴──┐
                              │ Oracle   │
                              │ Database │
                              │ Firewall │
                              └─────┘

フラッディングモード機能をもつスイッチを使用して、Oracle Database Firewallを構成した例を示します。 このような構成での使用形態をOracle Database Firewallではアウトオブバンド構成と呼んでいます。

Oracle Database 12c Release 1のOracle VM テンプレートが公開されました

Oracle Database 12c Release 1 の Oracle VM テンプレートが公開されました。

新しい Oracle Database 11g Release 2のOracle VM テンプレートも併せて公開されています。 従来のOracle VM テンプレートはRAC構成のみに対応していましたが、今回リリースされた2つのVMテンプレートはシングル構成にも対応しているようです。(私はまだ未検証。後で検証する予定です)

また、同梱されているPDFファイルには、以下の新機能があると書かれています。

  • Automation support for 12c features:
    • Oracle Flex Cluster and/or Flex ASM (including add/remove N-number of Hub/Leaf nodes)
    • Creation/deletion of Container Database with optional N-number of Pluggable Databases
    • DB Express configuration for database
    • Dedicated ASM Network Interface (1st NIC: Public, 2nd NIC: Private, 3rd NIC: ASM)
    • Database can be created inside an ACFS Filesystem
  • Automation support for Single Instance & Oracle Restart (Formerly known as Single Instance/HA)
  • Automation support for databases on local & shared filesystems
  • Automation support for Admin Managed or Policy Managed database creation
    • Including basic Server Pool creation (for Policy Managed)
  • Allow multiple DNS IPs (see netconfig.txt)
  • Upgraded OS to Oracle Linux 6 Update 4 with OVMAPI support
  • Add OSRevert utility: making switching rpm footprints easier ‘basic’ & ‘db-minimal’ predefined
  • Default kernel boot upgraded to Unbreakable Enterprise Kernel (UEK2) 2.6.39-400
  • Deploycluster for OVM3 environments fully supports Single Instance mode

非常に多様な構成を簡単に作ることができ、特殊な構成に関するサポートに役立ちそうなので、 なるべく早い段階で実際に使ってみたいと考えています。

これらのテンプレートはOVMAPIに対応しているため、OSネットワーク設定の構成とOracleソフトウェアの構成を、DeployCluster.pyを使用してOracle VM Manager経由で起動することができます。手順については、以下が参考になると思います。

DeployCluster.pyに至るまでの手順も省力化してくれると、個人的には嬉しいんですがね・・・

2013年8月16日

Database Firewall インストール後のパスフレーズ入力で「ログイン資格証明が無効です」

Oracle Database Audit Vault and Database Firewallのインストールでハマったのでメモしておきます。

Oracle Database Audit Vault and Database Firewallは、専用のマシンに Oracle Database Audit Vault サーバと Database Firewallをインストールして構成します。 まず、マシンにソフトウェアのDVD-ROMを設置して、Oracle Database Audit Vault サーバと Database Firewallのインストールの初期フェーズの作業をおこないます。ここで任意のパスフレーズを指定します。 そして、インストールの初期フェーズが完了した後で、Webブラウザで管理画面にアクセスします。ここで、先ほど指定したパスフレーズの入力が求められるため入力し、入力したパスフレーズが正しければ、後続の設定フェーズに進むような流れになっています。

しかし、自身のインストール作業において、正しいパスフレーズを入力している(つもり)であるにも関わらず、「ログイン資格証明が無効です」(英語では"Invalid Login Credentials ")といったエラーで、正しく管理画面に進めない事象が発生しました。

dbfw_inital_passphrase.jpg

ここには、ちょっとした罠がありました。Oracle Database Audit Vault と Database Firewall のインストールの初期フェーズで指定するパスフレーズには、アルファベットの大文字、小文字、数字に加えて、カンマ、ピリオド、コロン、プラス、アンダースコアを指定する含める必要があります。私はパスフレーズにプラスを含めていたつもりでいたため、当然ながらパスフレーズを入力する箇所でも、プラスを含めたパスフレーズを入力していました。しかし、エラーで先に進めません。

ふと、あることに気づき、プラスをコロンに置き換えたところ、パスフレーズが正しいとみなされ、先に進むことができました。理由はお分かりでしょうか?

どうやら、インストールの初期フェーズでは、キーボードはUS配列で認識されているように思われます。ご存知の通り、多くの記号類については、JP配列とUS配列でキーの配置が異なります。このため、自身としてはパスフレーズにプラスを含めていたつもりでいたのですが、実際にはコロンが含まれていたというわけです・・・。 同じような作業をなされる方、ご注意ください。

DEDICATED_THROUGH_BROKER_listener_nameでリモート接続時におけるサーバープロセスをマルチスレッド化

THREADED_EXECUTION によるOracleインスタンスのマルチスレッド化では、すべての Oracleプロセスがマルチスレッド化されるわけではありません。バックグラウンドプロセスDBWn、 PMON、 PSP、 VKTMや、リモート接続により生成されたサーバープロセスはマルチスレッド化されません。

[oracle@l63x64a ~]$ sqlplus sys/password as sysdba
  : 
SYS@c101##c101> SELECT s.username,
  2         s.sid,
  3         s.serial#,
  4         p.program,
  5         p.spid,
  6         ps.command,
  7         p.stid
  8  FROM   v$session s,
  9         v$process p, ps
 10  WHERE  s.paddr = p.addr
 11    AND  ps.pid = spid
 12    AND  s.sid = (SELECT distinct sid FROM V$MYSTAT);

USERNAME                SID    SERIAL# PROGRAM                  SPID                     COMMAND                  STID
---------------- ---------- ---------- ------------------------ ------------------------ ------------------------ ------------------------
SYS                      64        339 oracle@l63x64a.domain    13524                    ora_u005_c101            19333

[oracle@l63x64a ~]$ sqlplus sys/oracle@c101 as sysdba
  : 
SYS@c101##c101> SELECT s.username,
  2         s.sid,
  3         s.serial#,
  4         p.program,
  5         p.spid,
  6         ps.command,
  7         p.stid
  8  FROM   v$session s,
  9         v$process p, ps
 10  WHERE  s.paddr = p.addr
 11    AND  ps.pid = spid
 12    AND  s.sid = (SELECT distinct sid FROM V$MYSTAT);

USERNAME                SID    SERIAL# PROGRAM                  SPID                     COMMAND                  STID
---------------- ---------- ---------- ------------------------ ------------------------ ------------------------ ------------------------
SYS                      64        357 oracle@l63x64a.domain    20108                    oraclec101               20108

listener.oraに DEDICATED_THROUGH_BROKER_[リスナー名]=on を指定することで、リモート接続により生成されたサーバープロセスをマルチスレッド化できます。

[oracle@l63x64a ~]$ vi $ORACLE_HOME/network/admin/listener.ora
[oracle@l63x64a ~]$ diff $ORACLE_HOME/network/admin/listener.ora{,.BK}
11d10
< DEDICATED_THROUGH_BROKER_LISTENER=on
[oracle@l63x64a ~]$ lsnrctl reload

LSNRCTL for Linux: Version 12.1.0.1.0 - Production on 05-8月 -2013 03:24:38

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=l63x64a.domain)(PORT=12101)))に接続中
コマンドは正常に終了しました。
[oracle@l63x64a ~]$ sqlplus sys/oracle@c101 as sysdba
  : 
SYS@c101##c101> SELECT s.username,
  2         s.sid,
  3         s.serial#,
  4         p.program,
  5         p.spid,
  6         ps.command,
  7         p.stid
  8  FROM   v$session s,
  9         v$process p, ps
 10  WHERE  s.paddr = p.addr
 11    AND  ps.pid = spid
 12    AND  s.sid = (SELECT distinct sid FROM V$MYSTAT);

USERNAME                SID    SERIAL# PROGRAM                  SPID                     COMMAND                  STID
---------------- ---------- ---------- ------------------------ ------------------------ ------------------------ ------------------------
SYS                      64        361 oracle@l63x64a.domain    13524                    ora_u005_c101            20420

リスナーを再起動せずに設定を反映できるようです。

2013年8月15日

社内検証用Oracle VM環境 を 3.1.xから 3.2.2に移行しました

弊社のx86系プラットフォーム検証環境はOracle VMをベースに構築しています。

上のエントリで書いたとおり、DELL PowerEdge T320という超お値打ちなサーバを見つけ、新規に購入したので、これを機に社内検証用Oracle VM環境 を 3.1.xから 3.2.2に移行しました。(下画面は Oracle VM Server 3.2.2で取得したxentop -fの実行結果。Xen 4.1.30ベースであることがわかります)

ovm322_xentop.jpg

Oracle VM環境をバージョンアップする方法として、マニュアル等で紹介されているバージョンアップ手順に従う方法と、新規に環境をゼロから構築して既存のVMを展開する方法の2つがあります。今回は以下の理由から、新規に環境をゼロから構築して既存のVMを展開する方法を使用することにしました。(過去のバージョンアップでも同様の手順を踏んでいます。)

  • Oracle VMをサポート対象外の使用方法で使用しており、標準のバージョンアップ手順が機能しないことが予想されること
  • 万が一標準のバージョンアップ手順に従った作業の中で、万が一トラブルが発生した場合、サポートを購入していないことから、トラブルシュートに手間取ることが予期されること
  • VM以外の設定(Oracle VM Serverの設定, Oracle VM Managerの設定)は、比較的項目、作業が少なく、再実施してもさほど手間ではないこと

Oracle VM 環境を構築されたことがある方であれば、お分かりかと思いますが、Oracle VM Server, Oracle VM Managerのインストール、設定はさほど面倒なものではありません。このため、問題は既存のVMを新しい環境に展開する点になります。弊社検証環境では、既存のVMをtar.gzで圧縮してバックアップしているため、これを展開し、新しい環境に併せて若干修正することで完了します。基本的には以下の作業が必要になります。

  • tar --sparse -zxvf [VMのtar.gzバックアップ]
  • VM構成ファイル vm.cfg に含まれる 環境依存情報の修正

上記の作業は比較的単純なものですが、すべてのVMに対して実施するのは面倒ですし、ミスを誘発する可能性もあります。実際、弊社検証環境には現在 45 のVMが存在しています。サポート業務を行う関係上、多くのバージョン、バリエーションの環境を保持しておく必要があるため、これだけ多くのVMがある形になっています。

[root@csov32s1 log]# vmlist |wc -l
45
[root@csov32s1 log]# vmlist
/OVS/1/l63x64b/vm.cfg         <= Oracle Database シングル (Oracle Linux 6.3)
/OVS/1/RAC_la205re/vm.cfg.1   <= Oracle Real Application Cluster 10.2.0.5
/OVS/1/RAC_la205re/vm.cfg.2
/OVS/1/RAC_lb106rw/vm.cfg.1   <= Oracle Real Application Cluster 11.1.0.6
/OVS/1/RAC_lb106rw/vm.cfg.2
/OVS/1/RAC_lb107re/vm.cfg.1   <= Oracle Real Application Cluster 11.1.0.7
/OVS/1/RAC_lb107re/vm.cfg.2
/OVS/1/RAC_lb201re/vm.cfg.1   <= Oracle Real Application Cluster 11.2.0.1
/OVS/1/RAC_lb201re/vm.cfg.2
/OVS/1/RAC_lb201ru/vm.cfg.1   <= Oracle Real Application Cluster 11.2.0.1
/OVS/1/RAC_lb201ru/vm.cfg.2
/OVS/1/RAC_lb202ru/vm.cfg.1   <= Oracle Real Application Cluster 11.2.0.2
/OVS/1/RAC_lb202ru/vm.cfg.2
/OVS/1/RAC_lb203ru/vm.cfg.1   <= Oracle Real Application Cluster 11.2.0.3
/OVS/1/RAC_lb203ru/vm.cfg.2
/OVS/2/l54x64a/vm.cfg         <= Oracle Database シングル (Oracle Linux 5.4)
/OVS/2/l54x64b/vm.cfg         <= Oracle Database シングル (Oracle Linux 5.4)
/OVS/2/l63x64a/vm.cfg         <= Oracle Database シングル (Oracle Linux 6.3)
/OVS/2/lb201rst/vm.cfg        <= Oracle Restart 11.2.0.1
/OVS/2/lb202rst/vm.cfg        <= Oracle Restart 11.2.0.2
/OVS/2/RAC_l54sdbx/vm.cfg.1   <= Oracle Real Application Cluster サンドボックス環境
/OVS/2/RAC_l54sdbx/vm.cfg.2
/OVS/2/RAC_l54sdbx/vm.cfg.3
/OVS/2/RAC_l54sdbx/vm.cfg.4
/OVS/2/RAC_la204ru/vm.cfg.1   <= Oracle Real Application Cluster 10.2.0.4
/OVS/2/RAC_la204ru/vm.cfg.2
/OVS/2/RAC_lb203on/vm.cfg.1   <= Oracle RAC One Node 11.2.0.3
/OVS/2/RAC_lb203on/vm.cfg.2   
/OVS/2/RAC_lb203on/vm.cfg.3
/OVS/2/RAC_lb203on/vm.cfg.4
/OVS/3/AVDF_lc10f/vm.cfg.1    <= Oracle Database Firewall 12.1
/OVS/3/AVDF_lc10f/vm.cfg.2
/OVS/3/AVDF_lc10f/vm.cfg.3
/OVS/3/AVDF_lc10f/vm.cfg.4
/OVS/3/c58xxx1/vm.cfg         
/OVS/3/c58my1/vm.cfg          <= MySQL
/OVS/3/c58my2/vm.cfg          <= MySQL
/OVS/3/l54dg1/vm.cfg          <= Oracle DataGuard
/OVS/3/la205gr1/vm.cfg        <= Oracle Enterprise Manager Grid Control 10.2.0.5
/OVS/3/la205gr2/vm.cfg
/OVS/3/lc101cc1/vm.cfg        <= Oracle Enterprise Manager Cloud Control 12.1.0.1
/OVS/3/lc102cc1/vm.cfg        <= Oracle Enterprise Manager Cloud Control 12.1.0.2
/OVS/3/xxx_xxf342/vm.cfg.0
/OVS/3/xxx_xxf342/vm.cfg.1
/OVS/3/xxx_xxf342/vm.cfg.2

移行作業のなかで面倒なのは「VM構成ファイル vm.cfg に含まれる 環境依存情報の修正」する作業なので、 vm.cfgをテンプレート化し、環境依存情報をコマンド1つでinjectできるようにしています。具体的には、以下のようなテンプレートを作成しておき、環境固有の変数値でテンプレート展開して、vm.cfgを作成するようにしています。

[root@csov32s1 log]# cat /OVS/1/RAC_la205re/vm.cfg.IN.1
name = '${VMMODIFIER}${VMMAINNAME}${VMNUM}'
uuid = '${UUID}'
vcpus = 1
memory = 2048
disk = [
'file:${VMROOT}/${VMMAINNAME}${VMNUM}_System.img,xvda,w',
   : 
'file:${VMROOT}/\${VMMAINNAME}_10G_spare2.img,xvdy,w!',
'file:${VMROOT}/\${VMMAINNAME}_10G_spare3.img,xvdz,w!',
]
vif = [
 'mac=xx:xx:xx:xx:${HEXMAC}:00,bridge=${BRIDGE_INTRA}',
 'mac=xx:xx:xx:xx:${HEXMAC}:01,bridge=${BRIDGE_VMPRIV1}',
 'mac=xx:xx:xx:xx:${HEXMAC}:02,bridge=${BRIDGE_VMPUB2}',
 'mac=xx:xx:xx:xx:${HEXMAC}:03,bridge=${BRIDGE_VMPUB3}',
 'mac=xx:xx:xx:xx:${HEXMAC}:04,bridge=${BRIDGE_VMPUB1}',
]
vif_other_config = []
vfb = ['type=vnc, vncunused=0, vnclisten=0.0.0.0, vncdisplay=${VNCPORT},keymap=ja']

bootloader = '/usr/bin/pygrub'
on_reboot = 'restart'
on_poweroff = 'destroy'
on_crash = 'restart'
[root@csov32s1 log]# vmupdatecfg /OVS/1/RAC_la205re/vm.cfg.IN.1
[root@csov32s1 log]# cat /OVS/1/RAC_la205re/vm.cfg.1
name = 'VM066_la205re1'
uuid = '6008a060-0b56-485b-beed-07b0b474689e'
vcpus = 1
memory = 2048
disk = [
'file:/OVS/1/RAC_la205re/la205re1_System.img,xvda,w',
'file:/OVS/1/RAC_la205re/la205re1_Swap.img,xvdb,w',
  : 

このような作業が比較的短時間で、比較的ミスが少なくできるのは、コマンドラインによる操作とスクリプトによる省力化のおかげです。(やっぱり GUI は好きになれません)

THREADED_EXECUTIONでOracleインスタンスをマルチスレッド構成に

Linux/UNIX環境では、Oracleインスタンスはマルチプロセス構成でした。 Oracle Database 12c よりTHREADED_EXECUTION初期化パラメータをONにすることで 一部のプロセスがマルチスレッド構成になります。

みなさんご存知の通り、デフォルトの構成(THREADED_EXECUTION=OFF)では、 1つのバックグラウンドプロセス、サーバープロセスに対して、1つのOSのプロセスが起動します。

SQL> SELECT program, spid, stid FROM V$PROCESS;

PROGRAM                                          SPID                     STID
------------------------------------------------ ------------------------ ------------------------
PSEUDO
oracle@l63x64a.domain (PMON)                     13091                    13091
oracle@l63x64a.domain (PSP0)                     13095                    13095
oracle@l63x64a.domain (VKTM)                     13099                    13099
oracle@l63x64a.domain (GEN0)                     13103                    13103
oracle@l63x64a.domain (MMAN)                     13105                    13105
oracle@l63x64a.domain (TNS V1-V3)                13153                    13153
oracle@l63x64a.domain (DIAG)                     13109                    13109
oracle@l63x64a.domain (DBRM)                     13111                    13111
oracle@l63x64a.domain (DIA0)                     13113                    13113
oracle@l63x64a.domain (DBW0)                     13115                    13115
oracle@l63x64a.domain (LGWR)                     13117                    13117
oracle@l63x64a.domain (CKPT)                     13119                    13119
oracle@l63x64a.domain (SMON)                     13121                    13121
oracle@l63x64a.domain (RECO)                     13123                    13123
oracle@l63x64a.domain (LREG)                     13125                    13125
oracle@l63x64a.domain (MMON)                     13127                    13127
oracle@l63x64a.domain (MMNL)                     13129                    13129
oracle@l63x64a.domain (D000)                     13131                    13131
oracle@l63x64a.domain (S000)                     13135                    13135
oracle@l63x64a.domain (TMON)                     13155                    13155
oracle@l63x64a.domain (TT00)                     13157                    13157
oracle@l63x64a.domain (SMCO)                     13159                    13159
oracle@l63x64a.domain (FBDA)                     13163                    13163
oracle@l63x64a.domain (AQPC)                     13165                    13165
oracle@l63x64a.domain (W000)                     13171                    13171
oracle@l63x64a.domain (CJQ0)                     13193                    13193
oracle@l63x64a.domain (P000)                     13185                    13185
oracle@l63x64a.domain (P001)                     13187                    13187
oracle@l63x64a.domain (P002)                     13189                    13189
oracle@l63x64a.domain (P003)                     13191                    13191
oracle@l63x64a.domain (VKRM)                     13239                    13239
oracle@l63x64a.domain (QM02)                     13229                    13229
oracle@l63x64a.domain (Q002)                     13234                    13234
oracle@l63x64a.domain (Q003)                     13237                    13237

35行が選択されました。

SQL> host ps  -e -o pid,ppid,command  |grep $ORACLE_SID |grep -v grep
13091     1 ora_pmon_c101
13095     1 ora_psp0_c101
13099     1 ora_vktm_c101
13103     1 ora_gen0_c101
13105     1 ora_mman_c101
13109     1 ora_diag_c101
13111     1 ora_dbrm_c101
13113     1 ora_dia0_c101
13115     1 ora_dbw0_c101
13117     1 ora_lgwr_c101
13119     1 ora_ckpt_c101
13121     1 ora_smon_c101
13123     1 ora_reco_c101
13125     1 ora_lreg_c101
13127     1 ora_mmon_c101
13129     1 ora_mmnl_c101
13131     1 ora_d000_c101
13135     1 ora_s000_c101
13153 11667 oraclec101 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
13155     1 ora_tmon_c101
13157     1 ora_tt00_c101
13159     1 ora_smco_c101
13163     1 ora_fbda_c101
13165     1 ora_aqpc_c101
13171     1 ora_w000_c101
13185     1 ora_p000_c101
13187     1 ora_p001_c101
13189     1 ora_p002_c101
13191     1 ora_p003_c101
13193     1 ora_cjq0_c101
13229     1 ora_qm02_c101
13234     1 ora_q002_c101
13237     1 ora_q003_c101
13239     1 ora_vkrm_c101

SQL> host ps  -e -o pid,ppid,command  |grep $ORACLE_SID |grep -v grep | wc -l
34

ここで、Oracle Database 12c R1より導入された初期化パラメータ THREADED_EXECUTION を ONにしてインスタンスを再起動すると、マルチスレッド構成が有効になります。

SQL> alter system set THREADED_EXECUTION=TRUE scope=spfile;

システムが変更されました。

SQL> shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> startup
ORACLEインスタンスが起動しました。

Total System Global Area  417546240 bytes
Fixed Size                  2289064 bytes
Variable Size             331350616 bytes
Database Buffers           79691776 bytes
Redo Buffers                4214784 bytes
データベースがマウントされました。
データベースがオープンされました。

SQL> SELECT program, spid, stid FROM V$PROCESS;

PROGRAM                          SPID     STID
-------------------------------- -------- --------
PSEUDO
oracle@l63x64a.domain (PMON)     13508    13508
oracle@l63x64a.domain (PSP0)     13510    13510
oracle@l63x64a.domain (VKTM)     13514    13514
oracle@l63x64a.domain (GEN0)     13518    13520
oracle@l63x64a.domain (SCMN)     13518    13518
oracle@l63x64a.domain (MMAN)     13518    13521
oracle@l63x64a.domain (TMON)     13524    13557
oracle@l63x64a.domain (DIAG)     13524    13526
oracle@l63x64a.domain (SCMN)     13524    13524
oracle@l63x64a.domain (DBRM)     13518    13527
oracle@l63x64a.domain (DIA0)     13524    13528
oracle@l63x64a.domain (DBW0)     13530    13530
oracle@l63x64a.domain (LGWR)     13518    13531
oracle@l63x64a.domain (CKPT)     13518    13532
oracle@l63x64a.domain (SMON)     13518    13533
oracle@l63x64a.domain (RECO)     13524    13534
oracle@l63x64a.domain (LREG)     13518    13535
oracle@l63x64a.domain (MMON)     13524    13536
oracle@l63x64a.domain (MMNL)     13524    13537
oracle@l63x64a.domain (D000)     13524    13539
oracle@l63x64a.domain (S000)     13524    13541
oracle@l63x64a.domain (N000)     13524    13542
oracle@l63x64a.domain            13524    725
oracle@l63x64a.domain (TT00)     13524    13558
oracle@l63x64a.domain (SMCO)     13524    13559
oracle@l63x64a.domain (FBDA)     13524    13560
oracle@l63x64a.domain (AQPC)     13524    13563
oracle@l63x64a.domain (W000)     13524    14831
oracle@l63x64a.domain (CJQ0)     13524    13576
oracle@l63x64a.domain (P000)     13524    13570
oracle@l63x64a.domain (P001)     13524    13571
oracle@l63x64a.domain (P002)     13524    13572
oracle@l63x64a.domain (P003)     13524    13573
oracle@l63x64a.domain (QM02)     13524    13604
oracle@l63x64a.domain (VKRM)     13524    13595
oracle@l63x64a.domain (W001)     13524    16107
oracle@l63x64a.domain (Q002)     13524    13606
oracle@l63x64a.domain (Q003)     13524    13607
oracle@l63x64a.domain (W002)     13524    19930
oracle@l63x64a.domain (W004)     13524    27371
oracle@l63x64a.domain (W005)     13524    27494
oracle@l63x64a.domain (W003)     13524    20055
oracle@l63x64a.domain (W006)     13524    2636
oracle@l63x64a.domain (W007)     13524    2767
oracle@l63x64a.domain (J000)     13524    8442
oracle@l63x64a.domain (J001)     13524    8443

47行が選択されました。
  • 同じ V$PROCESS SPID列の値を持つ複数のOracleプロセスがあることから、同一のOSプロセス内に複数のOracleプロセスが存在することがわかります。(マルチスレッド構成)
  • V$PROCESSにSTIDという列が追加されており、この値でOSのスレッドIDを確認できます。
SQL> host ps  -e -o pid,ppid,command  |grep $ORACLE_SID |grep -v grep

13508     1 ora_pmon_c101
13510     1 ora_psp0_c101
13514     1 ora_vktm_c101
13518     1 ora_u004_c101
13524     1 ora_u005_c101
13530     1 ora_dbw0_c101

SQL> host ps  -e -o pid,ppid,command  |grep $ORACLE_SID |grep -v grep | wc -l
6

SQL> host ps  -e -o pid,ppid,lwp,command -L  |grep $ORACLE_SID |grep -v grep

13508     1 13508 ora_pmon_c101
13510     1 13510 ora_psp0_c101
13514     1 13514 ora_vktm_c101
13518     1 13518 ora_u004_c101
13518     1 13519 ora_u004_c101
13518     1 13520 ora_u004_c101
13518     1 13521 ora_u004_c101
13518     1 13527 ora_u004_c101
13518     1 13531 ora_u004_c101
13518     1 13532 ora_u004_c101
13518     1 13533 ora_u004_c101
13518     1 13535 ora_u004_c101
13524     1 13524 ora_u005_c101
13524     1 13525 ora_u005_c101
13524     1 13526 ora_u005_c101
13524     1 13528 ora_u005_c101
13524     1 13534 ora_u005_c101
13524     1 13536 ora_u005_c101
13524     1 13537 ora_u005_c101
13524     1 13539 ora_u005_c101
13524     1 13541 ora_u005_c101
13524     1 13542 ora_u005_c101
13524     1 13557 ora_u005_c101
13524     1 13558 ora_u005_c101
13524     1 13559 ora_u005_c101
13524     1 13560 ora_u005_c101
13524     1 13563 ora_u005_c101
13524     1 13570 ora_u005_c101
13524     1 13571 ora_u005_c101
13524     1 13572 ora_u005_c101
13524     1 13573 ora_u005_c101
13524     1 13576 ora_u005_c101
13524     1 13595 ora_u005_c101
13524     1 13604 ora_u005_c101
13524     1 13606 ora_u005_c101
13524     1 13607 ora_u005_c101
13524     1 14831 ora_u005_c101
13524     1 16107 ora_u005_c101
13524     1 19930 ora_u005_c101
13524     1 20055 ora_u005_c101
13524     1 27371 ora_u005_c101
13524     1 27494 ora_u005_c101
13524     1   725 ora_u005_c101
13524     1  2636 ora_u005_c101
13524     1  2767 ora_u005_c101
13524     1  8442 ora_u005_c101
13524     1  8443 ora_u005_c101
13530     1 13530 ora_dbw0_c101

SQL> host ps  -e -o pid,ppid,lwp,command -L  |grep $ORACLE_SID |grep -v grep |wc -l
48
  • バックグラウンドプロセス DBWn、 PMON、 PSP、 VKTMについては、従来同様シングルスレッド構成であることがわかります。
  • 上記以外のOracleプロセスがora_unnn_[$ORACLE_SID] というOSプロセス内のOSスレッドとして起動されていることがわかります。

注意点

THREADED_EXECUTION=ONとすると、OS認証を用いた接続ができなくなります。OS認証を用いた接続は、SYSユーザーでのローカル接続で非常によく使用される接続形態であるため、この制限については注意が必要です(というか、私が最初試したとき、この制限に引っかかって少し焦りました・・・)

[oracle@l63x64a ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on 月 8月 5 02:06:14 2013

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

ERROR:
ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。


ユーザー名を入力してください:
[oracle@l63x64a ~]$ sqlplus sys/password as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on 月 8月 5 02:06:18 2013

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



Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
に接続されました。
SQL>

少し考察

動作としては上記のとおりですが、THREADED_EXECUTION初期化パラメータをONにすることに よるマルチスレッド構成の意味ははっきりとつかみにくい気がします。というのも、プロセスの代わりにスレッドを使用するメリットが分かりにくいためです。プロセスの代わりにスレッドを使用しても、CPUのコンテキストスイッチは発生します。同一のプロセス内のスレッド間のタスク切り替えであれば、メモリ空間の切り替えが不要になるというメリットはありますが、効果は若干疑問です。

もう少し調べてみます。

下記のps2は、psコマンドの実行結果を外部表として参照できるようにしたものです。 ps2外部表とV$PROCESSをスレッドIDで結合して、OSスレッドとOracleプロセスの対応を確認しています。

SQL> SELECT program, spid, stid, COMMAND,lwp FROM V$PROCESS pr FULL OUTER JOIN ps2
  ON pr.stid = ps2.lwp;
PROGRAM                          SPID     STID     COMMAND                     LWP
-------------------------------- -------- -------- -------------------- ----------
oracle@l63x64a.domain (PMON)     13508    13508    ora_pmon_c101             13508
oracle@l63x64a.domain (PSP0)     13510    13510    ora_psp0_c101             13510
oracle@l63x64a.domain (VKTM)     13514    13514    ora_vktm_c101             13514
oracle@l63x64a.domain (SCMN)     13518    13518    ora_u004_c101             13518
                                                   ora_u004_c101             13519
oracle@l63x64a.domain (GEN0)     13518    13520    ora_u004_c101             13520
oracle@l63x64a.domain (MMAN)     13518    13521    ora_u004_c101             13521
oracle@l63x64a.domain (DBRM)     13518    13527    ora_u004_c101             13527
oracle@l63x64a.domain (LGWR)     13518    13531    ora_u004_c101             13531
oracle@l63x64a.domain (CKPT)     13518    13532    ora_u004_c101             13532
oracle@l63x64a.domain (SMON)     13518    13533    ora_u004_c101             13533
oracle@l63x64a.domain (LREG)     13518    13535    ora_u004_c101             13535
oracle@l63x64a.domain (SCMN)     13524    13524    ora_u005_c101             13524
                                                   ora_u005_c101             13525
oracle@l63x64a.domain (DIAG)     13524    13526    ora_u005_c101             13526
oracle@l63x64a.domain (DIA0)     13524    13528    ora_u005_c101             13528
oracle@l63x64a.domain (RECO)     13524    13534    ora_u005_c101             13534
oracle@l63x64a.domain (MMON)     13524    13536    ora_u005_c101             13536
oracle@l63x64a.domain (MMNL)     13524    13537    ora_u005_c101             13537
oracle@l63x64a.domain (D000)     13524    13539    ora_u005_c101             13539
oracle@l63x64a.domain (S000)     13524    13541    ora_u005_c101             13541
oracle@l63x64a.domain (N000)     13524    13542    ora_u005_c101             13542
oracle@l63x64a.domain (TMON)     13524    13557    ora_u005_c101             13557
oracle@l63x64a.domain (TT00)     13524    13558    ora_u005_c101             13558
oracle@l63x64a.domain (SMCO)     13524    13559    ora_u005_c101             13559
oracle@l63x64a.domain (FBDA)     13524    13560    ora_u005_c101             13560
oracle@l63x64a.domain (AQPC)     13524    13563    ora_u005_c101             13563
oracle@l63x64a.domain (P000)     13524    13570    ora_u005_c101             13570
oracle@l63x64a.domain (P001)     13524    13571    ora_u005_c101             13571
oracle@l63x64a.domain (P002)     13524    13572    ora_u005_c101             13572
oracle@l63x64a.domain (P003)     13524    13573    ora_u005_c101             13573
oracle@l63x64a.domain (CJQ0)     13524    13576    ora_u005_c101             13576
oracle@l63x64a.domain (VKRM)     13524    13595    ora_u005_c101             13595
oracle@l63x64a.domain (QM02)     13524    13604    ora_u005_c101             13604
oracle@l63x64a.domain (Q002)     13524    13606    ora_u005_c101             13606
oracle@l63x64a.domain (Q003)     13524    13607    ora_u005_c101             13607
oracle@l63x64a.domain (W000)     13524    14831    ora_u005_c101             14831
oracle@l63x64a.domain (W001)     13524    16107    ora_u005_c101             16107
oracle@l63x64a.domain (W002)     13524    19930    ora_u005_c101             19930
oracle@l63x64a.domain (W003)     13524    20055    ora_u005_c101             20055
oracle@l63x64a.domain (W004)     13524    27371    ora_u005_c101             27371
oracle@l63x64a.domain (W005)     13524    27494    ora_u005_c101             27494
oracle@l63x64a.domain            13524    725      ora_u005_c101               725
oracle@l63x64a.domain (W006)     13524    2636     ora_u005_c101              2636
oracle@l63x64a.domain (W007)     13524    2767     ora_u005_c101              2767
oracle@l63x64a.domain (J000)     13524    8442     ora_u005_c101              8442
oracle@l63x64a.domain (J001)     13524    8443     ora_u005_c101              8443
oracle@l63x64a.domain (DBW0)     13530    13530    ora_dbw0_c101             13530
PSEUDO

49行が選択されました。

1つのora_unnn_[$ORACLE_SID]プロセスに対して、1つずつOracleプロセスに割り当てられてないOSスレッドがあることがわかります。役割は謎です。将来的な新規接続に備えて、スレッドをプーリングしているのかと思ったのですが、違うようです。何かわかったらblogに書きたいと思います。

2013年8月14日

Oracle VMテンプレートを使用してOracle Enterprise Manager Cloud Control 12c Release 3 (12.1.0.3)をインストール

すでにご存じかと思いますが、Oracle Database 12c では、Oracle Enterprise Manager Database Controlが廃止されています。代替ツールとしてOracle Enterprise Manager Express が提供されていますが、機能はかなり限定されています。このため、今後、Oracle Databaseの管理という観点では、Oracle Enterprise Manager Cloud Controlの重要性が増すことが予想されます。

と考えていたところ、Oracle Enterprise Manager Cloud Controlの新バージョン Oracle Enterprise Manager Cloud Control 12c Release 3 (12.1.0.3) がリリースされ、さらに、Oracle VMのテンプレートがリリースされたとのことで、さっそく導入してみました。

cc12103_welcome.jpg

弊社検証環境ではOracle VMを Xen-likeに使用しているので、vm.cfgを用意してxm createでVMを起動してやります。すると、OSのシステムサービスとして構成済みであるテンプレートウィザード(/etc/rc.d/init.d/oraclevm-template)が起動します。ウィザードに従い、IPアドレスなど基本的な設定を入力すると、自動的にリポジトリDBを含めたOEM環境が構成され、簡単に環境を構築できます。以下はテンプレートウィザードのメイン処理部分のログです。

[root@lc103cc1 log]# cat /var/log/emgc_clone.log

=================Oracle DB clone log at Tue Aug  6 06:16:55 EDT 2013================:



 Setting up the DB, OMS and Agent on the same Guest.

Do you want to enable dynamic IP configuration (DHCP) (Y|n)?Configuring network setting .
A static IP address is recommended.
Enter IP address:[] <== 入力
Enter netmask address:[] <== 入力
Enter hostname(e.g, host.domain.com):[localhost.localdomain] <== 入力
Enter default gateway IP address:[] <== 入力
Enter DNS server IP address:[] <== 入力
Restarting networking...

Shutting down interface eth0:                              [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:                                [  OK  ]

================================================
 Start cloning Oracle Database 11.2.0.3.0
================================================
Running /u01/OracleHomes/db11g/product/11.2.0/dbhome_1/root.sh
Performing root user operation for Oracle 11g

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/OracleHomes/db11g/product/11.2.0/dbhome_1

Enter the full pathname of the local bin directory: [/usr/local/bin]:    Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...


Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Finished product-specific root actions.
Starting listener...

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 06-AUG-2013 07:07:02

Copyright (c) 1991, 2011, Oracle.  All rights reserved.

Starting /u01/OracleHomes/db11g/product/11.2.0/dbhome_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 11.2.0.3.0 - Production
System parameter file is /u01/OracleHomes/db11g/product/11.2.0/dbhome_1/network/admin/listener.ora
Log messages written to /u01/OracleHomes/db11g/diag/tnslsnr/lc103cc1/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=lc103cc1.domain)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.3.0 - Production
Start Date                06-AUG-2013 07:07:03
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/OracleHomes/db11g/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File         /u01/OracleHomes/db11g/diag/tnslsnr/lc103cc1/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=lc103cc1.domain)(PORT=1521)))
The listener supports no services
The command completed successfully
Starting database .....

SQL*Plus: Release 11.2.0.3.0 Production on Tue Aug 6 07:07:03 2013

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

Connected to an idle instance.

SQL> ORACLE instance started.

Total System Global Area 1068937216 bytes
Fixed Size                  2235208 bytes
Variable Size             415237304 bytes
Database Buffers          645922816 bytes
Redo Buffers                5541888 bytes
Database mounted.
Database opened.
SQL>
System altered.

SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

===================================================================================
Oracle Database 11.2.0.3.0 started successfully at
Tue Aug  6 07:07:11 EDT 2013
Database infomation:
  ORACLE_BASE = /u01/OracleHomes
  ORACLE_HOME = /u01/OracleHomes/db11g/product/11.2.0/dbhome_1
  ORACLE_SID = emrepus
===================================================================================

Running /allroot.sh

Starting to execute allroot.sh .........

Starting to execute /u01/OracleHomes/Middleware/oms/root.sh ......
Running Oracle 11g root.sh script...

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/OracleHomes/Middleware/oms

Enter the full pathname of the local bin directory: [/usr/local/bin]: The file "dbhome" already exists in /usr/local/bin.  Overwrite it? (y/n)
[n]:    Copying dbhome to /usr/local/bin ...
The file "oraenv" already exists in /usr/local/bin.  Overwrite it? (y/n)
[n]:    Copying oraenv to /usr/local/bin ...
The file "coraenv" already exists in /usr/local/bin.  Overwrite it? (y/n)
[n]:    Copying coraenv to /usr/local/bin ...

Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
/etc exist

Creating /etc/oragchomelist file...
/u01/OracleHomes/Middleware/oms
Finished execution of  /u01/OracleHomes/Middleware/oms/root.sh ......


Starting to execute /u01/OracleHomes/agent/core/12.1.0.3.0/root.sh ......
Finished product-specific root actions.
/etc exist
Finished execution of  /u01/OracleHomes/agent/core/12.1.0.3.0/root.sh ......

Starting Enterprise Manager Management Server .....

Oracle Enterprise Manager Cloud Control 12c Release 3
Copyright (c) 1996, 2013 Oracle Corporation.  All rights reserved.
Starting Oracle Management Server...
Starting WebTier...
WebTier Successfully Started
Oracle Management Server Successfully Started
Oracle Management Server is Up

Starting Enterprise Manager Management Agent .....

Oracle Enterprise Manager Cloud Control 12c Release 3
Copyright (c) 1996, 2013 Oracle Corporation.  All rights reserved.
Starting agent .................... started.
Changing password for user root.
passwd: all authentication tokens updated successfully.
Changing password for user oracle.
passwd: all authentication tokens updated successfully.






Installation details of EM12cR3 (12.1.0.3.0) .....

EM url: https://lc103cc1.domain:7799/em
Ports used by this deployment at /u01/OracleHomes/Middleware/oms/install/portlist.ini
Database 11.2.0.3.0 location: /u01/OracleHomes/db11g
Database name:                emrepus
EM Middleware Home location:  /u01/OracleHomes/Middleware
EM Agent Home location:       /u01/Oraclehomes/agent/core/12.1.0.3.0

This information is also available in the file /home/oracle/README.FIRST


To start all processes, as the user oracle, run the script /home/oracle/start_all.sh
To stop all processes, as the user oracle, run the script /home/oracle/stop_all.sh

従来のバージョンでは Oracle Database や WLSの管理パスワードを入力したり、OCMに関する質問にこたえる必要が あったような気がしますが、12.1.0.3.0のテンプレートのデプロイではこれらの質問がありませんでした。手順がかなり簡略化されているようです。

OSユーザーのパスワードやそのほかのパスワードについては、VMテンプレートを 配布しているSoftware Delovery CloudのページにあるREADMEに記載されているので、 こちらを忘れずにチェックしましょう。

oracleユーザーのUID

個人的にはoracleユーザーのUIDは500が好みで、可能な限りこの値に統一してあるのですが、 テンプレートでインストールするとUIDは54321になっていました。

[oracle@lc103cc1 ~]$ id
uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba) context=root:system_r:unconfined_t:SystemLow-SystemHigh
emcc.example.com?

使ってみた限りでは、OMSを配置したホストについて、emcc.example.com というホスト名で名前解決できないと、適切に機能しないように見えます。

例えば、OEMにターゲットを追加すると、以下のエラーが発生して追加できませんでした。

add_target_emcc_example_com.jpg

また、実は最初VMテンプレートをデプロイしたとき、emcc.example.comというホスト名の 名前解決に失敗したというエラーメッセージが表示され、Oracle Enterprise Managerを使用することができませんでした。このときは、インターネットにアクセスできない構成でインストールしていました。これが問題であり、インターネットにアクセスできれば、emcc.example.comというホストは使われることはないと思っていたのですは、そのようなことではないようです。

emcc.example.com というホスト名で名前解決できるようにするためと思われますが、OMSを配置したホストの/etc/hostsに emcc.example.com に関するエントリが追加されているようでした。(記憶が怪しいですが、手編集では追加していないはず・・・)

ターゲットの追加については、ターゲットとなるホストの/etc/hostsに emcc.example.com に関するエントリを追加することで対処できました。 同様のトラブルに出くわした方への参考になると幸いです。

2013年8月13日

12c非推奨機能Streamsがひっそりと11g Platinumの試験範囲対象外になっていた

12c非推奨機能Streamsがひっそりと11g Platinumの試験範囲対象外になっていた

でも触れさせていただきましたが、Oracle Database 12cでは Oracle Streams は非推奨扱いになっています。

上記でインパクトが大きいのはOracle Streams、Advanced Replicationが非推奨扱いになったことでしょうか。いますぐ使用できなくなることはないとはいえ、Oracle GoldenGateへの移行には、Oracle GoldenGateの使用を前提とした設計作業、ならびにアプリケーション、運用の仕組みにおける実装の変更が必要です。計画的なOracle GoldenGateへの移行が求められます。

ただし、「非サポート」ではなく、あくまでも「非推奨」扱いに過ぎないことに注意してください。Oracle Database 12cでも Oracle Streamsは問題なく使用できます。もしかすると、Oracle Database 13(c?)でも使用できるかもしれません。ここでの「非推奨」扱いは、「今後、オラクルはOracle GoldenGate押しで行きますよ!」というメッセージであると受け取るのが適切でしょう。

で、表題の話に戻るのですが、このStreams機能、ひっそりと11g Platinumの試験範囲対象外になっていることに気づきました。まぁ、「非推奨」扱いの機能を試験範囲に含めておくわけにはいかないでしょうからね・・・当然といえば当然ですが。

* 注意:「表データの変更の取得と伝播のためのOracle Streamsの使用」は、 7/16以降の環境では出題トピックから除外されます。

RMANでSQLが実行可能に - 12c R1の地味な機能改善

Oracle Database 12cの「地味な」改善点を1つご紹介します。

RMANでSQLが実行可能になりました。

実は過去のバージョンでも一部のSQLコマンドについては実行が可能でした。たとえば、 ALTER DATABASE OPEN や ALTER DATABASE MOUNTなどです。 しかし、ALTER SYSTEM文や、SELECT文についてはRMANから実行できなかったため、 これらのSQLコマンドを実行したい場合は無理やり sql '...'として括って実行するか、

RMAN> SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';

一旦RMANセッションを抜けるか別セッションを使って、SQL*Plusでインスタンスに接続してSQLコマンドを実行する必要がありました。

また、SELECT文については、実行結果を受け取る方法がなかったため、RMANから一切実行することができませんでした。

Oracle Database 12c Release 1ではこの制約が取り除かれたので、RMANから以下のようにコマンドを実行することができます!

RMAN> alter system set db_recovery_file_dest_size = 10G;

文が処理されました

RMAN> select * from V$instance;

INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------
HOST_NAME
----------------------------------------------------------------
VERSION           STARTUP_ STATUS       PAR    THREAD# ARCHIVE LOG_SWITCH_WAIT
----------------- -------- ------------ --- ---------- ------- ---------------
LOGINS     SHU DATABASE_STATUS   INSTANCE_ROLE      ACTIVE_ST BLO     CON_ID
---------- --- ----------------- ------------------ --------- --- ----------
INSTANCE_MO EDITION
----------- -------
FAMILY
--------------------------------------------------------------------------------
              1 c101cdb
l63x64a.domain
12.1.0.1.0        13-08-02 OPEN         NO           1 STARTED
ALLOWED    NO  ACTIVE            PRIMARY_INSTANCE   NORMAL    NO           0
REGULAR     EE

About 2013年8月

2013年8月にブログ「コーソル DatabaseエンジニアのBlog」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2013年7月です。

次のアーカイブは2013年9月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。