Oracle

データベースの文字コードを調べる

SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET';

SGA_TARGETの変更(メモリ割当量を増やす)

Oracleにはラージ・プールとか共有プールとかさまざまなメモリ領域が必要ですが、 これらを0で設定し、代わりに10gより追加されたパラメータ「SGA_TARGET」にメモリ割り当てサイズを設定することで、Oracleが自動的にさまざまなメモリ領域にメモリを効果的に…

索引(index)が有効にならない(使用できない)パターン

パターン サンプル NULL値の検索 IS NULLIS NOT NULL 暗黙の型変換を使用している値の検索 CHAR列の項目 = 1 関数や算術計算をしている値の検索 MONEY * 10 = 500 LIKEの中間一致・後方一致検索 列名 LIKE '%TEST%'列名 LIKE '%TEST' !=、<>の使用による検索…

共有プールの空き容量を確認する

SELECT * FROM v$sgastat WHERE name = 'free memory' AND pool = 'shared pool';

コマンドライン入力で検索条件を設定するSQL

動的に検索条件を変更してSQLを実行したい場合、 SELECT CODE, NAME FROM CUSTOMER_TBL WHERE CODE = '&USER_CODE'; のように、変更したい条件値を「&」で始まる変数のような形で設定します。 実際にこのSQLを実行すると、 USER_CODEに値を入力してください:…

ユーザーが保持するすべてのテーブル名を表示するSQL

SELECT TABLE_NAME FROM ALL_TABLES;

Enterprise Managerが起動しない

$ORACLE_HOME/ホスト名$ORACLE_SIDの下に、emctl.pidがあると起動できないようです。 これを削除してからもういちどemctl start dbconsoleを実行する。

サービスなどの起動順

以下の順番で起動する。 1.リスナーを起動(lsnctl start) 2.DBインスタンスを起動 3.Enterprise Managerを起動(emctl start dbconsole)

Oracle Universal Installerで「S_OWNER_SYSTEM_EPERM」というポップアップが表示され、インストールを進められない

Oracle10gをインストールしようとしてOracle Universal Installerを使用していた際、「インベントリ・ディレクトリと資格証明の指定」画面から「次へ」をクリックすると、 S_OWNER_SYSTEM_EPERMというポップアップが表示され、次のステップに進むことができ…

Oracle Universal Installerを使用している際、ネットワーク構成のチェックで「NullPointerException」が発生する

Oracle10gをインストールしようとOracle Universal Installerを使用している際、 ネットワーク構成のチェックが「実行できませんでした」となり、ログには「NullPointerException」と表示されておりました。強引にインストールを行ったものの、正常にリスナ…

接続モードについて

データベース作成時にはデータベース・コンフィグレーション・アシスタントを使用してウィザードを使用してデータベースを作成しますが、「10/12 初期化パラメータ」のステップで、「接続モード」というタブがあるのですが、このタブのデフォルト値は「専用…

Oracle Enterprise Managerを使用しているとOutOfMemoryが発生する

Oracle10g Clientに同梱されているOracle Enterprise Managerを使い終わって、プログラムを終了しようとすると、OutOfMemoryとコンソールに表示されて終了させることができないことがありました。そうした場合には強制終了させていたのですが、そもそもOracl…

テーブル名を変更する

rename 元のテーブル名 to 変更するテーブル名;データが格納されていても変更可能です。 ただしOracleのテーブル名の最大バイト数は30バイトなのでお気をつけください。

「$BIN+...+ XX」という命名規則でテーブルが作成されてしまう(リサイクルビン機能)

TABLEをDROPしたタイミングで、「$BIN+...+ XX」という命名規則でテーブルが勝手に作成される。このテーブルはSQL*Plusから閲覧することはできない。また、Oracle Enterprise Managerを使用して削除しようとすると、 「ORA-38301: リサイクルビンのオブジェ…

文字列を操作する関数

■LPAD(文字列 , 指定桁数 , 埋め込み文字) 文字列の左端に指定桁数、埋め込み文字を連結する。 ■CONCAT(文字列 , 文字列) 2つの引数となる文字列を連結する。上の関数は、よくPL/SQLで使用しますー。 DECLARE BEGIN FOR i IN 1..100 LOOP INSERT INTO USER V…

STARTUPコマンドで2つあるインスタンスのうち1つしか起動しない場合

Oracleに2つのインスタンス(仮に「dog」と「cat」)が存在していまして、 $ sqlplus sys/(SYSユーザーのパスワード) as sysdba > startup;とインスタンスを起動しようとしたのですが、dogは起動するのにcatは起動しません…。ためしに、 $ echo $ORACLE_SI…

項目の型をVARCHAR2からCLOBに変更する方法

単純に、 ALTER TABLE SAMPLE_TBL MODIFY column_name CLOB;と実行すると、 ORA-22858: データ型の変更が無効です。が発生。VARCHAR2からCLOBへの変更は素直にできないようですね。 なので、以下のPL/SQLを実行することで変更できました。 もっとシンプルに…

テーブル構造を取得するSQL

Oracle専用のようです。 DESCRIBE テーブル名;

数字で始まるテーブル別名をつけると「ORA-00933: SQLコマンドが正しく終了されていません。」が発生

SELECT 123.NAME FROM DSER_MASTER 123;というSQL文を実行すると、 ORA-00933: SQLコマンドが正しく終了されていません。が発生しました。 SELECT 123HOGE.NAME FROM DSER_MASTER 123HOGE;これもだめ。 SELECT !HOGE.NAME FROM DSER_MASTER !HOGE;これだと、…

表がDROPされると表に対するインデックスもDROPされる

気になって調べましたが、そのようです。 SQL>CREATE TABLE SAMPLE (NUM NUMBER(1,0));表が作成されました。SQL>CREATE INDEX SAMPLE_INDEX ON SAMPLE(NUM);索引が作成されました。SQL>DROP TABLE SAMPLE;表が削除されました。SQL>DROP INDEX SAMPLE_INDEX; …

PL/SQLでループ中に例外が発生しても続行するロジック

PL/SQLで「ループ中に例外が発生した時は、その行だけ飛ばして次の行の処理を実行したい」という場合、ループ内に「BEGIN…END」をもう1つ記述することで実現できます。例えば以下のサンプルは、売上伝票テーブルにある項目「顧客ID」を使用して、別テーブル…

ORA-01841: (周)年は-4713と+9999の間の0以外の数字を指定する必要があります

とあるテーブルにINSERT文を実行すると、 ORA-01841: (周)年は-4713と+9999の間の0以外の数字を指定する必要がありますが発生。エラーメッセージの意味が分からない…と悩んでいたのですが、問題特定ができました。 テーブルのDATE型の項目にシステム時間(sy…

表領域が自動拡張(AUTO EXTENDED)に設定されているのにORA-01536が発生

INSERT文を発行した際に、 ORA-01536: 表領域 USERS に対して割り当てられた領域を使い果たしました。が発生しました。表領域 USERS を確認したところ、確かに表領域は96%くらい使用されていますが、自動拡張(AUTO EXTENDED)に設定されています…。どうやら…

SQLPlusにSYSDBA権限で接続する

SYSユーザーでOracleに接続する場合、SYSDBA権限で接続しなければいけません。仮に以下の環境だったとして…、 ・SYSユーザーのパスワード:oracle ・接続するSID:orclSQLPlusで接続する場合は、以下のコマンドとなります。■SQLPlus 9.X(Oracle9iのメディア…

dbcaコマンド実行時にエラーが発生

Linux環境において、oracleユーザーでdbcaコマンドによりデータベース・コンフィグレーション・アシスタントを起動しようとすると、 Xlib: connection to ":0.0" refused by serverが発生し、GUIが起動しない。実はXWindowをrootユーザーで起動していたこと…

9iのクライアントで10gのサーバーにつないだ際にここがだめ

■Oracle Enterprise Managerから、一時領域がGUIで作成できない(表領域は作成できる)。ORA-12913が発生する。 観念してSQLPlusでSQLを実行しましょう。■9iのサーバーのDMPを10gにインポートしようとすると、インポート途中に「制約を使用可能にします...」…