SQL Plusでプロシージャを実行

Oracleの勉強しているとプロシージャを利用してのOracle管理が目立ってきたので真面目に勉強始めました。
(データブロックの破損とか統計収集とかね)


入門サイト的なのがないので辛い。。。


とりあえず、Oracle公式サイトからOracle ClientをダウンロードしてSQL Developerを使えるようにしました。
(Oracle DBは別のパソコンなのでClientも欲しかった)


SQL Developerでの実行方法はわかったけど、
SQL*Plusだと標準出力されなくて悩んだのでメモ。


「set serveroutput on」コマンドがないと標準出力されないみたい。


パターン1


SQL> set serveroutput on
SQL> declare
2 a number(1);
3 begin
4 a := 2;
5 pro_test(1,a);
6 dbms_output.put_line(a);
7 end;
8 /

pro_testプロシージャは第1引数がINで、第2引数がIN OUT。


パターン2


SQL> set serveroutput on
SQL> var a number
SQL> execute :a := 1
PL/SQLプロシージャが正常に完了しました。

SQL> execute pro_test(1,:a);
PL/SQLプロシージャが正常に完了しました。

SQL> print a

a

    • -

1

アーカイブログ

アーカイブログモードでDBを作成した後(デフォルトの出力先設定 = db_recovery_file_dest)に
LOG_ARCHIVE_DEST_nパラメータを弄ってアーカイブログ作成する。
再度、デフォルト設定に戻したい場合は、LOG_ARCHIVE_DEST_nを空文字で更新しても以下のようなエラーが出力される。



ORA-16014:ログX、順序番号XXXがアーカイブされていません。使用可能な宛先がありません。
ORA-00312: オンライン・ログX
スレッド1: '/XXX/XXX/XXXX'



ちゃんと、LOG_ARCHVE_DEST_nに「LOCATION=USE_DB_RECOVERY_FILE_DEST」を設定しなきゃいけない。


忘れてたのでメモ。

今の仕事

今はトラブルプロジェクトに派遣中です。。

トラブルプロジェクト初体験です!
(前、自分のSI作業で設定ファイル間違いしてトラブったことはあるけど)


で、思うんですけど……





「トラブルプロジェクトってPLがバカなんじゃね?」





の一言ですね。。。





システムの提供範囲とか、客先と打ち合わせした?
レビュー記録表とか議事録ないけど、出来ること出来ないことを発言したって証拠は?


要求仕様書とか技術仕様書をちゃんと作って合意とった?
どんなに漁っても資料ないんだけど。


基本設計書、詳細設計書ないんだけど。
何を実現するためのシステムかドキュメントないと仕様把握できないんだけど。


プログラムの質悪すぎ。
作成者間でのコーディングルールが統一されてないから読みにくい。


単体テストやんないの?
詳細設計書ないんだからホワイトボックステストしろよ。


実装しながら、実装終了した機能から結合テストもどきやって何の意味があるの?
実装が全て終了してからテストしなきゃ意味ないでしょ。


3TPSの負荷試験ってバカじゃね?
このシステムなら商用環境では、3TPSじゃとても処理追いつかねーよ。


人が足りないからって頭数を増やしても
タスク管理・スケジュールを管理する人がいなきゃ意味ないでしょ。
現状で浮いてる人が何人もいるし。。
ただの金の無駄遣いだろ。



あーこの仕事、早く止めたい

Cent OS 6.0 インストール[CUI]

Cent OSにWebLogicCUIでインストール。

WebLogicのバージョンは12c。


ディレクトリ】
インストールディレクトリ : /opt/oracle/app
ドメインディレクトリ : /opt/oracle/domains


【インストール準備】
1. グループを作成 : weblogic
2. ユーザを作成 : weblogic

【インストール】
3. wls1211_linux32.binを実行。(実行権限が付いてなかったのでchmodしました)
4. 色々設定してインストール。

ドメイン
5. /opt/oracle/app/wlserver_12.1/common/bin/config.shを実行。
6. 色々設定してドメイン作成。


【デーモンスクリプト作成】

#!/bin/sh

SUBSYS=/var/lock/subsys/weblogic
BEA_HOME=/opt/oracle/app
BEA_OWNER=weblogic

BASE_DOMAIN_NAME=/opt/oracle/domains
APP_DOMAIN_NAME=base_domain

STDOUT_START_LOG=$BEA_HOME/logs/start.log.`date +%Y-%m-%d_%0l%M%S`
STDOUT_STOP_LOG=$BEA_HOME/logs/stop.log.`date +%Y-%m-%d_%0l%M%S`

case "$1" in
        start)
                if [ -f $SUBSYS ]; then
                        echo $0 already started.
                        exit 1
                fi

                echo -n "Starting WebLogic : "
                su - $BEA_OWNER -c "$BASE_DOMAIN_NAME/$APP_DOMAIN_NAME/startWebLogic.sh >& $STDOUT_START_LOG &"

                touch $SUBSYS
                echo "OK"
                ;;
        stop)
                if [ ! -f $SUBSYS ]; then
                        echo $0 already stopped.
                        exit 1
                fi

                echo -n "Stoping WebLogic : "
                su - $BEA_OWNER -c "$BASE_DOMAIN_NAME/$APP_DOMAIN_NAME/bin/stopWebLogic.sh >& $STDOUT_STOP_LOG ;exit 0"

                rm -f $SUBSYS
                echo "OK"
                ;;
        restart)
                $0 stop
                $0 start
                ;;
        status)
                if [ -f $SUBSYS ]; then
                        echo $0 started.
                else
                        echo $0 stopped.
                fi
                ;;
        *)
                echo "Usage: $0 {start|stop|restart}"
                exit 1
esac

exit 0


chkconfigに登録はしないのでchkconfig、descriptionのコメントはなしです。
Oracle Database 11gとかインストールされているので自動起動させたらメモリーが足りない。。。
モリーは2GB、CPUもシングルコア・・・

Socket

Socketをちょっと昔な書き方をメモ。
今は、下記みたいな書き方は不要だけど。。。

    public void test() throws IOException {
        int port = 5000;

        // ソケット生成
        ServerSocket svsock = new ServerSocket();

        // バインド処理
        svsock.bind(new InetSocketAddress(port));

        // バインド確認
        if(svsock.isBound()) {
            System.out.println("binded");

            // ソケット接続待ちうけ
            Socket sock = svsock.accept();
            if(sock.isConnected()) {
                System.out.println("accepted");
                InputStream in = sock.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(in));

                String line = null;
                while((line = reader.readLine()) != null){
                    System.out.println(line);
                }
            }
        }
    }

Rails 3.1.3 + Apache2.2.22 + Unicorn4.2.0

CentOS 5.6(x64)にタイトルの環境を構築した。


最初は、passengerを利用していたけど何かエラーが発生するから諦めた。

OracleDBと接続した場合は「何かsqliteをインストールしろ」ってエラーが発生するし
MySQLと接続した場合は「何かactiverecord-mysql2をインストールしろ」ってエラーが発生する。


どちらとも、Webrickを利用した場合、正常に接続および稼動していたのにも関わらず。。。



ということでpassengerを諦めUnicornに切り替えてみた。


昔はTwitterapache + uniocornだったしサービスを提供するにも問題ないでしょ。


実際、設定も簡単だった。


まぁ、CentOSだとRubyApacheyum経由だとバージョンが古いから
コンパイルするはめになったけど。


インストールしたものは以下の通り。
  # Rubyインストール用
  yum -y install openssl-devel zlib-devel readline-devel
  # コンパイル
  yum -y install gcc
  # tiny_tdsインストール用
  yum -y install freetds
  yum -y install freetds-devel
  # mysqlアダプタインストール用…だったかな
  yum -y install gcc-c++


Gemfile
  gem 'execjs'
  gem 'therubyracer'

後、DB毎のgem関連。