Oracle

インストールに必要なパッケージの情報を一括で取得するコマンド

パッケージの情報を確認するにはrpmコマンドを使用しますが、 rpm -q xscreensaverというように一回一回やっていくのは非常に手間です。下記のコマンドを使用すれば一発で情報を取得することが可能です。 rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE} (%{ARC…

Oracleの文字コードを調べるSQL

sqlplusで目的のデータベースにsystemユーザーでログイン後、 下記のSQLを実行すると文字コードの確認ができます SELECT value FROM nls_database_parameters WHERE parameter='NLS_CHARACTERSET';

データベースリンクの設定方法、使用方法

DatabaseLinkというリモートDBをローカルDBと透過的に使用できる機能があることを先日初めて知りました。設定方法および使用方法について簡単にまとめたので紹介したいと思います。ローカルDBがあるOracleのtnsnames.oraにリモートDBへの接続情報を記述しま…

現在接続しているユーザー名を表示する

現在接続しているユーザー名を確認するには以下のコマンドを実行します。 SHOW USER

ORA-04031の対処方法

ORA-04031 共有メモリーのstringバイトを割り当てできません上記のエラーの対処方法としては初期化パラメータSHARED_POOL_SIZEの値を増やすことが必要となります。またデータベースを長期間(数ヶ月)稼動させた状態の場合にはSHARED_POOLが徐々に断片化するた…

シーケンスの一覧を取得するSQL

SELECT * FROM all_objects WHERE object_type='SEQUENCE'

Memory Notification: Library Cache Object loaded into SGA

Oracleのアラートログ(alert_{ORACLE_SID}.log)に下記のようなエラーが大量にはきだされるときがあります。 Memory Notification: Library Cache Object loaded into SGA Heap size 7798K exceeds notification threshold (2048K)これはデフォルトの状態でSG…

PFILEからSPFILEを作成する

CREATE SPFILE='C:\oracle\product\10.2.0\db_1\database\spfileORCL.ora' FROM PFILE='C:\oracle\product\10.2.0\oradata\orcl\pfile\initORCL.ora';

OracleDBConsoleの再構築

OracleDBConsoleはOracleEnterpriseManagerに関するサービスです。 マシンのIPアドレスを振りなおした場合、IPアドレスで設定していたところで不整合が起こるので再構築する必要があります。再構築の方法としては以下の3つ。(1)でだめな場合は(2)を、(2)がだ…

Oracle9iとANALYZE

Oracle9iにおいてANALYZEが実行されているDBではSQLの実行がルールベースではなくコストベースになります。昨日まで問題なく動いていたSQLが急に遅くなったりした場合はANALYZEが実行されてオプティマイザがコストベースで判断している可能性を疑ってみてく…

STATSPACKをアンインストールする

昨日のエントリの続きです。 STATSPACKを削除する場合もSYSDBA権限を持ったユーザーで特定のスクリプトを実行すればOKです。 CONN SYS/CHANGE_ON_INSTALL AS SYSDBA @%ORACLE_HOME%\RDBMS\ADMIN\spdrop.sql 実行後、%ORACLE_HOME%\BIN以下に spdtab.lis spdu…

STATSPACKをインストールする

STATSPACKはOracle8iから追加されたパフォーマンス収集ツールです。 Oracle10gからはパフォーマンスを測定するツールとしてOracleEnterpriseManagerなどありますが、実際の現場ではまだまだSTATSPACKが使用されているようです。インストールするにはSYSDBA権…

SYSTEM表領域のファイルを移動させる

SYSTEM表領域はオフラインにできないので、データファイルを移動させる場合、他のテーブルスペースとは違う手順を踏む必要があります。1.データベースを停止する SHUTDOWN IMMEDIATE; 2.OSコマンド等でデータファイルを移動 COPY C:\oradata\system.dbf D:\o…

UNDO表領域の拡張の仕方

ORA-01555やORA-30036のエラーが出たときはUNDO表領域のサイズが足りないので、そのような場合のOracle側の対策としてサイズを拡張する必要があります。 (アプリ側の対策としてはこまめにcommitをかけるようにする必要があります) CONN system/[パスワード]@…

表領域のサイズを拡張する

下記のようなエラーが出た場合、テーブルスペースのサイズが足りないことが原因の大半です。 ORA-01658: 表領域USERSにセグメント用のINITIALエクステントを作成できませんそのようなときはSYSTEMユーザーでテーブルスペースのサイズを拡張してあげる必要が…

REDO ログを取得していない場合のDB復旧方法

REDO ログを取得していない場合やREDOログファイルが壊れていた場合の復旧方法の手順は以下のようになります1.データファイルと制御ファイルをリストアします2.SQL*PLUSにSYSDBA権限を持つユーザーでログインし、下記のSQLを実行します。 STARTUP MOUNT; A…

特殊文字を含む文字列をWHERE句に指定する

SQL文中で「\」,「*」,「_」,「%」などの特殊文字をWHERE句の条件に指定したい場合、 「ESCAPE」使用します。“HOGE_”が含まれているレコードを抽出したいときは以下のように記述することになります。 SELECT empno, ename FROM emp WHERE job LIKE '%HOGE\_%' ESCAPE…

インスタンスの起動の仕方

Windowsだとサービスの画面からでインスタンス単位で起動や停止を行ってしまうので、 UnixやLinuxでいざインスタンスの起動や停止を行うときにどうやればよいのかとまどってしまうことが多いです。肝心の手順ですが、以下のような流れでやればOKです。Oracle…

監視対象外エラーメッセージ

Oracleのエラーコード(ORA-?????のような形で出力されるエラーコード)を監視してアラートを出すようなシステムがあります。 とはいえ、Oracleのエラーコードの中には単なるメッセージつまり特にアラートを出す必要のないメッセージもあります。下記の表は9i…

ロックの情報を取得するSQL

ロックの情報を取得するにはsystemユーザーで次のSQLを実行します。 結果が返ってこなければ正常です。ロックの基本情報を取得するSQL文 SELECT SID,TYPE,LMODE,REQUEST,CTIME FROM V$LOCK WHERE TYPE IN ('TX','TM'); ロックをかけているユーザーとプログラ…

OS認証ユーザ

OS認証ユーザについてのメモです。 OracleのOS認証とはOracleで作成されるユーザ(スキーマ)を、OSのアカウントと同名のユーザを作成し、外部認証ユーザとする事により、パスワードの管理とユーザ認証をOSによって行う仕組みです。 つまり、OSアカウントで…

PFILEとSPFILEの違い

Oracleの初期化パラメータには、次の2つの種類があります。 静的パラメータファイル(PFILE) 永続パラメータファイル(SPFILE) --> Oracle9i以降で使用可能 以下に、2つのファイルの主な特徴を記述してみます。 PFILE SPFILE ファイル種別 テキストファイ…

Oracle10gでprimaryキーの削除をした際にINDEXが残る問題

Oracle10gで、プライマリキーの削除をした際にINDEXが残ってしまい、再作成できない問題があったので対処方法をメモしておきます。 ------------------- ダメな例: ALTER TABLE [テーブル名] DROP CONSTRAINT [プライマリキー名] ALTER TABLE [テーブル名] …

OracleRACを利用する場合のJDBCドライバの設定

OracleRACを利用する場合のJDBCドライバの設定は通常の記述の仕方と若干異なってきます。以下の構成を例に説明していきます。 Server_Name ORACLE_SID ORACLE_Service_Name ----------- ---------- ------------------- Server_A db_name_A db_name Server_B…

データベースのオープン中にREDOログファイルを変更する

1. sqlplusからデータベースにでsysdba権限で接続します sqlplus /nolog CONN / AS sysdba 2. 一時的に使用するREDOロググループを作成します(下記例は従来のREDOロググループが3つの場合)。 %REDO_DIR%はREDOログファイルの作成されるディレクトリとなりま…

ユーザー(スキーマ)のパスワードを変更する

Oracleのユーザー(スキーマ)のパスワードを変更するにはsqlplusから sysもしくはsystemユーザーで下記のコマンドを実行する必要があります。 ALTER USER (変更ユーザ) IDENTIFIED BY (変更パスワード); (例)SCOTTユーザーのパスワードを「LION」に変更する A…

Oracleのバージョンを確認する

Oracleのバージョンを確認する方法はいろいろあります。次の二つはsqlplusから確認する方法です。 sysもしくはsystemユーザーでsqlを実行します。 SELECT version FROM v$instance; SELECT * FROM v$version; OPatchを適用するときなどモジュールごとの詳細…

マシン一台にOracle10.1.0とOracle10.2.0を共存させる

違うバージョンのOracleを用意したいが予算がないため、専用のマシンを用意できないような場合、今回紹介する方法は有効です。今回はOracle10.1とOracle10.2での動作を確認していますが、9iと10gといったメジャーバージョンが違う組み合わせでも可能な方法と…

Oracleのキャッシュをクリアする

パフォーマンスを測定するときにキャッシュの影響を排除したいときがあります。 (キャッシュによってどれくらい速度が上がっているのかを調査したいときなど)Oracleの場合簡単なのはインスタンスを再起動することですが、やはり時間がかかります。 そのよう…

全テーブルのレコード数を出力する

http://laurentschneider.com/wordpress/2007/04/how-do-i-store-the-counts-of-all-tables.html の記事によると 全テーブルのレコード数を出力するには以下のSQLで可能らしいです。 SELECT table_name, TO_NUMBER( extractvalue( xmltype( dbms_xmlgen.getx…