目前分類:Oracle & Unix (23)

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

工作上需要,從Excel 裡面,把資料放上 Oracle,

終於找到這個連線範例,真的好用啊 ^^

參考來源

 


'以下為 Select 範例

羅伯特 發表在 痞客邦 PIXNET 留言(1) 人氣()

以下文章轉載來自 oracle園地


另外聽說

IN 適合內外表都很大的情況,EXISTS 適合外表結果集很小的情況。


基本的Sql編寫注意事項
  • 儘量少用 IN 操作符,基本上所有的IN操作符都可以用EXISTS代替。
  • 不用NOT IN操作符,可以用NOT EXISTS或者外連接+替代。
  • Oracle 在執行IN子查詢時,首先執行子查詢,將查詢結果放入臨時表再執行主查詢。而EXISTS則是首先檢查主查詢,然後運行子查詢直到找到第一個匹配項。( Robert : 所以有EXISTS 快於 IN 之說 )
  • NOT EXISTS比NOT IN效率稍高。但具體在選擇IN或EXIST操作時,要根據主子表資料量大小來具體考慮。
  • 不用「<>」或者「!=」操作符。對不等於操作符的處理會造成全表掃瞄,可以用「<」 or 「>」代替。
  • Where子句中出現IS NULL或者IS NOT NULL時,Oracle會停止使用索引而執行全表掃瞄。可以考慮在設計表時,對索引列設置為NOT NULL。這樣就可以用其他操作來取代判斷NULL的操作。
  • 當通配符「%」或者「_」作為查詢字符串的第一個字符時,索引不會被使用。
  • 對於有連接的列「||」,最後一個連接列索引會無效。儘量避免連接,可以分開連接或者使用不作用在列上的函數替代。
  • 如果索引不是基於函數的,那麼當在Where子句中對索引列使用函數時,索引不再起作用。
  • Where 子句中避免在索引列上使用計算,否則將導致索引失效而進行全表掃瞄
  • 對資料類型不同的列進行比較時,會使索引失效。
  • 用「>=」替代「>」
  • UNION 操作符會對結果進行篩選,消除重複,資料量大的情況下可能會引起磁盤排序。如果不需要刪除重複記錄,應該使用UNION ALL。
  • Oracle 從下到上處理 Where 子句中多個查詢條件,所以表連接語句應寫在其他Where條件前,可以過濾掉最大數量記錄的條件必須寫在Where子句的末尾。
  • Oracle從右到左處理From子句中的表名,所以在From子句中包含多個表的情況下,將記錄最少的表放在最後。(只在採用RBO優化時有效,下文詳述)
  • Order By語句中的非索引列會降低性能,可以通過添加索引的方式處理。嚴格控制在Order By語句中使用表達式。
  • 不同區域出現的相同的Sql語句,要保證查詢字符完全相同,以利用SGA共享池,防止相同的Sql語句被多次分析。
  • 多利用內部函數提高Sql效率。
  • 當在Sql語句中連接多個表時,使用表的別名,並將之作為每列的前置碼。這樣可以減少解析時間。

需要注意的是,隨著Oracle的昇級,查詢優化器會自動對Sql語句進行優化,某些限制可能在新版本的Oracle下不再是問題。尤其是採用CBO(Cost-Based Optimization,基於代價的優化方式)時。

羅伯特 發表在 痞客邦 PIXNET 留言(0) 人氣()

常常有時候, 要更新資料之前, 總是要先判斷 Table 裡到底有沒有這筆資料的存在
若每次都來個 Select count('A') INTO v_cnt From Table ;
再來判斷 v_cnt 是否有大於零, 再來決定怎麼做的話, 總覺得太浪費時間了
雖然 debug 時, 這樣的判斷就變得很方便了, 可是若是想節省一點點時間的時候,
或許你可以嘗試下列這個做法....

羅伯特 發表在 痞客邦 PIXNET 留言(1) 人氣()

參考此網站

 

--連接資料庫
SQL> Connect IEPCS/IEPCS@test

羅伯特 發表在 痞客邦 PIXNET 留言(0) 人氣()

 

今天遇到一個情況,某一台主機的時間早了20分鐘,

由於想實做 Database Link , 所以想把兩台主機的時間調近一點,

由於這台主機是HP的,改了時間之後,卻發現 date 的語法有些不同,

而系統上用的時區竟然不是台灣的時區 GMT+8 ,改了之後發現,時間快了8小時,

羅伯特 發表在 痞客邦 PIXNET 留言(4) 人氣()

以下為實作過程

Step1:

首先,確認 伺服器的參數 global_names = False

( 假設由 Server A 連至 Server B ,下圖為 Server A 的情況,重設後需重新啟動資料庫 )

2010-04-21 17 17 07.png

羅伯特 發表在 痞客邦 PIXNET 留言(0) 人氣()

 

From 網路文章

本文引用自lcjan - Oracle系統效能低落,真正的瓶頸在哪裡?


在多次處理資料庫效能瓶頸的經驗中,有幾點是重要的方向:主機、Storage、作業系統、網路、資料庫、應用程式,有些是因,有些是果,當整體系 統效能不彰時,系統工程師可能會去監看主機磁碟、網路、記憶體的使用,可能會得到一個方向是指向資料庫,接著DBA去監看資料庫,從記憶體、效能、連線等 資訊的蒐集分析,又可能指向主機記憶體或不足導致SWAP,這樣的結論,看起來是買個記憶體來插上去就行了吧!當然不是,這些都可能是某些原因產生的結 果。

羅伯特 發表在 痞客邦 PIXNET 留言(0) 人氣()

 

 

 

 

原本用 smitty 備份 Datavg 都沒有問題 , 但是 10 月底, Server 換了一顆硬碟之後 ,

羅伯特 發表在 痞客邦 PIXNET 留言(0) 人氣()

 

 

利用 smitty vg 來備份 Datavg 時, 總是遇到下列錯誤...

0512-005 savevg : Backup Completed .........with errors

0512-038 savevg : Backup Completed .........with errors

羅伯特 發表在 痞客邦 PIXNET 留言(0) 人氣()

 

 

 

較慢

羅伯特 發表在 痞客邦 PIXNET 留言(0) 人氣()

 

 

到今天 Robert 才突然發現這個神奇的用法

Where 中竟然可以一次對到 SubQuery 回傳的兩個欄位

Oracle 不愧是 Database 中的王道啊

羅伯特 發表在 痞客邦 PIXNET 留言(0) 人氣()


使用 TO_CHAR 函数 可以將字格式化

SELECT TO_CHAR(12345678,'999,999,999') , TO_CHAR(12345678,'FM999,999,999') FROM DUAL
 

羅伯特 發表在 痞客邦 PIXNET 留言(0) 人氣()

imp test/test file=IEPCS_0601.dmp log=IMP0601.log fromuser=iepcs touser=iepcs tables=TB_126 ignore=y

 

可參考

http://blog.xuite.net/jackal/blog/17951856

 

羅伯特 發表在 痞客邦 PIXNET 留言(0) 人氣()

好清楚的觀念喔,我終於搞懂了

From 網路文章
http://www.orafaq.com/faq/what_is_the_difference_between_varchar_varchar2_and_char_data_types


What is the difference between VARCHAR, VARCHAR2 and CHAR data types?


羅伯特 發表在 痞客邦 PIXNET 留言(0) 人氣()

發現了一些新的用法 & Function

From 網路文章

http://www.orafaq.com/faq/how_does_one_implement_if_then_else_logic_in_a_select_statement

 


How does one implement IF-THEN-ELSE logic in a SELECT statement?

羅伯特 發表在 痞客邦 PIXNET 留言(0) 人氣()

 

 

 

最近剛好碰到這些問題,在網路上找到這個比較的差異,順道紀錄一下。

http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands

羅伯特 發表在 痞客邦 PIXNET 留言(0) 人氣()

結論是

在沒有將Constrains 給 Disable 前,不能直接Delete 或將 Drop  TABLE
這樣將會違反了oracle 的 Data 完整性。

以下為Robert 要將一個巨大的 Table ,刪去大部分的資料再重建,順便釋放 TableSpace
( K 國人程式寫不好 , 一天竟然有 13.5 萬筆資料寫入, 而且成長快速 , 目的與實作的結果差很遠)

羅伯特 發表在 痞客邦 PIXNET 留言(0) 人氣()

From 網路文章  http://tw.knowledge.yahoo.com/question/question?qid=1508112100544

tar 是Unix 上的檔案與目錄備份指令, 與它類似的指令是 cpio.

tar 的全名叫做 tape archive, 就是要把資料備份到tape. 但是, 不一定要備份到 tape, 也可以備份到檔案, 也可以備份到另一台主機.

tar 指令有一些限制, 使用時要小心.

羅伯特 發表在 痞客邦 PIXNET 留言(0) 人氣()


# errpt
IDENTIFIER TIMESTAMP  T C RESOURCE_NAME  DESCRIPTION
B617E928   0113043809 T H rmt0           TAPE OPERATION ERROR     --表 磁帶機錯誤 2009/01/13 04:38
#

羅伯特 發表在 痞客邦 PIXNET 留言(0) 人氣()

From 網路文章

http://www.iaiau.com/post/229/



set -o vi 以及 ksh -o vi ,的確給輸入帶來很大方便。

羅伯特 發表在 痞客邦 PIXNET 留言(0) 人氣()

1 2