Oracle FAQ


  1. java ストアド・プロシージャを loadjava するとエラーになるのはなぜ?
  2. 8.1.6 java ストアド・プロシージャでヒープサイズを変えるには?
  3. 8.1.7 ncomp が動かない?
  4. HP-UX 8.0.6 64Bit 版で svrmgrl で以下のエラーがでるのはなぜ?
    /usr/lib/pa20_64/dld.sl: Unable to find library 'libobk.sl'.
  5. ORA-27123 のエラーの原因は?
  6. インストール時に作成される oraInventory のパーミッションについて?

1. java ストアド・プロシージャを loadjava するとエラーになるのはなぜ?

"ORA-00904:列名が無効です" のエラーが出るのは、 oracle JVM が正しくインストールされていないときです。 oracle JVM を手動でインストールしてください。


cd $ORACLE_HOME/javavm/install
svrmgrl
SVRMGR> connect internal
SVRMGR> @initjvm




2. 8.1.6 java ストアド・プロシージャでヒープサイズを変えるには?

ユーザを scott/tiger と仮定します。

  1. メモリ量を変更できる権利を付与する。

    
     SQL> exec dbms_java.grant_permission( 'SCOTT',
             'oracle.aurora.security.JServerPermission','Memory.Call',NULL);
    

  2. CLASSPATH に $ORACLE_HOME/javavm/lib/aurora.zip を追加

  3. 実行したい java プログラムの変更

    MAX_MEM_SIZE が必要とするメモリのバイト数です。 setMaxMemorySize(MAX_MEM_SIZE) で変更します。 デフォルトは、134217728(128M) のようですので、ほぼ倍にしてみましょう。 最大ヒープサイズは、、getMaxMemorySize() で取得できます。 setMaxMemorySize() は、 はじめに call されるメソッドの最初の実行文としてください。

    
      import oracle.*;
    
      static final long DEF_MEM_SIZE = 128 * 1024 * 1024;
      static final long MAX_MEM_SIZE = DEF_MEM_SIZE *2 ;
    
      oracle.aurora.vm.OracleRuntime.setMaxMemorySize(MAX_MEM_SIZE);
    





3. .1.7 ncomp (native compiletion tool) が動かない?

ncomp は、次のような手順で処理をします。


  1. javac JAVA_PROGRAM
  2. jar cvf0M JAR_FILE JAVA_CLASS_FILES
  3. loadjava -resolve -user USER/PASSWD JAR_FILE
  4. ncomp -u USER/PASSWD JAR_FILE
  5. $ORACLE_HOME/javavm/admin に共用ライブラリができる

まず、以下の権限が必要です。

  1. SQL> GRANT JAVA_DEPLOY TO scott;
  2. SQL> GRANT JAVASYSPRIV TO scott;

なお、java のバージョンは、以下が必須です。

java version "1.2.2" Solaris VM (build Solaris_JDK_1.2.2_07, native threads, sunwjit)


817nagano-7] statusnc -u scott/tiger ch14app.jar
#
# this list is produced by query
#   select status, class_name  from jaccelerator$status;
#

NEED_NCOMPING jvm/ch14/NComp
NEED_NCOMPING jvm/ch14/





4. HP-UX 8.0.6 64Bit 版で svrmgrl で以下のエラーがでるのはなぜ?
/usr/lib/pa20_64/dld.sl: Unable to find library 'libobk.sl'.

miffy{ora80664}37: svrmgrl

Oracle Server Manager Release 3.0.6.0.0 - Production

(c) Copyright 1999, Oracle Corporation.  All Rights Reserved.

/usr/lib/pa20_64/dld.sl: Unable to find library 'libobk.sl'.
/usr/lib/pa20_64/dld.sl: Unable to find library 'libobk.sl'.
ORA-12547: TNS:lost contact

SVRMGR>

これは、svrmgrl が oracle を起動するときに、oracle が使う共用ライブラリが見つからないために出るエラーです。

64Bit 版の場合は、LD_LIBRARY_PATH を以下に設定します。

setenv LD_LIBRARY_PATH $ORACLE_HOME/lib64

参照

ldd(1),chatr(1)




ORA-27123 のエラーの原因は?

 > java Sel
java.sql.SQLException: ORA-01034: ORACLE not available
ORA-27123: unable to attach to shared memory segment
SVR4 Error: 13: Permission denied

oracle の実行モジュールのパーミッションは "-rwsr-s--x" でなければなりませんが、 おそらく "s" ビットが立っていない状態で、 oracle インストールユーザ以外で実行したためです。 以下のコマンドでパーミッションを変えてください。

 > chmod ug+s oracle

セットユーザ ID ビット、セットグループ ID ビットは、 cp コマンドでコピーしてもクリアされます。




インストール時に作成される oraInventory のパーミッションについて

インストーラの内部では、oraInventory を作成するために mkdir("oraInventory",0777) システムコールを呼びます。 mkdir() システムコールは、第二引数であるモードから現在の umask の値を引いた値を、作成するディレクトリのパーミッションとします。 通常 umask は 022 ですので作成されるディレクトリのパーミッションは、 0777 - 022 = 0755 (drwxr-xr-x) となります。

同一グループでそのディレクトリを共有したい場合は umask を 0 にすれば、 0777(drwxrwxrwx) のパーミッションとして作成します。