搜尋此網誌

星期三, 5月 09, 2007

在windows下 oracle的agent在改過主機名稱後,無法啟動

windows系列的主機,更換名稱是很自然簡單的動作。然而這對oracle資料庫而言,會造成一些小小的不便。
oracle agent就是一個最大的問題;一般而言,我們會用oracle的agent進行一些遠端管理,尤其是oms。
然而在更改主機名稱後,agent就會遇到無法啟動的問題
-------------- [OracleOraHome92Agent] ------------
Sending initial service status..
Commandline is "C:\oracle\ora92\bin\dbsnmpwd.bat" -agent_name OracleOraHome92Agent
2. WAIT_OBJECT_0: Agent exited with retCode 0.
Agent failed to startup.
Check C:\oracle\ora92\network\log\OracleOraHome92Agent.nohup for details

要解決此方法,必須到C:\oracle\ora92\network\agent 目錄中,將所有.ver 和.q的檔案清除
再重新啟動agent即可解決

啟動 Oracle Intelligent Agent.......
已啟動代理程式

星期二, 5月 01, 2007

自個兒換紗窗

最近廚房通往後陽台的紗窗,被老鼠咬了二個大洞,老婆拿我上次買的3m強力膠帶把他補起來後,沒想到老鼠居然吃起膠帶了,越吃越快樂;不過膠帶還不便宜一卷要99元,只能用大約10次。想想不划算,想到上次換這個紗窗花了我600台幣,不到一個月就開花了,真是讓我很ooxx。
還好,昨天在幫老爸在特力屋買延長線時,看到有尼龍不銹鋼網,就有diy的念頭(看來最近真的太閒),不過一時不知家中的尺寸,所以等到晚上回家量完後,才再到內湖的特力屋買材料。
自行裁作紗窗需要幾個材料與器具:

1、鋼網(是為了防老鼠的,但相對也不好裝)-------2.5尺*7尺 約75cm*220cm
2、橡皮條(為了固定在框邊用的)----------------45mm 一包
3、剪刀(本想用自已家中的,但又怕家中的無法剪鋼網,所以也買了一隻來用)----- 一把
4、滾輪車(用來將橡皮條壓入軌道中)------------一把

至於如何壓製地…有一些小動作要注意,未來有空再寫上來吧。

星期六, 4月 28, 2007

換工作前的心情

回來精業已經四年又四個月了,現在正包著雜物準備離開。
這次的離開,表面上很風光,也很不在意,一付充滿高興的樣子。
越接近離職的日子,開始覺得依依不捨。
地政,這個叫我又愛又恨的案子,讓我成長。
精業,這個叫我難分難捨的公司,讓我茁壯。
不過這次的離開,跟前一次不一樣。
這次的離開並非為了加薪升官不成,而是為了自我成長。
說到這裏…不捨的情緒又出現了。
精誠(前精業)難道無法讓我成長嗎?
一半一半。但又是什麼理由讓我下如此痛苦的決定呢?
人,是最大的影響因子。
地政案,經手了多少人,多少人因他負氣離開。
始終沒有人能用心去經營,用心去培養這個打不死的案子。
只祈導客戶別刁難我們,能夠隨便就隨便過了…。
完全不求專業的方法來處理事情,真心誠意的為客戶找到問題,解決問題。
我承認沒有一定找得到問題的方法,但至少要有誠意。
別再因為一點毛利、淨利,在那邊臉紅脖子粗地爭吵。
地政…我相信我會再回來的。
找不到伯樂,就自已作伯樂吧。

星期日, 3月 18, 2007

WII 蠟筆小新攻略 (轉貼網友kisamonkey的文章)

遊戲大概有廿五個 分為以下幾種:

四人遊戲 :
1.一二三木頭人
2.澆花
3.划船比賽
4.模仿動感超人
5.魔法圖片
6.平衡遊戲
7.推大球
8.射機器人遊戲
9.鐵壁機器人
10.頂足球遊戲
11.搧風攪拌遊戲
12.高空跳傘遊戲

二對二遊戲 :
1.灌氣球
2.挖球比賽

二人玩遊戲 :
1.跳輪胎
2.射水槍

一人玩遊戲 :
1.打地鼠(怪獸)
2.空中拍照
3.高爾夫
4.彈力棒
5.彈簧墊
6.我在哪裡
7.指揮家
8.灌氣彈珠占卜
9.翻紙牌


一開始進入遊戲 有五個選項可供選擇
故事模式 迷你小遊戲 超簡單遊戲 收集品 設定


在迷你小遊戲部分(包括人物):

人物一開始只能選擇 小新 廣志 美牙 小葵
破簡單故事模式 可選擇 風間 妮妮 正男 阿呆
破困難故事模式 可選擇 園長 上尾老師 吉永老師 松板老師
破第三次故事模式 可選擇 鋼彈 動感超人 咪咪 MOE P


小遊戲一開始只能選擇
(一二三木頭人 澆花 機器人對戰 走迷宮
破簡單故事模式 可選擇14種(跳輪胎.射水槍.打地鼠(怪獸).游泳比賽.灌氣球
挖球比賽.推大球.空中拍照.模仿動感超人.魔法圖片.平衡遊戲.
射機器人遊戲.鐵壁機器人.頂足球遊戲)
破困難故事模式 可選擇 搧風攪拌遊戲
破第三次故事模式 可選擇 高空跳傘遊戲


頂足球遊戲 :
遊戲一開始 足球會往下落 只要跟隨著畫面提示的方向
往上一頂 支持最久的人 即可獲勝

搧風攪拌遊戲 :
依照電腦提示 做出搧風以及攪拌的動作
分數越多 即為獲勝者

高空跳傘 :
從高空往下降落 以游泳的方式改變方向
吃空中的星星 可得分 分數越高即獲勝


超簡易小遊戲部分:
包括有高爾夫.彈力棒.彈簧墊
我在哪裡.指揮家.灌氣彈珠占卜.翻紙牌



故事模式:
小新一家人 為了獎品參加 最強家族的活動比賽
遊戲地圖上一共有五個地點 依序是
小新家(地圖中間) 百貨公司(地圖右上)幼稚園(地圖右下)
訓練中心(地圖左上) 公園(地圖左下)


如何控制方向:
控制器感應的部位朝上 按鈕朝向自己 (就可以用十字鍵控制左右移動)...推薦
控制器感應的部位朝前 則是用感應移動 (比較難控制)


遊戲內容:
一開始 會在小新家做 鍛鍊遊戲(澆花.一二三木頭人)

澆花 :
把游標指向未開花的種子 即可澆花
澆越多 分數越多

一二三木頭人 :
把控制器上下擺動(類似跑馬拉松的方式)即可前進
等到小白一轉頭
螢幕上會出現 箭頭朝上 朝下 朝左 朝右
把控制器(感應器朝上) 往前翻一下 往後一下 往左一下 往右一下
直到跑到終點 即過關



過關之後 出小新家
在路上 會遇到 星星 驚嘆號 點點點 在移動
只要操控小新 與之對話(即可得到 參加卷 或 一些小物品)
遇到星星(直接得到物品) 遇到驚嘆號(要玩丟紙牌遊戲 才能贏得物品)
遇到點點點(講一大堆話 狂按A 就能得到物品)

PS: 每玩一次遊戲 就需要參加卷 所以需要大量參加卷 路上沒有東西的時候
可以進入建築物裡面 再出來 外面就會有 星星 驚嘆號 點點點 在移動了
PS2:丟紙牌遊戲 玩法
當指標靠近對方的紙牌 你只要把控制器往前一甩 使對方紙牌翻過來 即可獲勝




公園的遊戲有四關(跳輪胎.射水槍.打地鼠(怪獸).划船比賽)

跳輪胎 :
控制器向上甩動 即可跳躍
甩的越大力 越過的輪胎格數就越多
分數超過30即可過關(每關評分細節不一)

射水槍 :
電腦倒數3秒 會自動剪刀石頭布
只要你獲勝 馬上按B 用水槍射向對方 輸的話 把控制器擺橫的
可躲過對方的水槍攻擊 分數超過30即可過關(每關評分細節不一)

打地鼠(怪獸) :
用控制器指著怪獸 用A鈕攻擊
有紅色 綠色 黃色怪獸 (黃色分數最多 且可以連續打)
分數超過30即可過關(每關評分細節不一)

划船比賽 :
把控制器按鈕面 面向自己 往前一翻
划船速度即可增加 反覆此動作 到達終點
分數超過30即可過關(每關評分細節不一)



幼稚園的遊戲有四關(灌氣球.挖球比賽.推大球.空中拍照)

灌氣球 :
把控制器當作打氣筒 上下打氣
超過30分即可過關(每關評分細節不一)

挖球比賽 : (超難)
運用手腕的的力量 像挖東西的方式
把球挖起 (其實還蠻難的 不過抓準感覺 可輕鬆獲勝)
超過30分即可過關(每關評分細節不一)

推大球 : (挺難)
把控制器感應的部位朝上 往前推 球即會前進
把控制器橫擺 即可以控制左右方向
超過30分即可過關(每關評分細節不一)

空中拍照 :
一開始 小新會類似跑步的動作
只要在白線前 把控制器往上一拉 做跳躍的動作
就會在空中做POSE (跟隨著電腦指示的動作做 即可)
超過30分即可過關(每關評分細節不一)



百貨公司的遊戲有四關(模仿動感超人.魔法圖片.平衡遊戲.射機器人遊戲)

模仿動感超人 :
動感超人會做動作 只要跟隨著電腦提示的畫面
擺動控制器 即可
超過30分即可過關(每關評分細節不一)

魔法圖片 :
只要找出跟電腦一樣的圖片即可
我方的照片 會從模糊逐漸變清楚
超過30分即可過關(每關評分細節不一)

平衡遊戲 : (很難)
只要在圓形的俵板上維持不掉落(電腦會撞你)
把電腦撞下俵板 分數超過30即可過關(每關評分細節不一)

射機器人遊戲 :
只要瞄準機器人身上的目標
按下B 分數比電腦多 即可獲勝
(射星星分數較多)



訓練中心有六個遊戲(高爾夫.彈力棒.彈簧墊.我在哪裡.指揮家.灌氣彈珠占卜)

高爾夫 :
以打高爾夫的姿勢揮杆 移動控制器即可控制球的方向
按住A 即可揮 有五次機會

彈力棒 :
把控制器當作彈力棒 上下搖動即可
他會計算次數 次數多 小心還會用露屁股彈

彈簧墊 :
以控制器上下彈 小新會越彈越高

我在哪裡 :
尋找與右下角一樣的小新

指揮家 :
類似太鼓達人 的打鼓方式
不過一錯 遊戲即結束

灌氣彈珠占卜:
以控制器上下灌氣 即會打出彈珠
彈珠落下的地方 即會占卜吉凶



過完 百貨公司 幼稚園 公園 (共12關) 會出現 最終戰-鐵壁機器人
(在訓練中心裡面)

鐵壁機器人 :
電腦操控著鐵壁機器人 並射出寶劍
小新只要檢掉落在地面的寶劍 趁著鐵壁機器人的空檔
將劍插入機器人身上 即可扣鐵壁機器人的血(扣到沒血 即獲勝)
小新只有三滴血 要預防被鐵壁機器人K到

星期四, 3月 01, 2007

如何在kickstart自動安裝時,利用usb來提供ks.cfg

在一般的文件中,可以得到ks.cfg的安裝資訊。但所提到的存放文件,不是floppy,就是cdrom
很少提到利用usb來存放。
在目前很少機器有提供floppy的情況下,cd-rw的片子可能手邊也沒有時
在不想浪費cd-r的片子的前提下,我期望能使用usb碟來存放kickstart的設定檔
況且,現在很多手機也支援usb碟的功能(像我的moto v3x),因此我覺得usb碟的實用性較大

在光碟開機後,出現boot:提示符號時,輸入以下的指令

boot:linux ks=hd:sda1:/ks.cfg <==如果你的電腦中沒有scsi的裝置,那麼usb碟就是sda

如果有其它的scsi的裝置,你可能要算一下…或是先輸入此碼,再安裝過程中,會出現錯誤時,再從(Ctrl+Alt+4)來看設備檔的訊息,判斷是那一個磁碟代號囉。

例如我公司的server有二個scsi 75g硬碟,因此我的usb會是第三顆scsi裝置
所以我的指令就需改成:

boot:linux ks=hd:sdc1:/ks.cfg

如此就可以邊修改ks.cfg 邊測試了。

如何在安裝linux時,利用vnc來遠端安裝

在一般linux安裝時,大多都是乖乖地在主機的螢幕面前,等待下一步的畫面出現。
現在有個方法可以不用在主機端發待了,可以在自已的位罝或遠端,透過vnc來監控操作安裝的畫面。
使用方法:

在安裝光碟開機後,出現boot:時,輸入以下的指令

boot:linux vnc vncpasswd=YourPWD

如此即可將安裝畫面建立一個vncserver的服務,提供遠端的電腦,以vncviewer或browser來連線使用了。

在rhel4上安裝oracle 9.2.0.4

如果是新安裝rhel 4 ,請記得在安裝的軟體中,勾選支援舊式程式函數
在安裝ORACLE 9.2.0.4之前,請記得安裝二個oracle的patch
p3006854及p4198954
安裝的方法:
先安裝p3006854,步驟是以root身份執行:

#unzip p3006854_9204_LINUX.zip
#cd 3006854
#sh rhel3_pre_install.sh

然後就可以再安裝p4198954 rpm檔
在安裝這個檔前,先檢查是否有以下的rpm存在:

rpm –qa fontconfig-devel freetype-devel libaio-devel xorg-x11-deprecated-libs-devel xorg-x11-devel

如果不存在,請先安裝完,再安裝p4198954_21 中的rpm檔

$unzip p4198954_21_LINUX.zip 在解開的目錄 4198954 下分別有:compat-oracle-rhel4-1.0-5.i386.rpm,compat-libcwait-2.0-2.i386.rpm 兩個rpm檔。

rpm –Uvh compat-oracle-rhel4-1.0-5.i386.rpm compat-libcwait-2.0-2.i386.rpm


如果忘了安裝p3006854的patch,會無法出現圖型化的安裝介面
如果忘了安裝p4198954_21的patch,會在安裝過程中,出現ins_plsql.mk的錯誤訊息

星期日, 2月 11, 2007

如何查詢sql 語法的Execution Plan

要能顯示Execution Plan 首先一定要先執行utlxplan.sql,一般而言這個檔案會被放在
$ORACLE_HOME/rdbms/admin中,因此可透過sqlplus來執行
SQL>@?/rdbms/admin/utlxplan.sql

Table created.

建立好後,顯示execution plan的方法有:
1、利用autotrace
set autotrace on (explain) (statistics)
on 查詢執行路徑和效能統計
on explain 只產生查詢執行路徑
on statistics 只產生效能統計
off 預設值 不產生報表

ex. select count(*) from dba_users;
SQL> /

COUNT(*)
----------
26


Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=FIRST_ROWS (Cost=23 Card=1 Bytes=
195)

1 0 SORT (AGGREGATE)
2 1 NESTED LOOPS (Cost=23 Card=6698 Bytes=1306110)
3 2 NESTED LOOPS (Cost=23 Card=82 Bytes=14924)
4 3 HASH JOIN (Cost=23 Card=1 Bytes=169)
5 4 HASH JOIN (Cost=21 Card=1 Bytes=156)
6 5 HASH JOIN (Cost=19 Card=1 Bytes=143)
7 6 MERGE JOIN (CARTESIAN) (Cost=2 Card=1 Bytes=78
)

8 7 TABLE ACCESS (BY INDEX ROWID) OF 'PROFILE$'
(Cost=1 Card=1 Bytes=39)

9 8 INDEX (RANGE SCAN) OF 'I_PROFILE' (NON-UNI
QUE) (Cost=1 Card=1)

10 7 SORT (JOIN) (Cost=1 Card=1 Bytes=39)
11 10 TABLE ACCESS (FULL) OF 'PROFILE$' (Cost=1
Card=1 Bytes=39)

12 6 TABLE ACCESS (FULL) OF 'USER$' (Cost=16 Card=8
2 Bytes=5330)

13 5 TABLE ACCESS (FULL) OF 'PROFNAME$' (Cost=1 Card=
82 Bytes=1066)

14 4 TABLE ACCESS (FULL) OF 'USER_ASTATUS_MAP' (Cost=1
Card=82 Bytes=1066)

15 3 TABLE ACCESS (CLUSTER) OF 'TS$'
16 15 INDEX (UNIQUE SCAN) OF 'I_TS#' (NON-UNIQUE)
17 2 TABLE ACCESS (CLUSTER) OF 'TS$'
18 17 INDEX (UNIQUE SCAN) OF 'I_TS#' (NON-UNIQUE)

2、利用tkprof 來進行sql trace
決定trace的level
a、db level
修改init中,timed_statistics=true
b、session level
alter session set sql_trace=true;
c、對某個session進行trace ,可用dbms_session
exec dbms_session.set_sql_trace_in_session(sid,serial#,true);
產生的trace會在user_dump_dest所指定的目錄中。

利用tkprof程式來分析trace file
tkprof tracefile outfile explain=user/passwd #記得user要和執行trace 的session相同

tkprof ora_21968_t.trc outfile.txt explain=xxx/ooo

TKPROF: Release 8.1.7.4.0 - Production on Mon Feb 12 14:08:02 2007

(c) Copyright 2000 Oracle Corporation. All rights reserved.

Trace file: ora_21968_t.trc
Sort options: default

******************************************************************************
count = number of times OCI procedure was executed
cpu = cpu time in seconds executing
elapsed = elapsed time in seconds executing
disk = number of physical reads of buffers from disk
query = number of buffers gotten for consistent read
current = number of buffers gotten in current mode (usually for update)
rows = number of rows processed by the fetch or execute call
******************************************************************************

select KCDE_1,KRMK,KCDE_2,KCNT
from
SRKEYN where 1=1 and KCDE_1='06' and substr(KCDE_2,1,2) <> '/*' order by
KCDE_1


call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 9 0.00 0.00 0 11 0 177
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 11 0.00 0.00 0 11 0 177

Misses in library cache during parse: 1
Optimizer goal: FIRST_ROWS
Parsing user id: 24 (MOICAD)

Rows Row Source Operation
------- ---------------------------------------------------
177 INDEX RANGE SCAN (object id 3291)


Rows Execution Plan
------- ---------------------------------------------------
0 SELECT STATEMENT GOAL: FIRST_ROWS
177 INDEX (RANGE SCAN) OF 'RKEYN_IDX1' (UNIQUE)

********************************************************************************

SELECT LPAD(TO_CHAR(SYSDATE,'YYYY')-1911,3,'0')
||TO_CHAR(SYSDATE,'MMDDHH24MISS') from DUAL

call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 2 0.00 0.00 0 0 0 0
Execute 2 0.00 0.00 0 0 0 0
Fetch 2 0.00 0.00 0 2 8 2
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 6 0.00 0.00 0 2 8 2

Misses in library cache during parse: 0
Optimizer goal: FIRST_ROWS
Parsing user id: 24 (MOICAD)

Rows Row Source Operation
------- ---------------------------------------------------
1 TABLE ACCESS FULL DUAL


Rows Execution Plan
------- ---------------------------------------------------
0 SELECT STATEMENT GOAL: FIRST_ROWS

SELECT LPAD(TO_CHAR(SYSDATE,'YYYY')-1911,3,'0')
||TO_CHAR(SYSDATE,'MMDDHH24MISS') from DUAL

call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 2 0.00 0.00 0 0 0 0
Execute 2 0.00 0.00 0 0 0 0
Fetch 2 0.00 0.00 0 2 8 2
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 6 0.00 0.00 0 2 8 2

Misses in library cache during parse: 0
Optimizer goal: FIRST_ROWS
Parsing user id: 24 (MOICAD)

Rows Row Source Operation
------- ---------------------------------------------------
1 TABLE ACCESS FULL DUAL


Rows Execution Plan
------- ---------------------------------------------------
0 SELECT STATEMENT GOAL: FIRST_ROWS
...

中間就省略不顯示。

Rows Execution Plan
------- ---------------------------------------------------
0 SELECT STATEMENT GOAL: FIRST_ROWS
0 SORT (UNIQUE)
0 UNION-ALL
0 CONCATENATION
0 FILTER
0 TABLE ACCESS GOAL: ANALYZED (FULL) OF 'CRSMS'
0 FILTER
0 TABLE ACCESS GOAL: ANALYZED (BY INDEX ROWID) OF
'CRSMS'
0 INDEX GOAL: ANALYZED (RANGE SCAN) OF 'CRSMS_IDX1'
(UNIQUE)
0 CONCATENATION
0 FILTER
0 FILTER
0 TABLE ACCESS GOAL: ANALYZED (BY INDEX ROWID) OF
'CRSMS'
0 INDEX GOAL: ANALYZED (RANGE SCAN) OF 'CRSMS_IDX3'

只列部份內容參考…

星期三, 2月 07, 2007

How to user perl DBI/DBD calling a stored procedure

metalink 62329.1

PURPOSE

This document provides an example of the method to call a PL/SQL-stored
procedure from a PERL script using the DBI/DBD interface.

SCOPE & APPLICATION

PERL cartridge developers, Web site administrators

RELATED DOCUMENTS

Note 62320.1 - Upgrading DBD/DBI
perldoc DBD::Oracle


This bulletin provides an example of calling a PL/SQL procedure from a PERL
script. It may be necessary to follow the steps in Note 62320.1 to upgrade
the versions of DBD/DBI if you intend to run this script through the PERL
cartridge.

This example is from the PERL DBD:Oracle documentation.

Create the following package in the schema you want to use:

CREATE OR REPLACE PACKAGE plsql_example
IS
PROCEDURE proc_np;

PROCEDURE proc_in (err_code IN NUMBER);

PROCEDURE proc_in_inout(test_num IN NUMBER,
is_odd IN OUT NUMBER);

FUNCTION func_np RETURN VARCHAR2;
END plsql_example;
/

CREATE OR REPLACE PACKAGE BODY plsql_example
IS
PROCEDURE proc_np IS
whoami VARCHAR2(20) := NULL;
BEGIN
SELECT USER INTO whoami FROM DUAL;
END;

PROCEDURE proc_in (err_code IN NUMBER) IS
BEGIN
RAISE_APPLICATION_ERROR(err_code, 'This is a test.');
END;

PROCEDURE proc_in_inout (test_num IN NUMBER,
is_odd IN OUT NUMBER) IS
BEGIN
is_odd := MOD(test_num, 2);
END;

FUNCTION func_np RETURN VARCHAR2 IS
ret_val VARCHAR2(20);
BEGIN
SELECT USER INTO ret_val FROM DUAL;
RETURN ret_val;
END;

END plsql_example;


The PERL script:
----------------- CUT HERE ----------------------
#!/usr/local/bin/perl

use DBI;

my($db, $csr, $ret_val);

# Connect to an Oracle database.
# Modify the following with suitable values for the net alias and your
# db userid and password
$db = DBI->connect('dbi:Oracle:your_db_alias','your_user','your_password')
or die "Unable to connect: $DBI::errstr";

# Set Raise Error so you do not have to check every DBI call.
# See the DBI (perldoc DBI) documentss now if you are not familiar with
# RaiseError.
$db->{RaiseError} = 1;

# Example 1

# This example demonstrates how to call a PL/SQL procedure that takes no
# parameters. This shows you the fundamentals of what you need to execute a
# PL/SQL procedure. Wrap your procedure call in a BEGIN END; block as you
# do with the SQL*Plus execute command.

print "Example 1...";
$csr = $db->prepare(q{
BEGIN
PLSQL_EXAMPLE.PROC_NP;
END;
});
$csr->execute;
print "PLSQL_EXAMPLE.PROC_NP called successfully\n\n";

# Example 2

# For this example, call a procedure that has one IN parameter. Here, use
# bind_param to bind out parameter to the prepared statement, as you can do for
# an INSERT, UPDATE, DELETE, or SELECT statement.

# You can use positional placeholders (for example, :1, :2, etc.) or Open
# Database Connectivity (ODBC) style placeholders (for example, ?). However,
# it is ideal to use Oracle's named placeholders if the DBI drivers support
# them (selected DBI drivers support them, so they are not portable).

my $err_code = -20001;

print "Example 2: Passing a parameter and catching an exception\n";
$csr = $db->prepare(q{
BEGIN
PLSQL_EXAMPLE.PROC_IN(:err_code);
END;
});

$csr->bind_param(":err_code", $err_code);

# PROC_IN will RAISE_APPLICATION_ERROR which will cause the execute to fail.
# Because we set RaiseError, the DBI will die, so we catch that with eval.

eval {
$csr->execute;
};
print "Called PLSQL_EXAMPLE.PROC_IN($err_code): \n",
"\$\@='$@'\n", "errstr=$DBI::errstr \n", "ret_val=$ret_val\n\n";

# Example 3

# Building on the last example, add one IN OUT parameter. Use a placeholder in
# the call to prepare. The difference is that we now call bind_param_inout to
# bind the value to the placeholder.

# The third parameter to bind_param_inout is the maximum size of the variable.
# You normally make this slightly larger than necessary. However, the PERL
# variable will have that much memory assigned to it, even if the actual value
# returned is shorter.

my $test_num = 5;
my $is_odd;

print
"Example 3: Calling PLSQL_EXAMPLE.PROC_IN_INOUT($test_num, \$is_odd)\n";
$csr = $db->prepare(q{
BEGIN
PLSQL_EXAMPLE.PROC_IN_INOUT(:test_num, :is_odd);
END;
});

# The value of $test_num is _copied_ here
$csr->bind_param(":test_num", $test_num);

$csr->bind_param_inout(":is_odd", \$is_odd, 1);

# The execute automagically updateS the value of $is_odd.
$csr->execute;

print "$test_num is ", ($is_odd) ? "odd - ok" : "even - error!", "\n\n";

# Example 4

# Treat the return value of a PL/SQL function the same as you treat a call to
# a function from SQL*Plus. Add a placeholder for the return value and bind it
# with a call to bind_param_inout so we can access its value after execute.

my $whoami = "";

print "Example 4: Calling funtion PLSQL_EXAMPLE.FUNC_NP\n";
$csr = $db->prepare(q{
BEGIN
:whoami := PLSQL_EXAMPLE.FUNC_NP;
END;
});

$csr->bind_param_inout(":whoami", \$whoami, 20);
$csr->execute;
print "Your database user name is $whoami\n\n";

# Close the cursor.
$csr->finish;

# Disconnect from the database.
$db->disconnect;

如何利用vncview將防火牆後端的畫面導到外部電腦上

公司的伺服器,除非有特別指定,否則是無法由外部直接存取的
利用vncview可以簡單到做到這項功能
公司 ==> 外部pc
vncserver ==> vncviewer(listener mode)

vncserver 如何開啟就不多說了
vncviewer就直接由<程式集>==>UltraVnc==>UltraVnc Viewer==>Run UltraVnc Viewer(Listener Mode)來執行

接著在vncserver的icon上,按右鍵出現選項,選項中的"add new client"
將vncviewer的ip打入,即可將畫面post到遠端的電腦上了

ps、vncviewer預設為5500 port,如果要改port的話,請修改捷徑
改為 vncviewer.exe" -listen 8800 <== 8800即為你要改變的port number

星期日, 1月 21, 2007

一個國家的錢,如果不用在教育上,一定用在監獄上。 " ~~沒錯!!!

" 一個國家的錢,

如果不用在教育上,

一定用在監獄上。 " ~~沒錯!!!




等待的投資



等待的投資 中國時報

◎文/洪蘭(中央大學認知神經科學研究所所長)



美國南加州大心理學的講座教授

雷恩博士

日前在榮總做了一場「腦與暴力行」的演講,

因為他是世界上,

唯一掃描過四十一名殺人犯大腦的人,

所以會場擠得滿滿的。



雷恩教授發現,

殺人犯的腦果然不一樣,

預謀形態的罪犯腦袋,

跟我們正常人差不多。



但是臨時起意,

! 衝動型的,

前腦就非常的不活化。



最令人驚訝的是,

他報告了一個他在非洲

模里西斯

做的兒童健康計畫的成果。



他們給一百名

三到五歲的孩子,

「豐富」的生長環境,

如額外的營養,像牛奶、魚肝油等,

每天二個半小時額外的運動,

及額外的活動如說故事給孩子聽、戶外教學,

帶去參觀爸爸工作的工廠、磨坊、烘焙坊等。



等到這些孩子長到十一歲時,

追蹤他們注意力的生理反應,

如膚電反應及腦波(EEG),

發現都比在一般家庭中,

成長的一百名對照組孩子,好很多。



到他們十七歲及二十三歲時,

再做這兩組孩子比對,

發現在反社會行為上有大不同。



童年期這二年的特別照顧,發生了影響,

他認為差別在於大腦的發展,

尤其是海馬迴、胼胝體及額葉的眼眶皮質的部分,

因為現在已知這些地方跟暴力行為有關。



他的演講跟我過去的想法一樣,

看到了數據,也更令我憂心,

因為前一天,

我正好從新竹尖石鄉的部落小學演講回來,

我看到了原住民教育的盲點,

如果雷恩教授是對的,

我們現在不改善,以後會付出社會成本。



這些孩子散居深山之中,

上學往返費時,所以大部分孩子住校,

有的學校住宿孩子高達90%,

而且有的是從幼稚園就住校,

看到小學一年級的學生,

在搓洗自己的衣服,很是不捨。



部落小學的老師流動率很高。



有的學校高達百分之八十,

教了一年便想請調回平地。



因為後山部落皆無公車,

除非自己有車,

不然困在山區,無法下山。



所有老師都很年輕,

幾乎沒有老師超過三十歲,

沒有結婚的老師,

有時不知怎樣去帶孩子,

尤其不是自己的孩子。



最嚴重的是隔代教養,

年輕人都在平地討生活,

孩子由祖父母帶。



看到幼稚園就住校的孩子,真是令人心酸。

一個還要媽媽抱抱的孩子,

孤獨地坐在台階上望著夕陽,

那個落寞的神情讓我腳步沈重,

登不上要離去的車。



一個國家的錢,

如果不用在教育上,

一定用在監獄上。



雷恩教授的研究指出,

大腦發展,

與暴力行為及反社會行為的關係。



童年期只要二年的額外照顧,

就可以避免以後很多的社會成本。



台灣不是沒有錢,

但是沒有用對地方。



我們從公投的那四億元,

或是支援馬其頓的三億美金就可以看出。



教育是百年大計,

不能要求立竿見影,馬上見效,

它是潛移默化,教化心靈的過程。



教育也不是蓋學校、買設備,

它最重要的是人,

是人的那顆熱忱的心。



對「人」我有信心,

因為這一次我們一起上山的,

有數位麗林國小很有經驗的老師,

她們放棄休假上山做義工。



也有義工媽媽,

跟我們上去講故事、教勞作,

甚至有義工媽媽,

為了準備教材做到手指起繭。



我沒有信心的是政府,

因為急功近利只看數字的人,

會失去人性的柔軟度。



我沒有想到部落老師的

偏遠加給

是依山高來畫分,

多少千公尺多少錢,

而不是依距離平地的遠近;



因此我看到

深山裡面的小學老師,

!

因為學校蓋在谷底而不是山頭,

一個月少領一千元的津貼。



看到每年

跨年晚會或嘉年華會,

一次幾百萬的造勢大手筆,

為什麼不把這些錢,

用來補貼公共汽車,

讓部落的人,有交通工具可以下山呢?

星期五, 1月 12, 2007

如何在oarcle 7上建立超過2g的export dump檔

由於我的客戶的資料庫有些還停留在oracle 7
而之前的資料量往往都超過exp的最大限制:2g
因此我利用以下的方法,建立一個pipe,將exp的資料經由pipe來放到新的檔案中
並以2g為單位做切割。

mknod /tmp/exp_pipe p
split -b2047m < /tmp/exp_pipe &
exp / file=/tmp/exp_pipe full=y



再利用以下的指令來進行合併
(其中的xaa xab xac是split程式自動產生的檔案)
mknod /tmp/imp_pipe p
cat xaa xab xac > /tmp/imp_pipe &
imp / file=/tmp/imp_pipe


星期一, 1月 08, 2007

Oracle 9i 在 rhel3上 install bug 修復方法

在rhel3上安裝oracle9.2.0.4
1在軟體存放在主機後,環境也設定好,準備執行runInstaller時,請先上
p3006854_9204_LINUX.zip這個patch(用來修復在rhel3上的錯誤)

2、安裝完軟體,建好資料庫後,最後到數第二個階段會出現 agent 的安裝錯誤
dbsnmpwd: line 156: 1868 Segmentation fault nohup $ORACLE_HOME/bin/dbsnmp $* >>$DBSNMP_WDLOGFILE 2>&1

請先下載opatch的軟體,來安裝相關的patch

3、安裝optach ,請解開 p2617419_10102_GENERIC.zip
Unxip p2617419_10102_GENERIC.zip
會產生Opatch這個目錄,請將其複製到$ORACLE_HOME/bin的目錄中
cd OPatch
cp –Rf * $ORACLE_HOME/bin

4.下載修正檔p3238244_9204_LINUX.zip
分別解開後,進去各別的目錄,執行修正檔的執行
例:
$ unzip p3238244_9204_LINUX.zip
$ cd 3238244
$ export PATH=$PATH:/sbin # the patch needs "fuser" which is located in /sbin
$ opatch apply

修正過程中,有問YN時,請輸入Y再按ENTER繼續

5.修正後,請再執行cd $ORACLE_HOME/network/lib
make –f ins_oemagent.mk install


6.最後驗正是否能正常啟動
agentctl start

星期二, 1月 02, 2007

突然無法開啟磁碟機><~

今天早上一開機,為了接某個朋友的yahoo即時通,升級到了8.0版,沒想到惡夢開始。
只要由"我的電腦"進去,點任何磁碟機,都會出現
Runtime Error
Program : C:\WINDOWS\explorer.exe
abnormal program termination
只能按"確定",重啟ie及桌面畫面。

本想把ie7移除,看能否還原到ie6解決這個問題…
無奈問題不在這…xxoo

後來在google大神的指導下,找到解決方法…
點選網際網路內容=>進階=> 把第三方瀏覽器延伸的鉤鉤取消
這樣就可以了><~~ 真是恐怖呀…