2011年10月26日

Oracle Database 11g R2にPSRが出てたみたいです

いまさら感が漂う記事で恐縮です。

今日のお題は、PSRについてです。

いわゆるパッチと言われるものには、CPU(Critical Patch Updates)というものがよくリリースされていますが、時々、まとまった形のPSR(Patch Set Release)という、Windows的にいうと、サービスパックのようなものがリリースされます。

すでに運用に回しているデータベースに対して、これらを当てることはかなりの危険を伴うので、あまりやらない+やるならバックアップを入念に取る必要があります。

今回は、社内で、新しいプロダクトのテストをするというので、使用するOracleのバージョンを最新にしておこうと思い、調べてみたら意外と苦労したので、メモ代わりに記載します。

 

PSRやCPUなどは、パッチ番号というもので、support.oracle.com内を検索することが出来ます。

逆に、パッチ番号が分かっていないと、検索が難航します。

まずは、パッチ番号を調べる癖をつけておくとよいでしょう。

パッチ番号:10098816 は、PSR11.2.0.2.0用の番号になります。(これを調べるのに苦労しました・・・)

 

インストールの仕方は、ちょっと調べてみると出てくると思いますが、11gR2(11.2.0.2)の資料は、以下にあります。

http://blogs.oracle.com/oracle4engineer/entry/oracle_database_11gr211202psr

 

現時点での最新版は、11.2.0.3.0のようですが、まだWindows版のリリースはされていませんでした。

 

今回思ったのは、support.oracle.comが結構使いにくいので、なんとかならないのかなぁということ。

慣れれば使いやすいんでしょうが、いまいち使い方がわかっていないので、苦しいです。

やりかたを知っている人がいたら紹介してください(泣

posted by magics at 19:36| Comment(0) | TrackBack(0) | Oracle

2011年09月13日

Oracle Standby Databaseで表領域を増やす時のお作法

久しぶりにOracleの話題です。

 

OracleでStandby Databaseを組んでいる場合において、表領域を追加しました。

よくあるオペレーションではありますが、気をつけておかないと、スタンバイ側のDBに対してアーカイブログが適用できない状態に陥るので、注意が必要です。

 

プライマリ側で表領域を追加したところ、以下のようなエラーがスタンバイ側で発生しました。

SQL> recover standby database;
ORA-00283: エラーによってリカバリ・セッションは取り消されました。
ORA-01111: データファイル名5が不明です。 -
正しいファイルに名前を変更する必要があります。
ORA-01110: データファイル5:
'D:\APP\XXXXXXXX\PRODUCT\11.2.0\DBHOME_1\DATABASE\UNNAMED0XXXX'
ORA-01157: データファイル5を識別/ロックできません -
DBWRトレース・ファイルを参照してください
ORA-01111: データファイル名5が不明です。 -

ログを読めば、そのままですが、データファイルが作成できないため、表領域ファイルが迷子になっています。

こういう場合は、v$datafileの内容を確認します。(以下は抜粋)

SQL> select name, status from v$datafile;

NAME                                                  STATUS
--------------------------------------------------------------

D:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\UNNAMED0XXXX       RECOVER

データファイルがRECOVER状態ので、これを復帰させます。

といっても、今回は表領域を作成したので、表領域を作成してあげます。 このとき、AS句を使って、データファイルのリンク付けをしてあげます。

SQL> alter database create datafile 'D:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_
1\DATABASE\UNNAMED0XXXX' as 'D:\app\Administrator\oradata\orcl\EDMS_API.DBF';

あとは、通常通り、recover standby databaseをすればOKです。

 

どうして、こんなことになるのかというと、Standby Databaseの設定で、standby_file_managementというものがあります。

http://download.oracle.com/docs/cd/E16338_01/server.112/b56311/initparams247.htm

詳しい話はリンク先を見てもらうとして、、、

おおまかな内容としては、OSファイルの追加と削除に関わる部分は、手動で行うようにデフォルト設定されています。

もし、プライマリ側と自動で同じ状態にしたい場合は、あらかじめ、

SQL> alter system set standy_file_management=auto scope=both;

を実行しておくとよいでしょう。

posted by magics at 13:58| Comment(0) | TrackBack(0) | Oracle

2011年07月04日

Oracleの通信ポートを固定したい

さて、今日のトラブルは、久々のOracleさん登場です。

私がOracleを理解していないのが原因なのでしょうが、結構ひどい目に遭うことが多いです。

 

まずは、現象についてご説明しましょう。

よくある、WEB/DBサーバー間にファイアウォールを設置して運用しているパターンなのですが、WEBサーバーから突然接続できなくなります。

WEBサーバー側には、ORA-12514(10gで経験)やORA-03135(11gで経験)が発生しているようです。

 

ここまで説明すれば、ピンと来る人もいるでしょう。

 

実は、FireWallにSonicwall製のものを使用している場合は、(機種によって違いがあるかも知れませんが)デフォルトで5分の無通信期間が発生すると、セッションを強制的に切断します。

設定値は「TCP 接続無動作時タイムアウト」で設定されているので、コンソールから確認できます。

この機能は、ファイアウォールからすれば、当然の機能なのですが、ポートが固定になっていないアプリケーションにとっては、トラブルの引き金になる可能性があります。

Oracleでは、ポート1521を使用しますが、デフォルトの動作では、ポートがリダイレクトされるされるようです。

 

そこで設定するのが、「USE_SHARED_SOCKET」というパラメータ

Windows版はレジストリに、Unix系は環境変数に設定するものだそうです。

参考

http://kozhouse.homeip.net/TIPS/firewall/

 

では、私が動かしている、Windows Server 2008 R2 on 11gR2では、どのように設定するのか?

 

基本は、他のバージョンと同じでよいようです。

 

[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0]に

USE_SHARED_SOCKET="TRUE"(REG_SZ)を追加すればOKです。

 

HOME0は、場合によっては、「KEY_OraDb11g_home1」などになっているかも知れません。これは、インストール時の状況によって異なると思われます。

私の場合は、

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_OraDb11g_home1]

でした。 (OSが64ビットだから?)

image

ちゃんと設定できているか、まだ検証していませんが、今のところは大丈夫みたいです。

 

※レジストリをいじる場合は、バックアップを取ろう! くれぐれも自己責任で!

posted by magics at 21:47| Comment(0) | Oracle

2011年03月30日

Oracle地獄 再起動したら起動しない!?

地震で被災された方々におかれましては、大変な日々を送られているかと思います。

月並みではありますが、一日も早いご回復をお祈りしています。

 

地震の影響が、あらゆるところで出ていますが、幸いにして我が家は無事でした。

 

とはいえ、こういうときにトラブルは憑きもの

遭遇した現象をご紹介しよう思います。(正しい対策を知っている人がいたら是非教えてください)

 

Windows 2008 R2 + Oracle 11g R2 Standard Edition One(11.2.0.1.0)の組み合わせで動かしているサーバーが2台あり、1台をプライマリサーバー、1台を基本スタンバイサーバーとして稼働させています。

基本スタンバイサーバーのメモリ使用量が90%を超えているので、おかしいなと思い、再起動しました。

 

すると、起動してきません。

 

えぇっと・・・ なんでだーー!?

 

よくよく見ると、なんとかログインまではいけます。

ログインしてみましたが、デスクトップが表示されてきません。

試しにタスクマネージャーを起動してみると、Oracleのインスタンスが大量にメモリを食っています。

コレが原因かと思い、とりあえず止めてみたら、デスクトップが表示されました。

 

調べてみたら、Enterprise Managerのインスタンスが悪さをしているみたいなので、このサービスを無効化してから再起動したらうまく起動してきました。

 

バグか何かなんでしょうが・・・さっぱり訳が分かりません。

 

Enterprise Managerは使うことはないと思うので、このまま様子見としようと思っています。

posted by magics at 21:52| Comment(0) | TrackBack(0) | Oracle

2010年11月16日

Oracleデータベースの文字コードセット変換

データベースサーバーリプレースに伴い、内部データも移行することになったのですが、EUCで作られているデータベースをSJISTILDEへ変換して移行することになりました。

 

っていうか、なんでWindowsなのにEUC・・・という突っ込みはさておいて、移行手順について、覚え書きしておきます。

 

exp/impで移行するので、手順は簡単。 NLS_LANGを設定してからexpするだけ。

こうすることで、エクスポートファイルが、NLS_LANGの設定に従ってエクスポートされます。

たたいたコマンドも以下に載せておきます。

set NLS_LANG=Japanese.JAPAN.JA16SJISTILDE

exp ***/*** file=***

 

基本的に、データベース自体の文字コードセット変換はできないようで、今回のEUC->SJISのようなケースでは、エクスポートインポートを使うのが通例のようです。

文字コード変換用のツールもあるようなのですが、SJIS->UTFのような変換にしか対応していないようなので、文字コードの設定にはくれぐれも気をつけましょう。

posted by magics at 10:45| Comment(0) | TrackBack(0) | Oracle

2010年10月25日

Oracle 複数インスタンス環境でのsqlplus

ひさびさにOracleに関する記事です。

 

オラクルマスターの方にとってみれば、「あたりまえじゃん」と言われてしまいそうな内容ですが、以外とはまっている方もいるかも知れませんので、記載してみたいと思います。

 

事の発端は、開発用サーバー(W2k3 R2 + Oracle10g2R)で、セッション数が足りないから増やしてくれと頼まれたことでした。

spfileを書き換えようと、pfileの書き出し->編集->spfile書き戻し->shutdown immediateをやったら、なぜかサーバーにsqlplusで接続できなくなりました。

たぶん、spfileを作るときにキー文句を間違えたか何かしたんだろうと思い、再出力するためにサーバーにsqlplusで接続しようとしたとき、ORA-12514が発生しました。

 

えーっと・・・もしかして本格的に壊した?(滝汗

なんと言っても、アイドルインスタンスに接続できないのが、やばい。

 

といったところで、開発サーバーなのでバックアップもとっていない(!)とのこと。どうやって復旧させたものやら・・・と思案していたら、とりあえず変更前のinit.oraから起こすことを思いつきました。

やり方は簡単。 %ORACLE_HOME%\database\SPFILE[oracle_sid].ORAファイルを削除するだけ。

Windowsサービスから強制的に再起動してやることで復旧できました。(あとで、spfileも復元)

こんな単純なことで・・・orz  まだまだ修行が足りませんね・・・

 

とりあえず復旧したのはいいのですが、ORA-12514が発生した理由が解せません。

翌日、仮想にOracleを立てて作業をトレースしてみたら、再現しました。

なんでだと、いろいろ調べていたら、sqlplusの使い方に問題があったようです。

 

そもそも、Oracleデータベースに触る方法として提供されているsqlplusは、TCP/IPプロトコル、IPCプロトコルなどの接続形態があるようで、接続方法は、tnsname.oraで決めることができます。

TCP/IP経由でアクセスする場合は、アイドルインスタンスに接続することができない制約があります。(当然といえば当然)

このとき発生するエラーがORA-12514ということになります。

 

もし、同一サーバー内に複数のインスタンスのデータベースが存在する場合は、

set ORACLE_SID=[oracle_sid]

と事前に環境変数にセットしてからsqlplusで接続するか、tnsname.oraにIPC経由の項目を登録すると回避できます。

 

くだらない事とは言え、久々に触るといろんな罠があるので、書き留めなければと思った次第。

posted by magics at 16:09| Comment(0) | TrackBack(0) | Oracle

2010年09月15日

Oracle 11gからパスワード有効期限が追加されている

最近、Windows関連の話題が続いたので、たまにはOracleで困ったことについて、書こうと思います。

 

昨日の夜、後輩とこんなやりとりをしました。

後輩「先輩、知ってます? Oracle 11gからユーザーのパスワードに有効期限が着いたらしいですよ。」

私「なんだって!知らなかったよ。有効期限が来たら接続できなくなるの?」

後輩「えぇ、私のテスト環境では、有効期限が切れてるとかいうエラーがでて接続できなくなります。」

私「それはまずいねぇ・・・」

後輩「このサイトをみてください」

Oracle 11gからデフォルトでパスワード有効期限付きに

 

ってことで、11gからデフォルトでパスワードが有効期限付きになるらしいです。

 

この設定は、プロファイル単位で保持されているので、設定を確認したところ、確かに、180日に設定されていました。

これをUNLIMITEDに変えてあげれば、とりあえず安心っぽいですね。

調べる場合は、以下のSQLを投げてやると、分かると思います。

SQL> SELECT * FROM DBA_PROFILES WHERE PROFILE = 'DEFAULT';
 
パスワード周りは、セキュリティ対策としては必要なんでしょうが、意外とはまる罠だと思います・・・
 
 
posted by magics at 11:02| Comment(0) | TrackBack(0) | Oracle

2010年08月23日

Oracle 10g でのexpdpでexcludeオプションを利用する

Oracleデータベースの論理バックアップ(エクスポート)に利用されるコマンドにexpdp/impdpがあります。

解説されているサイトは他にたくさんあるので、ここでは割愛したいと思いますが、ちょっとはまった事があるので、書いておきます。

 

Oracle 10gでexpdpを使うことができますが、このコマンドのオプションにexcludeというものがあります。

このオプションは、エクスポートする内容にexcludeで指定したテーブルやらビューやらを含めないようにするという代物ですが、11gで使用するものと指定の仕方が若干異なります。

以下に、統計情報STATISTICを除外してエクスポートするコマンドを並べてみます。

 

Oracle 10g

expdp scott/tiger EXCLUDE=TABLE:\"LIKE \'%STATISTIC%\'\"

Oracle 11g

expdp scott/tiger EXCLUDE=STATISTIC

 

excludeオプションに10gではLIKE句を使用して指定しているのに対し、11gでは単に対象とするテーブルの一部を書けばよいようになっています。

 

とはいえ、あまり使う場面はないかも。。。

posted by magics at 14:42| Comment(0) | TrackBack(0) | Oracle