|
ORACLEインタフェースでのエラー
[OS]HP-UX, SunOS, AIX
[リリース] 6.09
[キーワード] access, oracle, error, free, chain, overlap, detected, generic,
criticalerror, bug, pipe, driver, version, 7.0.15, later, patch, tcp/ip, sql*netservices, file, oraserv, server, path, two_task, fix, 7.1.4
[質問]
SAS/ACCESS Interface to ORACLEのパススルー機能を使用して、ORACLEのテーブルを読み込もうとしたところ、エラーとなります。
どのように対処すればよいのでしょうか。
[回答]
SAS/ACCESS Interface to ORACLEは、ORACLEと通信するときにORACLEのtwo-taskドライバを使用します。
また、ORACLEのサーバとSASが同一のマシンにインストールされている場合は、ORACLEのPIPEドライバが標準で使用されます。
このとき、ORACLEのバージョンが7.0.15以降の場合にエラーが発生することがあります。
このエラーは、ORACLEのメモリに関する処理の問題に起因します。
ORACLEのバージョンが7.0.16または7.1.3である場合はORACLEのパッチが用意されておりますので、購入先にご相談ください。
パッチ番号等の詳細につきましては、弊社テクニカルサポートセンターまでお問い合わせください。
また、この問題はSAS/ACCESSでORACLEにアクセスする際に、TCP/IPドライバを使用するように設定することでも回避可能です(ただし、TCP/IPドライバは、SQL*Netが導入されていない環境では使用できませんので、ご注意ください)。
その場合は、以下のように設定します(ここでの例は SQL*Net V1 の場合です。V2ではエリアス名を「path=」で指定できます)。
- /etc/servicesファイルにoraservの設定を追加します。
oraserv 1525/tcp
- tcpctlコマンドでサーバを起動します(DBAのユーザIDで行います)。
%tcpctl start
(tcpctl: server has been started のメッセージが出力されます)
- アクセス時にPATHを設定します。
sqlplusの場合: sqlplus scott/tiger@t:ホスト名:SID
SASの場合 : path="@t:ホスト名:SID"
- デフォルトのドライバをTCP/IPに設定する場合は、環境変数TWO_TASKをセットします(3の処理は不要です)。
%setenv TWO_TASK t:ホスト名:SID
なお、この問題はORACLEのバージョン7.1.4では、解決されています。
|