タグ

ブックマーク / ameblo.jp/archive-redo-blog (10)

  • 『[Oracle] LOBデータの基本的な扱い方』

    Oracleではサイズの大きいデータを格納するためにラージ・オブジェクト(LOB)を使用します。 LOBにはデータベース内部に格納される内部LOBとOSファイルとして格納される外部LOBの2種類がありますが、ここで説明するのは内部LOBの方です。 LOBにはバイナリー・ラージ・オブジェクト(BLOB)とキャラクター・ラージ・オブジェクト(CLOB、NCLOB)があります。 LOBデータはインライン(行データに含める)に格納するか、アウトライン(専用のLOB記憶域)に格納するかのいずれかの方式をとります。 LOB記憶域の設定で"DISABLE STORAGE IN ROW"を指定した場合、LOBデータはアウトラインに格納されます。 逆に"DISABLE STORAGE IN ROW"を指定しない場合は4,000バイトまでであればインラインに格納され、4,000バイトを超えるとアウトラインに格

    『[Oracle] LOBデータの基本的な扱い方』
  • 『[Oracle] listener.log、sqlnet.logはどこへ消えた?』

    リスナーのログ(listener.log)、Oracle Net クライアントのログ(sqlnet.log)は、10g までは >ORACLE_HOME</network/log で示される場所に出力されていました。 例えば ORACLE_HOME 環境変数が "/u01/app/oracle/product/11.1.0/db_1" の場合、出力先は、 /u01/app/oracle/product/11.1.0/db_1/network/log となります。 しかし、11g からはアラート・ログと同様に、自動診断リポジトリ(ADR)の構造にしたがって出力先が変更されています。 リスナーのログ(listener.log)の出力先 listener.ora の ADR_BASE_ パラメータ、ORACLE_BASE 環境変数によって出力先が変わります。 ADR_BASE_<LISTENER

    『[Oracle] listener.log、sqlnet.logはどこへ消えた?』
  • 『[Oracle] BULK COLLECT句を使ったバルクバインドによる検索処理の高速化』

    SELECT文で一度に大量のレコードを取得する場合、BULK COLLECT句を使ってバルク・バインドすると、一度に複数のレコードを取得することができ、パフォーマンスが向上します。 【パターン1】 DECLARE TYPE empno_tbl_type IS TABLE OF EMP.EMPNO%TYPE INDEX BY BINARY_INTEGER; empno_tbl empno_tbl_type; BEGIN SELECT EMPNO BULK COLLECT INTO empno_tbl FROM EMP; IF empno_tbl.COUNT > 0 THEN FOR i IN empno_tbl.FIRST..empno_tbl.LAST LOOP UPDATE EMP SET SAL = SAL * 1.05 WHERE EMPNO = empno_tbl( i ); EN

    『[Oracle] BULK COLLECT句を使ったバルクバインドによる検索処理の高速化』
  • 『[Oracle] 11gではデフォルトでパスワードの大文字小文字を区別する』

    Oracle 11g をインストールして、Object Browser 9 で接続しようとすると、以下のようなエラーが発生しました。 ORA-01017: ユーザー名/ パスワードが無効です。ログオンは拒否されました。 11g からデフォルトでパスワードの大文字小文字を区別するようになったことが原因のようです。 Object Browser 9 はパスワードを小文字で入力しても大文字に自動変換して Oracle に投げるため、小文字のパスワードが設定されている場合、ログオンできなくなってしまうというわけです。 10g 以前のバージョンと同じようにパスワードの大文字小文字を区別しないようにするには、初期化パラメータ SEC_CASE_SENSITIVE_LOGON を FALSE に変更する必要があります。 ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON

    『[Oracle] 11gではデフォルトでパスワードの大文字小文字を区別する』
    yohei-a
    yohei-a 2010/10/18
    "1g からデフォルトでパスワードの大文字小文字を区別するようになった"
  • 『[Oracle] JDBCによるLOBの操作方法』

    JavaからLOBを操作するには、Oracle JDBCドライバに含まれるoracle.sql.BLOBクラス、またはoracle.sql.CLOBクラスを使用します。 これらのクラスはLOBロケータを保持し、LOB値の読み込み、書き込みを行うためのメソッドを提供しています。 oracle.sql.BLOBクラス、oracle.sql.CLOBクラスを使用したLOBの操作例を以下に示します。 BLOBデータの読み込み BLOBデータを読み込むには、まずSELECT文を実行してBLOBロケータを取得します。 そして取得したBLOBロケータから入力ストリームを生成し、そこからBLOBデータを読み込んでいきます。 PreparedStatement pstmt = conn.prepareStatement( 'SELECT BLOB_VALUE FROM TABLEA WHERE ID = ?

    『[Oracle] JDBCによるLOBの操作方法』
  • 『[Oracle] 実行したSQLの実行計画を見る(V$SQL_PLAN)』

    実行したSQLの実行計画はV$SQL_PLANで見ることができます。 例えば、 SELECT DEPT.DNAME, EMP.ENAME FROM EMP INNER JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO WHERE EMP.SAL > 2500 ORDER BY DEPT.DEPTNO, EMP.EMPNO; というSQLの実行計画を見る場合、まず、V$SQLから該当SQLのADDRESS、HASH_VALUE、CHILD_NUMBERを探しだし、 SET LINESIZE 100 COLUMN SQL_TEXT FORMAT A50 WORD_WRAP COLUMN ADDRESS FORMAT A10 COLUMN HASH_VALUE FORMAT 9999999999 COLUMN CHILD_NUMBER FORMAT 99 SELECT

    『[Oracle] 実行したSQLの実行計画を見る(V$SQL_PLAN)』
    yohei-a
    yohei-a 2009/10/28
    ADDRESS、HASH_VALUE から実行計画を見る方法
  • 『[Oracle] exp/impとexpdp/impdbのパフォーマンス比較』

    [Oracle] exp/impとexpdp/impdbのパフォーマンス比較 Oracle 10g から Data Pump という機能が導入されました。 Oracle の従来のバージョンではデータのエクスポート/インポートを行うためにエクスポート/インポートユーティリティ(exp/imp)を使っていましたが、今後のバージョンでは Data Pump のエクスポート/インポートユーティリティ(expdp/impdp)が標準となります。 Data Pump を使うとより高速なインポート/エクスポートが可能になるということなのですが、実際どの程度速くなるものなのでしょうか? 簡単に検証してみました。 まずはエクスポートについてですが、以下の3パターンであるスキーマをエクスポートしてみました。 ● exp によるエクスポート exp system/manager@orcl owner=USER1

    『[Oracle] exp/impとexpdp/impdbのパフォーマンス比較』
    yohei-a
    yohei-a 2009/10/27
    exp/imp と Data Pump のベンチマーク
  • Archive Redo Blog

    この三連休は四国の剣山にキレンゲショウマでも観に行こうと思っていたのですが、直前の地震を受けて計画変更。 剣山ではなく、近場の六甲高山植物園にキレンゲショウマを観に行くことにしました。 この時期、表六甲からでは暑かろうと思い、裏六甲、有馬温泉から紅葉谷を登ります。 途中、たまに氷瀑を観に行く七曲滝に寄り道。 夏はこんな感じなんですね。水量少なめ。 今日は滝ではなく、この時期このあたりの谷筋に咲くイワタバコを観るのが目的。 もう終わりかけという感じではありましたが、七曲滝手前の狭い谷の両側の岩場にびっしりと群生していました。 まあ、そんなに好きな花でもないのですが、どういう時期にどういう場所にどんな花がどんなふうに咲くのか、そういうことを知るのも山登りの楽しみの一つです。 紅葉谷に戻って登っていく途中で見つけた葉脈だけを残した枯葉。 紅葉谷は北側斜面なので花は少なめですが、極楽茶屋跡に出て六

    yohei-a
    yohei-a 2009/07/30
    ORA-04031: 共有メモリーのstringバイトを割当てできません("string","string","string","string")
  • [Oracle] ORA-01000エラーの原因特定のためにV$OPEN_CURSORを利用する | Archive Redo Blog

    アプリケーションでのカーソルの閉じ忘れによって「ORA-01000: 最大オープン・カーソル数を超えました。」が発生する場合、そのエラーが発生した箇所に閉じ忘れがある場合は改修も容易ですが、そうでない場合はカーソルを閉じ忘れている箇所を特定するのに四苦八苦することも多いです。 単純にソースを逆に追っていけばいつかはカーソルを閉じ忘れている箇所にいつかはたどり着くはずですが、あちらこちらで大量のSQLを実行しているような複雑なアプリケーションではたどり着くまでにかなりの時間を費やす可能性もあります。 このようなときには、V$OPEN_CURSORビューを活用すればカーソルを閉じ忘れている箇所をすばやく特定できる可能性があります。 例えば、単純にどのセッションでどんなSQL文のカーソルがオープンされているかを調べるなら以下のようなSELECT文を実行すればOKです。 SQL> SELECT S

    [Oracle] ORA-01000エラーの原因特定のためにV$OPEN_CURSORを利用する | Archive Redo Blog
    yohei-a
    yohei-a 2009/04/28
  • 『[Oracle] ORA-01000エラーの回避方法』

    大量のデータを処理した場合などに ORA-01000 最大オープン・カーソル数を超えました。 というエラーが発生することがあります。 これは文字通り一度にオープンできるカーソルの最大数を超えたことを示すエラーです。 Oracleで同時にオープンできるカーソルの最大数は初期化パラメータOPEN_CURSORSで設定することができます。 では増やせばいいじゃないかと安易に考えてしまいがちですが、そう易々と解決できるものではありません。 OPEN_CURSORSの値を増やせば、確かに上記のエラーが発生する確率を減らすことはできますが、逆にリソースを多く消費するようになり、Oracleのパフォーマンスが全体的に低下してしまうからです。 そもそもカーソルというもの自体リソースを多く消費するものなので、大量に使用するというのはアプリケーションの仕組み的に好ましくありません。 ですから、上記のエラーを回

    『[Oracle] ORA-01000エラーの回避方法』
    yohei-a
    yohei-a 2009/04/28
  • 1