交接要離開的同事手上工作,可好,有個Smart Query需要在.NET下運行.很久沒遇到微軟的東東,用ODBC連Oracle.就在PC裝個Oracle XE練習.建ODBC比較常見的作法是從[控制台]去建,另一個方式是建立一個檔案,副檔名是udl,再double click就可以設定ODBC.如下:
目前分類:Oracle (17)
- Aug 20 Fri 2010 15:05
OracleXE在udl的設定
- Jul 27 Tue 2010 19:59
OGG for Java開發:PK欄位的Update
壓力測試過程發現程式仍有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。
- Jul 12 Mon 2010 19:20
OGG for Java開發
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分別是:
- May 15 Sat 2010 18:35
ORA-08002
這是個令人詬病的錯誤代碼,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。女子火闌。
- May 08 Sat 2010 21:39
Oracle的Array型態定義與存取
有別於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的用法很簡單,如下:
- Sep 23 Wed 2009 14:58
How to change OracleXE HTTP Port on Windows
Oracle XE是Oracle 10g免費版本,只能建一個SID叫XE,預設http port和其它的測試用的Web Server都一樣是8080。現在找到解法,這是在Windows如下:
1.執行Oracle XE提供的SQL Plus的Console(捷徑名是:執行SQL命令)。
- Sep 22 Tue 2009 15:41
PL/SQL的Exit與Return
同事詢問我修改過的Stored Procedure裡,Return和Exit有什麼不一樣,一時我也搞不清楚。後來看了一下,原來Exit指令是用於跳出Loop往下執行,例如:
If (v_count > 0 Then
- Aug 27 Thu 2009 18:22
Oracle的Stored Procedure執行truncate table
在Oracle的Stored Procedure執行truncate table怎麼做,無法直接下達指令,語法如下:
execute immediate 'truncate table table_name’;
- Aug 26 Wed 2009 23:21
oracle export script及Tool
市面上最有名的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好了,內容如下:
- Aug 20 Thu 2009 11:36
Oracle的Sequence用法
- Jul 22 Wed 2009 16:19
Oracle特有Update...Select語法
若不是經歷本專案,還不知Oracle有這種特殊的語法。如下:
Update (Select * from table1 where fld='2') set fld3='A'。
- Jul 01 Wed 2009 14:44
日期串列的SQL
感謝同事提供這個SQL:
select to_date('20030601', 'yyyymmdd') + rownum - 1 as dt
- May 25 Mon 2009 15:51
Oracle的字元型態差異
Create table test (col1 char(10), col2 varchar2(10));
insert into test ('jemmy', 'jemmy');
- Mar 19 Thu 2009 18:40
ORA-12519: TNS:no appropriate service handler found解法
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也得注意這一塊
- Jan 09 Fri 2009 15:52
Oracle Note
以前不太習慣在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;
- Jul 29 Sun 2007 00:22
Oracle的Function,Procedure,Cursor
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住的問題 | 未知 | 會 |
- Jul 23 Mon 2007 15:22
ORA-12705語系設定錯誤