SQL語法 | PL/SQL | Function | TRIGGER | StoreProc | DBA

2009年12月28日 星期一

關於Windows Oracle「ORA-12638 Credential retrieval failed」

1. 發生狀況:在資料庫(Server:Oracle 10g / Windows)進行抄寫時,出現「ORA-12638:Crendential retrieval failed(證明資料擷取失敗)」錯誤訊息。

2.說明:

Client端無法登入到遠端Server時,就會出現該狀況。

3.可能原因:
Server有開放OS認證模式,已知在Windows機器上,容易導致client端抄寫失敗


4.解決:
(1)登入到抄寫的Server(也就是提供資料的Oracle 10g機器)上的Windows作業系統。
(2)編輯「%Oracle_HOME%\product\10.1.0\db_1\NETWORK\ADMIN\sqlnet.ora」檔案,做如下方框內的修正:
# This file is actually generated by netca. But if customers choose to
# install "Software Only", this file wont exist and without the native
# authentication, they will not be able to connect to the database on NT.

#SQLNET.AUTHENTICATION_SERVICES = (NTS) --> 註解這一行,取消OS認證!
NAMES.DIRECTORY_PATH= (TNSNAMES)

(3)修改完成後存檔離開。離開後,可以再試試看DB抄寫,應該要能正常運作!

2009年12月18日 星期五

查看那些 table被lock

之前的工作從來沒有遇過 table 被 lock住, 但是到了新的環境居然table三天兩頭被lock, 我猜是ap開發習慣差異導致, anyway 以下的 sql是查看那些 table被lock的語法
select  

oracle_username os_user_name,

locked_mode,

object_name,

object_type

from v$locked_object a,dba_objects b

where a.object_id = b.object_id

DBA

Clear the Shared Pool及ORA-04031

有無清除Oracle先前Select的方法,

想用來評估新的SQL語句Perfromance優劣。

答案是有的,清空Shared Pool,語法如下:

ALTER SYSTEM FLUSH SHARED_POOL;

這通常也就是被拿來做Performance分析。

另外一個用途是當發生ORA-04031時,先拿來應急,

再慢慢找出根本原因及解決之道。

2009年12月17日 星期四

oracle 日期常用函數 (SYSDATE、日期格式)

SYSDATE
--◎ 可得到目前系統的時間

ex.
select sysdate from dual;

sysdate
----------
20-SEP-07

常用之日期格式

日期格式 說明
------------------------------------------------------------------------
YYYY/MM/DD -- 年/月/日
YYYY -- 年(4位)
YYY -- 年(3位)
YY -- 年(2位)
MM -- 月份
DD -- 日期
D -- 星期
-- 星期日 = 1 星期一 = 2 星期二 = 3
-- 星期三 = 4 星期四 = 5 星期五 = 6 星期六 = 7

DDD -- 一年之第幾天
WW -- 一年之第幾週
W -- 一月之第幾週
YYYY/MM/DD HH24:MI:SS -- 年/月/日 時(24小時制):分:秒
YYYY/MM/DD HH:MI:SS -- 年/月/日 時(非24小時制):分:秒
J -- Julian day,Bc 4712/01/01 為1
RR/MM/DD -- 公元2000問題
            -- 00-49 = 下世紀;50-99 = 本世紀
ex.
select to_char(sysdate,'YYYY/MM/DD') FROM DUAL; -- 2007/09/20
select to_char(sysdate,'YYYY') FROM DUAL; -- 2007
select to_char(sysdate,'YYY') FROM DUAL; -- 007
select to_char(sysdate,'YY') FROM DUAL; -- 07
select to_char(sysdate,'MM') FROM DUAL; -- 09
select to_char(sysdate,'DD') FROM DUAL; -- 20
select to_char(sysdate,'D') FROM DUAL; -- 5
select to_char(sysdate,'DDD') FROM DUAL; -- 263
select to_char(sysdate,'WW') FROM DUAL; -- 38
select to_char(sysdate,'W') FROM DUAL; -- 3
select to_char(sysdate,'YYYY/MM/DD HH24:MI:SS') FROM DUAL; -- 2007/09/20 15:24:13
select to_char(sysdate,'YYYY/MM/DD HH:MI:SS') FROM DUAL; -- 2007/09/20 03:25:23
select to_char(sysdate,'J') FROM DUAL; -- 2454364
select to_char(sysdate,'RR/MM/DD') FROM DUAL; -- 07/09/20