Oracle


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;
をsystemユーザーで実行する必要がある。

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)
へ変更してあげると良い。