目前分類:Oracle (17)

瀏覽方式: 標題列表 簡短摘要

  交接要離開的同事手上工作,可好,有個Smart Query需要在.NET下運行.很久沒遇到微軟的東東,用ODBC連Oracle.就在PC裝個Oracle XE練習.建ODBC比較常見的作法是從[控制台]去建,另一個方式是建立一個檔案,副檔名是udl,再double click就可以設定ODBC.如下:

image

Jemmy 發表在 痞客邦 留言(0) 人氣()

  壓力測試過程發現程式仍有Bug。OGG的Update有兩種DO_UPDATE_FILECOMP和DO_UPDATE_FILECOMP_PK(另兩種和Tandem有關,不予討論)。參考前一篇:http://tsaijemmy.spaces.live.com/blog/cns!4AD532D0CD18A21D!1693.entry。假設Table Foo的是複合key:ID、Name,而非key欄位叫CDate。這時好玩的地方就在下表DsColumn的method:

當執行Update Foo set CDate=sysdate where ID=? and Name=?,則觸發DO_UPDATE_FILECOMP。

Jemmy 發表在 痞客邦 留言(0) 人氣()

  Oracle Golden Gate(簡稱OGG)是Oralce出品的資料即時抄寫工具,它讀取redo.log來進行抄寫避免影響正在運作的Oracle的效能,目前可同步抄寫到Oracle、MySQL和SQL Server。OGG本身是一支standalone程式,也提供一個Java Adapter方便開發者客製抄寫作業。怎麼安裝自有Consultant處理,但實作Java Adapter還真的有些難度。這主題目前是我寫過最難寫的。

  OGG啟動後,可以切換到OGG Home目錄執行ggsci執行檔,會出帶出ggsci>的提示。下達info all命令後,可以work的狀況下,會顯示三類Extract(不是三個),Extract之於OGG類似於Process之於OS。其實extract就是process,可以用ps -ef | grep ogg觀察。這三類Extract分別是:

Jemmy 發表在 痞客邦 留言(0) 人氣()

  這是個令人詬病的錯誤代碼,Oracle的Sequence物件提供nextval和currval兩個method,nextval取得下一個序號值返回,而顧名思義,currval應當是取得目前序號值返回。事實上錯,執行currval之前必須先執行過nextval才能生效,否則就丟出ORA-08002錯誤代碼,而currval需保持在同一個Session才有效用。Oracle這樣設計的用意…,只能逼得我改變insert策略,在insert的UI時先顯示nextval的值,按儲存後,原本SQL要insert id欄位可以用nextval變成抓UI的ID值來insert。女子火闌。

Jemmy 發表在 痞客邦 留言(0) 人氣()

  有別於PostgreSQL可以直接把欄位定義為陣列型態,Oracle是透過自訂型態的方式達成目標,飯粒如下:

create or replace Type varray_phone as varray(3) of varchar2(20)

  上述是定義一個名為varray_phone的Type,是維度為三個varchar2(20)的資料型態。所以varray是宣告陣列維度,of後接的不止Oracle的資料型態度,也可以接更複雜的Oracle Object型態,複雜的部份就不討論。而其Create、Insert的用法很簡單,如下:

Jemmy 發表在 痞客邦 留言(0) 人氣()

  Oracle XE是Oracle 10g免費版本,只能建一個SID叫XE,預設http port和其它的測試用的Web Server都一樣是8080。現在找到解法,這是在Windows如下:

1.執行Oracle XE提供的SQL Plus的Console(捷徑名是:執行SQL命令)。

Jemmy 發表在 痞客邦 留言(0) 人氣()

  同事詢問我修改過的Stored Procedure裡,Return和Exit有什麼不一樣,一時我也搞不清楚。後來看了一下,原來Exit指令是用於跳出Loop往下執行,例如:

If (v_count > 0 Then

Jemmy 發表在 痞客邦 留言(0) 人氣()

在Oracle的Stored Procedure執行truncate table怎麼做,無法直接下達指令,語法如下:

execute immediate 'truncate table table_name’;

Jemmy 發表在 痞客邦 留言(0) 人氣()

  市面上最有名的DB Tool應該是要收錢的TOAD,但免費的話有SQuirrel SQL Client,係由Java編寫,使用JDBC連結。而若專用於Oracle的免費工具,是Sql Developer,也是使用JDBC,不用像TOAD要事先裝Oracle Client。這樣的工具雖然方便,但要透過VPN連遠端DB,效能是非常的低落,不得已也只能回到最原始的使用Terminate,下Script產出結果後用FTP傳回。

  預先寫個Oracle的export script,叫exp.sql好了,內容如下:

Jemmy 發表在 痞客邦 留言(0) 人氣()

資料來源: 永遠的Unix (寫得很好, 只好轉貼)

在oracle中sequence就是所謂的序列號,每次取的時候它會自動增加,一般用在需要按序列號排序的地方。 

Jemmy 發表在 痞客邦 留言(0) 人氣()

  若不是經歷本專案,還不知Oracle有這種特殊的語法。如下:

Update (Select * from table1 where fld='2') set fld3='A'。

Jemmy 發表在 痞客邦 留言(0) 人氣()

  感謝同事提供這個SQL:

select to_date('20030601', 'yyyymmdd') + rownum - 1 as dt

Jemmy 發表在 痞客邦 留言(0) 人氣()

Create table test (col1 char(10), col2 varchar2(10));

insert into test ('jemmy', 'jemmy');

Jemmy 發表在 痞客邦 留言(0) 人氣()

ORA-12519: TNS:no appropriate service handler found (用戶端連接間歇性失敗),有時會連得上有時連不上,可能是資料庫上當前的連接數目已經超過了它能夠處理的最大值。

select count(*) from v$process --當前的連接數

select value from v$parameter where name = 'processes' --資料庫允許的最大連接數

修改最大連接數:

alter system set processes = 300 scope = spfile;

重啟資料庫:

shutdown immediate;

startup;

--查看當前有哪些用戶正在使用資料

SELECT osuser, a.username,cpu_time/executions/1000000||'s', sql_fulltext,machine from v$session a, v$sqlarea b where a.sql_address =b.


還沒完,這問題是在C3P0遇到的,經過另篇文章查到,上面的錯誤是由於Oracle Express 10g的預設配置連接數只有20,而在hibernate.cfg.xml配置使用c3p0連接池的最大連接數遠遠超過了這個資料庫允許的數量,因此但頻繁的去連接資料庫的時候,無法獲得連接,資料庫Listner就直接拒絕連接的請求,因此只要修改c3p0連接池最大最小連接數為。c3p0可以設置如下:

<property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.max_size">10</property>


問題來了,在系統上線前就要估算有多少用戶會使用這個DB,而每個用戶會使用多少connection,總和不能超過Oracle配置的連線數(看該DB獲得Oracle多少授權connection數),看來Project的Architecture也得注意這一塊


Jemmy 發表在 痞客邦 留言(0) 人氣()

以前不太習慣在DB上做資料庫關聯,用SQurirreL SQL Client工具匯出的Schema無法匯到另一個DB,有一個原因如下:

ALTER TABLE Table_A ADD CONSTRAINT TN_BASICFLOWUSAGE_FK FOREIGN KEY (A_ID) REFERENCES Table_B(A_ID) ON DELETE CASCADE ON UPDATE CASCADE;

Jemmy 發表在 痞客邦 留言(0) 人氣()

Oracle本身提供Stored ProcedureFunction call兩種機制便於開發者將loading轉給Oracle負擔:Stored Procedure為預先編譯,可獲較佳效能;而Function call則可被SQL語法呼叫,具重複使用功能。茲區分如下:
  Stored Procedure Function call
Compiler 預先編譯存到DB 執行期編譯
Return value 可不回傳resultset,最多回傳1024個 至少且只能回傳一個resultset
被SQL引用 不能 能,包括where, having...
update Database 能使用commit 無法使用commit
mainly used process the tasks compute values
Queue住的問題 未知

Jemmy 發表在 痞客邦 留言(0) 人氣()

今天回到富邦,再度用Perl匯出資料結果出現ORA-12705的錯誤訊息,原因是NLS_LANG在regedit機碼值是NA
為語系的編碼,是我在自己的電腦上安裝了Oracle Client後又移除所遺留下來的.

Jemmy 發表在 痞客邦 留言(0) 人氣()