Category: Oracle

VPN経由でOracle DBに接続できない/クエリがすごく遅い

  Oracle社のパッケージを利用したSI案件では、ライセンスの関係上、オフショアサイト側にOracleデータベースとパッケージ(Oracle EBSとか)を配置できないケースが多い(高いから)。そんな時は、日本側のオフィス(またはクライアントのDC)とオフショア側のオフィス間で拠点間VPNを張り、オフショア側から接続させる。 で、大体どのプロジェクトでも、オフショア側から「Oracleにつながらない」「検索が重くて結果が返ってこない。開発にならない」「PL/SQLのコンパイルができない」などとクレームを受けることになる。ネットワーク系の問題だと大体わたしのところにお鉢が回ってくるので、少し切り分けをしてみた。 結論から言うと、Oracle 11g Clientになってからクライアントの仕様が変わったことで、問題が起きるようだ。 10gの場合、SDU(セッションデータユニット)のデフォルトは2048 http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/network.102/B19208-02/performance.htm 11gの場合、SDUのデフォルトは8192 http://download.oracle.com/docs/cd/E16338_01/network.112/b56288/performance.htm SDUとは http://docs.oracle.com/cd/E16338_01/network.112/b56288/performance.htm#i1006332 11gになってSDUのサイズが大きくなったため、10gまでのクライアントでは問題なかったのに、11gクライアントからはVPN通信中にパケットロス等の問題が起きるようになった模様。 オフショア側のクライアント側で、SDUのサイズを小さくする(2048とか)ことで、問題は解決した。 SDUのサイズはクライアント側のsqlnet.oraファイルや、tnsnames.oraファイルの設定で調整できる。 参考: http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/network.102/B19209-01/tnsnames.htm#i477833 なお、オフショア側でSQL Developerを使っている場合は、先ずOracle Clientをオフショア側の端末にインストールすること。そして、クライアント側のtnsnames.oraファイルでSDUのサイズを指定し、以下のサイトを参考に、SQL Developerでtnsnames.oraファイルの場所を指定する。 http://theitbros.com/sql-developer-use-tnsnames-ora-file

ODAC 11.2 Release 3 (11.2.0.2.1) with Oracle Developer Tools for Visual Studioインストール

  .NET + Oracle DBで遊んでます。DBはOracle 11gR2 Express Edition。 ODAC11.2は以下からダウンロード。 http://www.oracle.com/technetwork/jp/topics/index-087744-ja.html zipを解凍してsetup.exeを実行。 次へ。 次へ。 今回はOracle Clientの方を選択。 パスはXEのインストールされているディレクトリに変えた。 OracleベースをC:\oraclexe\app\oracleに変更。 今回はVisual Studio 2010を選択。 インストール完了。Visual Studioを起動する。 サーバーエクスプローラーのデータ接続を右クリックし、接続の追加。 接続情報の入力。 Visual StudioからOracleの中身が見えるようになった。 これでごにょごにょできる。  

Oracle DatabaseにHRスキーマを作成

  11gR2のExpress Editionで遊んでます。 サンプルアプリ作ってごにょごにょするのにHRスキーマが必要になったため、XEインストール後にHRスキーマを作成する方法。 ちなみに今回はWindows環境。ORACLE_HOMEがC:\oraclexe\app\oracle\product\11.2.0\serverだったら、その下の、 \demo\schema\human_resources に移動。 hr_main.sqlを実行しましょう。  

libclntsh.so.11.1: cannot restore segment prot after reloc: Permission denied

  Oracle database 11gをインストール後、リスナーを起動しようとすると標題のエラーが発生する。tnspingも同じ。 -bash-3.2$ tnsping orahoge tnsping: error while loading shared libraries: /u01/hoge/orahoge/db/tech_st/11.2.0/lib/libclntsh.so.11.1: cannot restore segment prot after reloc: Permission denied なんか見たことあるなーと思ったら、以前Apacheが起動しない事象に遭遇した時と類似の原因だった。犯人はSELinux、テメーだ。 SELinuxを無効化する。 setenforce 0   /etc/selinux/configにて、SELINUXTYPEをdisabledにする。 [root@hogedb01 selinux]# vi config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing -.

Oracle Application Express(APEX)を削除する

  手元でちょっとした動作確認できるOracleの環境がほしくて、クライアントにOracle XEをインストールした。 で、勝手にOracle Application Expressインストールされて、8080ポートも使われて不愉快なので、消してやった。 ここを参照。 8. How do I Completely Uninstall Oracle Application Express from the Database? http://www.oracle.com/technology/products/database/application_express/install_faq.html   1. Application Expressのスキーマを削除 SQL> drop user FLOWS_FILES cascade; ユーザーが削除されました。 SQL> drop user FLOWS_020100 cascade; ユーザーが削除されました。   2. シノニム削除 Application Expressのパブリックシノニムを削除。まずDDL作って実行。 私の環境はOracle XE 10.2.0なので、FLOWS_FILES及びFLOWS_020100のオブジェクトを検索。 SQL> set heading off SQL> select ‘drop public synonym ‘ ||.

libnnz10.so: cannot restore segment prot after reloc: Permission denied

  スタンドアロンのOracle XE10.2.0+apache2.2.14+PHP5.2.12の環境で、apacheを起動しようとした時に発生。 [root@hogehoge bin]# ./apachectl start httpd: Syntax error on line 53 of /usr/local/httpd/conf/httpd.conf: Cannot load /usr/local/httpd/modules/libphp5.so into server: /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libnnz10.so: cannot restore segment prot after reloc: Permission denied ググったら速攻原因がわかり、理由はSELinuxさんが律儀にもシステムを守ってくださっていたからだった。 Thread: Install PHP+Oracle Client ERROR! in libnnz10.so http://forums.oracle.com/forums/thread.jspa?threadID=410361 申し訳ないのだが、apacheを起動する必要があるので、SELinuxさんには一時的に黙って頂くことにした。 setenforce 0

CONFIG: ORA-20001: SYSMAN already exists..

  AWS上で、Oracle DBの11.2.0を試している。 例の如く、EC2インスタンスのprivate ipがOS起動毎に変わる影響で、EMが起動しない。EMのレポジトリを再作成しようとしたが、表題のエラーが発生して再作成が失敗する。また、シューティングしている中で以下のようなエラーも発生。 CONFIG: ORA-00955: name is already used by an existing object ググって、以下の情報を見つけた。 http://blog.mclaughlinsoftware.com/oracle-architecture-configuration/changing-windows-hostname-and-oracle-enterprise-manager/ http://arjudba.blogspot.com/2008/04/stack-of-problems-while-creating.html http://forums.oracle.com/forums/thread.jspa?threadID=1057381&tstart=0&start=45 1、先ず、いつものようにEMのレポジトリをドロップ emca -deconfig dbcontrol db -repos drop 2、SYSMAN関連のオブジェクトを、手動でドロップ DROP USER sysman CASCADE; DROP PUBLIC SYNONYM setemviewusercontext; DROP ROLE mgmt_user; DROP PUBLIC SYNONYM mgmt_target_blackouts; DROP USER mgmt_view; DROP PUBLIC SYNONYM MGMT_AVAILABILITY; 3、EMのレポジトリを再作成 emca -config dbcontrol db -repos.

ORA-1092

  データベース作成時に発生し、データベース作成失敗。 ORA-1092 : opiodr aborting process unknown ospid (5701_2513792) Sat Jun 06 11:06:48 2009 ORA-1092 : opitsk aborting process 直感的にはわからなかったが、どうやらcreate databaseする時にディスクの領域が足りなかったようだ。 ググると、oracleユーザがディレクトリ権限を持っていない場合も発生したりするらしい。

AWSとOracleとElastic IP

  (旧ブログから移行したので情報が古い。もうOracleのRDSまで出るもんなあ。AWSの機能追加・改善のスピードにはいつも驚かされる) Amazon Web Services上でOracle用のインスタンスをlaunchして、Elastic IPを割り振った後、何点かハマったのでメモ。 インスタンス起動すると、listener.oraのHOSTが古いままなんですけど 症状: AWSのインスタンスは、起動する度にホスト名が変わってしまう。 listener.oraは、こんな感じになっているのだが、 $ cat listener.ora LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) (ADDRESS = (PROTOCOL = TCP)(HOST = domU-XX-XX-XX-XX-XX-XX)(PORT = 1521)) ) ) HOSTの文字列が更新されない。ちなみに、tnsnames.oraのHOSTも同じ。 どうしよう: 参考:[TechDay] 第6回 Amazon Elastic Compute Cloud (Amazon EC2) http://builder.japan.zdnet.com/member/u502383/blog/2008/10/25/entry_27017395/ 上記サイトを参考に、Oracleの起動スクリプトを書き換える。上記サイトではOracle XEをベースに解説されているが、Enterprise Editionの場合は/etc/init.d/dboraを書き換える。ポイントとしては、元の起動スクリプトだと、/root/firstrunがないとlistener.oraの更新がされないようになっていたので、条件文コメントアウトした。 インスタンス起動すると、環境変数ORACLE_HOSTNAMEが古いままなんですけど 症状: oracleユーザの環境変数ORACLE_HOSTNAMEも、前回起動していたインスタンスのホスト名が割り当てられたまま。 どうしよう:.