Oracle


2016年9月28日

Oracle Databaseをクラウドで利用する方法

今日、Windowsから始めるOracleCloud-Oracle IaaSの使い方 のセミナーに参加してきた。
Oracleはクラウド(とりわけIaaS分野)で完全に後発組になってしまっていて、あまりメリットが打ち出せていないように感じる。
Azureもまずまずだが、AWS一人勝ちの様相が強いように思う。
最近は、コスト面でもだいぶ頑張ってきていることと、アジアにリージョンを設ける話が出てきているようで、レイテンシが改善できる点は今後利用していく上で評価できる。

1.IaaS環境でOracle Databaseをセットアップする
  メリット:ライセンスを持ち込みできる、パラメータのカスタマイズが容易
  デメリット:構築にかかるコスト、時間がオンプレミスと同等

2.PaaS環境でOracle Databaseを利用する
  メリット:最適なパラメータの状況で利用できる
  デメリット:(システム移行において、非互換を避けるために)古いバージョンを利用することが出来ない

PaaS環境だと下記が考えられる
Amazon RDS for Oracle Database
価格表:https://aws.amazon.com/jp/rds/oracle/pricing/

Oracle Database Service
価格表:https://cloud.oracle.com/ja_JP/opc/database/pricing
メリット:最新バージョン(12cR2)が利用できる

2011年4月17日

Oracle Master Database 11g Bronze(1Z0-018:Bronze DBA11g)

を受験した。

「徹底攻略ORACLE MASTER Bronze DBA11g教科書[1Z0-018]対応 (ITプロ/ITエンジニアのための徹底攻略)」を隅々まで解いたこともあって、正解率75%で「1Z0-051 11gSQL基礎I」よりも簡単に合格することができ、1Z0-051とあわせてOracle Master Database 11g Bronze認定となった。

できれば、Oracle Databaseを自分の環境にインストールして、Enterprise Managerのインターフェイスは一通り触っておくとよいと思う。

把握しておくべき部分は次の通り。
・ブロック、エクステント、セグメントの違い
・データベースバッファキャッシュ、共有プール、ラージプールの違い
・SQLチューニング・アドバイザとSQLアクセス・アドバイザの違い
・完全リカバリと不完全リカバリ(Point in Time)の違い
・一貫性バックアップと非一貫性バックアップの違い

2011年4月 7日

Oracle Master Database 11g Bronze(1Z0-051:SQL基礎I)

を今日オンラインで受験した。

結果は、69点で何とか合格した。
SQL基礎だが、Oracle Database専用の文法などもあり、テクニカルエンジニア(データベース)を持っていても全く歯が立たない。

王道は、問題集を解きながら、実際にOracle Databaseを触るしかないというのが結論。

Oracle Master Bronze認定となるためには、1Z0-018J DBA 11gも合格しなければならない。

ORDER BY句におけるNULLの順番について

Mysqlでは、昇順(ASC)でORDER BYするとNULLは先頭に来る。降順の場合には、最後に来る。順番を逆にしたい場合には、COALESCE(列名, 型の最大値)を指定するなどの対応が必要である

一方で、Oracle Database 11gでは、昇順(ASC)でORDER BYするとNULLは最後に来る。降順の場合には、最初に来る。順番を逆にしたい場合には、NULLS FIRSTもしくはNULLS LASTを指定すればよい。

2009年3月 1日

処理時間の長いSQLを確認する

SELECT CPU_TIME, SQL_TEXT FROM V$SQL WHERE CPU_TIME > 0 ORDER BY CPU_TIME DESC;

CPU_TIMEはCPUの処理時間でマイクロ秒で返ってくる。
これが大きいものがたくさんあるとCPU使用率は高い状態となる。

2008年5月10日

登録されているテーブルスペースの一覧を取得する

テーブルスペースの名称とパスを取得したいとき
select TABLESPACE_NAME,FILE_NAME from dba_data_files;

一時テーブルスペースの名称とパスを取得したいとき
select TABLESPACE_NAME,FILE_NAME from dba_temp_files;

IMP-00013: DBAのみ別のDBAがエクスポートしたファイルをインポートできます。

エラーのメッセージをそのまま読んでもよくわからないエラーメッセージで??になったが、要するに「impコマンドにて接続しようとしたユーザーではDBA権限がないから取り込めませんよ!」というエラーです。

つまり
imp username/password file=importfile
でエラーが出るのであれば、
grant dba to username;
をsysユーザーで実行する必要がある。

2008年2月22日

ORA-12518: TNS:listener could not hand off client connection

生肉さんの暇潰し@hatenaがとても役に立つ。

Windowsではoracle.exeのプロセスが1つしかないため、SGA領域を大きく取ろうとするとこのエラーが起こる。アプリケーションサーバー再起動時にエラーがすぐ起こればよいが、接続数が多くなってきたときにこのエラーが起こると運用上問題があるので、SGA領域を変更するのであれば、十分な設計が必要。

パフォーマンスモニタでカウンタの追加を行い、
パフォーマンスオブジェクト Process
カウンタ Virtual Bytes
インスタンス oracle
で2GBを超えるかどうかで判断。

チューニングすべきパラメータはSGA_TARGET, PGA_AGGREGATE_TARGETであり、通常はOracle Enterprise Managerを利用して変更できる。コマンドラインから変更する方法については、Oracle管理者のためのSQLリファレンスが詳しい。

2008年1月18日

SQLコマンド一覧(データベース停止編)

#SQL*Plusへのログイン
sqlplus sys/(password) as sysdba

#データベースの停止。ユーザーによるデータベースからの切断を待って終了。
shutdown normal

#TRANSACTIONALモードによるデータベースの停止。トランザクションの完了を待って終了。
shutdown transactional

#データベースの停止(即時停止)。コミットされていないトランザクションはすべてロールバックされるが、リカバリは不要
shutdown immediate

#強制終了によるデータベースの停止。インスタントリカバリの修復が必要。
shutdown abort

詳しくは@ITを参照してください。

2008年1月15日

OracleInstanceClientの登録エラー

ODBCにてOracleInstanceClientを登録しようとして完了ボタンを押すと
「ODBC ドライバのセットアップ プログラムを読み込むことができませんでした (エラーコード126)」が発生することがある。これはsystem32フォルダ内にmfc71.dllおよびmsvcp71.dllがないことが原因であるので、これらのDLLファイルをコピーして登録するとエラーが発生しないようになる。

2008年1月 9日

ORA-28000 the account is locked

アカウントがロックされていて利用できないので、sysもしくはsystemでログインし
select username, account_status, lock_date from dba_users;
で ACCOUNT_STATUS を確認する。
なお、
alter user (username) account unlock;
でアカウントを解除できる。

2007年10月 2日

リモートのOracle DatabaseにSQLPlusから接続する

リモートのOracle DatabaseにSQLPlusから接続する方法について2通りある。

1.sqlplus (username)/(password)@(ネットサービス名)
リモートのリスナー名の登録は、Net Configuration Assistantを使って以下の手順にて登録できる。
(1)ローカル・ネット・サービス名構成を選んで次へを押す
(2)追加を選んで次へを押す
(3)サービス名にリモートのOracle Databaseがインストールされたマシンで登録済みのネットサービス名を入力し次へを押す
(4)プロトコルを選んで次へを押す
(5)ホスト名にIPアドレスを入力して次へを押す
(6)テストして登録を完了する

2.sqlplus (username)/(password)@(IPアドレス):1521/(ネットサービス名)
ここのネットサービス名はリモートのOracle Databaseがインストールされたマシンで登録済みのネットサービス名となる。1の方法でつないだ場合に「リスナーは接続記述子でリクエストされたサービスを現在認識していません」が表示される場合には、この方法を試して、リモートサーバーへまず接続できるかどうか試してみると良い。但し、Oracle 10g以降でサポートされた書式なので、9i以前では使用できない。

ORA-12638: 資格証明の取出しに失敗しました

データベースインストール時に発生した問題。インストレーションガイドが役に立ちます。

TNSリスナーサービスが権限不足で起動できないために起こり、
ORA-24323: 値が許可されていません。
ORA-28547: サーバーへの接続が失敗しました。Oracle Netの管理エラーの可能性があります。
についてもあわせてエラーが表示されました。

もしAdministratorグループに所属していないユーザーにて実行している場合には、Administratorグループによるインストールを試してみると解決するかもしれません。(僕の場合には解決しました)

2007年7月 3日

インスタンスが突然停止する

Oracle Databaseでインスタンスが突然停止してしまう問題が発生した。

原因は、Redoログが別のプロセスによってロックされてしまったためにロールバックに失敗して異常停止になったようだが、データベースが突然停止するなんていうのを始めて目の当たりにしただけにショックが大きい。

結局別プロセスというのがシステムのバックアップソフトだったわけだけど、バックアップでRedoログを取得するなんていうのは珍しい話ではないだけに、トランザクションが常時利いているOracle Databaseは意外なところで弱いのかもしれない。

2007年5月31日

ウェーブ・ダッシュ(~)が文字化けする

文字コード設定をJA16SJISもしくはJA16EUCに設定した状態でUnicodeへの変換をどこかでやっていたりするとウェーブダッシュなどの文字が化けてしまう。これは、「~」という文字などがSJISとUnicodeのマッピングがOracleとMicrosoftの間で異なっているためだそうで。。。

これを解決する方法として、R9.0.1.4からJA16SJISTILDEやJA16EUCTILDEといったキャラクタセットが用意されているらしい。

詳しくはOracleのドキュメントが参考になる。

2007年5月24日

表領域を物理的に削除したときに発生するORA-01110

そんなときはこのサイトが参考になりましたが、こんな強引な削除は運用上よくありませんので、やらないことが懸命ですね。

MS-DOSプロンプトから
sqlplus /nolog
connect sys/(sysパスワード) as sysdba
alter database datafile '(表領域のパス)' offline drop;
recovery database;
shutdown;
startup;

※ファイル名が分からなければとりあえず、connectした後にstartupしてエラーを出せば分かります。
僕の場合には、
データベースがマウントされました。
ORA-01157: データファイル5を識別/ロックできません -
DBWRトレース・ファイルを参照してください
ORA-01110: データファイル5: '(DBFファイルのパス)
と表示されました。

なお、表領域はネットワークドライブ上には作れないらしいので容量が少ないときの回避策には使えないですね。

2007年4月12日

SELECTの結果をテキストに保存する

SQL*Plusを利用してクエリ結果を保存したり、予約文字になっている&を利用するためのテクニックについて。→SQL*Plusの色々な技

2007年3月16日

ORA-01033 ORACLE initialization or shutdown in progress

メモリ割り当てに失敗しているときに発生する。

一般的に、SGA(システムグローバル領域)とPGA(プログラムグローバル領域)が存在し、これらは自動的に割り当てが行われるものだが、手動で強制的に設定することもできる。
32ビットシステム機においては、SGAとPGAの合計値が2GBを超えるようなことは一般的にお勧めできない。

ORA-27101 Shared memory realm does not exist

このエラーが発生している場合には、oracle_sidがセットされていないために、データベースのマウントならびにオープンが失敗している。とりあえずの対応方法は以下のとおり。

MS-DOSプロンプトを開く

set oracle_sid=(SID名)
sqlplus /nolog
connect sys/(sysユーザーパスワード) as sysdba
startup

これをやると
データベースがマウントされました
データベースがオープンされました
と表示されるので、接続できるようになる。

Windows起動時に正常に起動できる場合とそうでない場合があるようなことがあれば、【トラブル】OS起動時にDBが起動しないを参考にsqlnet.oraにある
SQLNET.AUTHENTICATION_SERVICES=(NTS)

SQLNET.AUTHENTICATION_SERVICES=(NONE)
へ変更してあげると良い。