普通參數(shù):也就是Oracle系統(tǒng)正常使用的一些參數(shù),
創(chuàng)新互聯(lián)是一家專業(yè)提供金口河企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、H5開發(fā)、小程序制作等業(yè)務(wù)。10年已為金口河眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
非凡參數(shù):包括三種,過時(shí)參數(shù)、強(qiáng)調(diào)參數(shù)和隱藏參數(shù)。
隨著Oracle數(shù)據(jù)庫新版本的發(fā)布,相應(yīng)每次都會增加或者刪除一些參數(shù)。下面具體介紹如何查詢當(dāng)前系統(tǒng)版本中的各種參數(shù)情況。
一、過時(shí)參數(shù) 和 強(qiáng)調(diào)參數(shù)
Oracle 數(shù)據(jù)庫中,系統(tǒng)提供了幾個(gè)視圖可以查看系統(tǒng)參數(shù)的情況。視圖 V$OBSOLETE_PARAMETER 中含有所有的過時(shí) (obsolete) 和強(qiáng)調(diào) (underscored) 參數(shù)。
這里首先說明一下什么是 Oracle 的過時(shí) (obsolote) 和強(qiáng)調(diào) (underscored) 參數(shù),過時(shí)參數(shù),顧名思義就是在 Oracle 以前的版本中存在,但在新版本中已經(jīng)淘汰了的參數(shù),已經(jīng)不再使用;而強(qiáng)調(diào)參數(shù),是指那些在新版本中保留了下來,但是除非非凡需要不希望用戶使用的那些參數(shù)。在視圖 V$OBSOLETE_PARAMETER 中,包含這些參數(shù)的名稱和一個(gè)標(biāo)志字 ISSPECIFIED ,該標(biāo)志字用來指出這個(gè)參數(shù)是否在 init.ora 文件中已實(shí)際設(shè)置。 下面的 SQL 腳本列出了當(dāng)前系統(tǒng)中所有的過時(shí)參數(shù)名稱以及它們是否在當(dāng)前系統(tǒng)中設(shè)定。
/* Formatted on 2010-5-12 17:46:27 (QP5 v5.115.810.9015) */
SELECT name, isspecified FROM v$obsolete_parameter;
上面談到, Oracle 系統(tǒng)并沒有將 V$OBSOLETE_PARAMETER 視圖中的所有參數(shù)均丟棄,而是將其中的一部分轉(zhuǎn)換為強(qiáng)調(diào)參數(shù),下面就來討論如何查看這些參數(shù)是已被丟棄還是被轉(zhuǎn)換。這可以通過系統(tǒng)視圖 X$KSPPO 來查看,該視圖中包含一個(gè)名為 KSPPOFLAG 的字段,用來指明該參數(shù)在當(dāng)前版本中是被丟棄還是被強(qiáng)調(diào),假如該值為 1 ,則表示該參數(shù)已被丟棄,該值為 2 ,則表明該參數(shù)現(xiàn)為強(qiáng)調(diào)參數(shù)。
選中樹形目錄中監(jiān)聽程序項(xiàng),再點(diǎn)擊左上側(cè)“+”按鈕添加監(jiān)聽程序,點(diǎn)擊監(jiān)聽程序目錄,默認(rèn)新加的監(jiān)聽器名稱是LISTENER(該名稱也可以 由任意合法字符命名)。選中該名稱,選中窗口右側(cè)欄下拉選項(xiàng)中的“監(jiān)聽位置”,點(diǎn)擊添加地址按鈕。在出現(xiàn)的網(wǎng)絡(luò)地址欄的協(xié)議下拉選項(xiàng)中選中 “TCP/IP”,主機(jī)文本框中輸入主機(jī)名稱或IP地址(如果主機(jī)即用作服務(wù)端也作為客戶端,輸入兩項(xiàng)之一均有效;如果主機(jī)作為服務(wù)端并需要通過網(wǎng)絡(luò)連 接,建議輸入IP地址),端口文本框中輸入數(shù)字端口,默認(rèn)是1521,也可以自定義任意有效數(shù)字端口。配置好的監(jiān)聽位置如下圖示:
2
選 中窗口右側(cè)欄下拉選項(xiàng)中的“數(shù)據(jù)庫服務(wù)”,點(diǎn)擊添加數(shù)據(jù)庫按鈕。在出現(xiàn)的數(shù)據(jù)庫欄中輸入全局?jǐn)?shù)據(jù)庫名,如myoracle。注意這里的全局?jǐn)?shù)據(jù)庫名與數(shù)據(jù) 庫SID有所區(qū)別,全局?jǐn)?shù)據(jù)庫名實(shí)際通過域名來控制在同一網(wǎng)段內(nèi)數(shù)據(jù)庫全局命名的唯一性,就如Windows下的域名控制器,如這里可以輸入 myoracle.192.168.1.5。Oracle主目錄可以不填寫,輸入SID,如myoracle。完整的數(shù)據(jù)庫服務(wù)配置如下圖示:
保 存以上配置,默認(rèn)即可在Oracle安裝目錄下找到監(jiān)聽配置文件 (Windows下如D:oracleora92networkadminlistener.ora,Linux/Unix下$ ORACLE_HOME/network/admin/listerer.ora)。至此,Oracle服務(wù)端監(jiān)聽器配置已經(jīng)完成。
本地服務(wù)名配置(Tnsnames)
本 地服務(wù)名是基于Oracle客戶端的網(wǎng)絡(luò)配置,所以,如果客戶端需要連接數(shù)據(jù)庫服務(wù)器進(jìn)行操作,則需要配置該客戶端,其依附對象可以是任意一臺欲連接數(shù)據(jù) 庫服務(wù)器進(jìn)行操作的pc機(jī),也可以是數(shù)據(jù)庫服務(wù)器自身。如前面所介紹,可以利用Oracle自帶的圖形化管理工具Net Manager來完成Oracle客戶端的配置。選中如圖(一)中的服務(wù)命名,再點(diǎn)擊左上側(cè)“+”按鈕,彈出如下圖示對話框:
輸入Net服務(wù)名,如myoracle,點(diǎn)擊下一步,進(jìn)入下圖示對話框:
選中TCP/IP(Internet協(xié)議),點(diǎn)擊下一步,如下圖示:
輸入主機(jī)名與端口號。注意這里的主機(jī)名與端口號必須與數(shù)據(jù)庫服務(wù)器端監(jiān)聽器配置的主機(jī)名和端口號相同。點(diǎn)擊下一步,如下圖示:
選 中(Oracle8i或更高版本)服務(wù)名,輸入服務(wù)名。這里的服務(wù)名實(shí)際上就是數(shù)據(jù)庫服務(wù)器端監(jiān)聽器配置中的全局?jǐn)?shù)據(jù)庫名,前者與后者必須相同。連接類型 通常選專用服務(wù)器,這要視數(shù)據(jù)庫服務(wù)器的配置而定,如果配置的共享數(shù)據(jù)庫服務(wù)器,這里的連接類型就要選共享服務(wù)器,否則建議選專用服務(wù)器(關(guān)于專用服務(wù)器 的介紹請參閱相關(guān)文檔)。配置好后點(diǎn)擊下一步,如下圖示:
如 果數(shù)據(jù)庫服務(wù)器端相關(guān)服務(wù)啟動(dòng)了,可以點(diǎn)擊測試按鈕進(jìn)行連接測試。Oracle默認(rèn)是通過scott/tiger用戶進(jìn)行測試連接,由于scott用戶是 Oracle自帶的示例用戶,對于正式的業(yè)務(wù)數(shù)據(jù)庫或?qū)I(yè)測試數(shù)據(jù)庫可能沒有配置這個(gè)用戶,所以需要更改成有效的用戶登錄才可能測試成功。如果這里測試連 接不成功,也不要緊,先點(diǎn)完成按鈕結(jié)束配置。
回 到Oracle網(wǎng)絡(luò)管理器(Oracle Net Manager)主窗口,保存配置,默認(rèn)即可在Oracle安裝目錄下找到本地服務(wù)名配置文件 (Windows下如D:oracleora92networkadmintnsnames.ora,Linux/Unix下$ ORACLE_HOME/network/admin/ tnsnames.ora)。配置完成的本地服務(wù)名如下圖示:
樹形目錄下的服務(wù)命名可以通過編輯菜單里的重命名菜單更改成任意合法字符組成的服務(wù)名稱,注意服務(wù)名稱前不能有空格字符,否則可能無法連接數(shù)據(jù)庫服務(wù)器。
連接數(shù)據(jù)庫服務(wù)器
(1) 啟動(dòng)服務(wù)器端監(jiān)聽器與數(shù)據(jù)庫服務(wù)
Linux/Unix下,啟動(dòng)監(jiān)聽器:
$ lsnrctl start
關(guān)閉監(jiān)聽器:
$ lsnrctl stop
查看監(jiān)聽狀態(tài):
$ lsnrctl status
啟動(dòng)數(shù)據(jù)庫:
$ sqlplus /nolog
SQLconn sys@myoracle as sysdba --這里的myoracle是前面配置的客戶端本地服務(wù)名
或
SQLconn / as sysdba
SQLstartup
Windows下,啟動(dòng)監(jiān)聽器:
C:lsnrctl start
啟動(dòng)Oracle實(shí)例服務(wù):
C:oradim ?a href="" class="none" title="cs" rel="external"cstartup –sid myoracle
關(guān)閉Oracle實(shí)例服務(wù):
C:oradim –shutdown –sid myoracle
以上服務(wù)必須同時(shí)啟動(dòng),客戶端才能連接數(shù)據(jù)庫。由于默認(rèn)配置的監(jiān)聽器名稱是Listener,上述命令可以正常啟動(dòng)監(jiān)聽器,如果監(jiān)聽器名稱是其它名稱,如aListener,則需要用下列方式才能啟動(dòng):
Linux/Unix下:
$ lsnrctl start aListener
Windows下:
C:lsnrctl start aListener
(2) 測試連接數(shù)據(jù)庫服務(wù)器
測試的方法多種多樣,可以在上面配置本地服務(wù)名時(shí)進(jìn)行測試,也可以是第三方客戶端工具,如PL/SQL Developer,最方便的是用Oracle自帶的sqlplus工具,以下利用sqlplus進(jìn)行測試:
C:sqlplus /nolog
SQLconn zgh@myoracle
已連接。
客戶端連接服務(wù)器端常見問題排除方法
要排除客戶端與服務(wù)器端的連接問題,首先檢查客戶端配置是否正確(客戶端配置必須與數(shù)據(jù)庫服務(wù)器端監(jiān)聽配置一致),再根據(jù)錯(cuò)誤提示解決。下面列出幾種常見的連接問題:
1、 ORA-12541: TNS: 沒有監(jiān)聽器
顯而易見,服務(wù)器端的監(jiān)聽器沒有啟動(dòng),另外檢查客戶端IP地址或端口填寫是否正確。啟動(dòng)監(jiān)聽器:
$ lsnrctl start
或
C:lsnrctl start
2、 ORA-12500: TNS: 監(jiān)聽程序無法啟動(dòng)專用服務(wù)器進(jìn)程
對于Windows而言,沒有啟動(dòng)Oracle實(shí)例服務(wù)。啟動(dòng)實(shí)例服務(wù):
C:oradim –startup -sid myoracle
3、 ORA-12535: TNS: 操作超時(shí)
出現(xiàn)這個(gè)問題的原因很多,但主要跟網(wǎng)絡(luò)有關(guān)。解決這個(gè)問題,首先檢查客戶端與服務(wù)端的網(wǎng)絡(luò)是否暢通,如果網(wǎng)絡(luò)連通,則檢查兩端的防火墻是否阻擋了連接。
4、 ORA-12154: TNS: 無法處理服務(wù)名
檢 查輸入的服務(wù)名與配置的服務(wù)名是否一致。另外注意生成的本地服務(wù)名文件(Windows下如D:oracleora92networkadmin tnsnames.ora,Linux/Unix下/network/admin/tnsnames.ora)里每項(xiàng)服務(wù)的首 行服務(wù)名稱前不能有空格。
5、 ORA-12514: TNS: 監(jiān)聽進(jìn)程不能解析在連接描述符中給出的 SERVICE_NAME
打開Net Manager,選中服務(wù)名稱,檢查服務(wù)標(biāo)識欄里的服務(wù)名輸入是否正確。該服務(wù)名必須與服務(wù)器端監(jiān)聽器配置的全局?jǐn)?shù)據(jù)庫名一致。
6、 Windows下啟動(dòng)監(jiān)聽服務(wù)提示找不到路徑
用 命令或在服務(wù)窗口中啟動(dòng)監(jiān)聽提示找不到路徑,或監(jiān)聽服務(wù)啟動(dòng)異常。打開注冊表,進(jìn)入HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/OracleOraHome92TNSListener項(xiàng),查看ImagePath字符串項(xiàng)是否存在,如果沒 有,設(shè)定值為D:oracleora92BINTNSLSNR,不同的安裝路徑設(shè)定值做相應(yīng)的更改。這種方法同樣適用于Oracle實(shí)例服務(wù),同 上,找到如同HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/Oracle ServiceMYORACLE項(xiàng),查看ImagePath字符串項(xiàng)是否存在,如果沒有,則新建,設(shè)定值為d:oracleora92 binORACLE.EXE MYORACLE。
以上是Oracle客戶端連接服務(wù)器端常見的一些問題,當(dāng)然不能囊括所有的連接異常。解決問題的關(guān)鍵在于方法與思路,而不是每種問題都有固定的答案。
第一種:只讀。參數(shù)是只讀的,不能修改,即調(diào)用時(shí)傳遞進(jìn)來的是常量,或者變量(但變量不能在存儲過程中修改)。通常select及DML類型的存儲過程傳遞的是in類型的參數(shù)。
第二種:只寫。忽略調(diào)用語句傳遞的任何參數(shù),并在函數(shù)(過程)內(nèi)部給這些參數(shù)賦值,因此是只寫的。(這種情況是在函數(shù)或過程內(nèi)部給參數(shù)重新賦值,但重新賦值后的參數(shù)是無法被外部調(diào)用的(好像游標(biāo)類型的參數(shù)除外))
CREATE OR REPLACE? PROCEDURE "SCOTT"."SWAP" (firstValue out
number, secondValue out? number) is
temp number;
begin
temp := firstValue;
firstValue := secondValue;
secondValue := temp;
end swap;
外部調(diào)用:
set serveroutput on;
declare
firstVal number;
secondVal number;
begin
firstVal := 10;
secondVal := 20;
scott.swap(firstVal,secondVal);
dbms_output.put_line('first is ' || firstVal);
dbms_output.put_line('second is ' || secondVal);
end;
無法在外部訪問到firstValue與secondValue的值。此時(shí)打印出的結(jié)果為:
first is
second is
第三種:讀或?qū)?。這可以完全控制參數(shù),讀取傳遞的參數(shù)的值。可以再函數(shù)(過程)內(nèi)部修改參數(shù)的值,在退出函數(shù)(過程)后,這些參數(shù)被賦給在函數(shù)內(nèi)部寫入的值,這樣就可以返回多個(gè)值。(即入口參數(shù)寫入值后,可以傳遞到函數(shù)(過程)的外部,供外部調(diào)用的時(shí)候使用)
ps:函數(shù)中的返回值為如下幾種:
char; ?varchar2; number; integer; date; boolean; table; record
SQL CREATE OR REPLACE PROCEDURE HelloWorld2 (
2 ???p_user_name IN ????VARCHAR2,
3 ???p_out_val ??OUT ???VARCHAR2,
4 ???p_inout_val IN OUT VARCHAR2
5 ) AS
6 BEGIN
7 ????dbms_output.put_line('Hello ' || p_user_name || p_inout_val || '!');
8 ????p_out_val := 'A';
9 ????p_inout_val := 'B';
10 END HelloWorld2;
11 /
Procedure created.
SQL DECLARE
2 ???p_outval VARCHAR2(10);
3 ???p_inoutval VARCHAR2(10) := '~Hi~';
4 BEGIN
5 ???HelloWorld2('Edward', p_outval, p_inoutval);
6
7 ???dbms_output.put_line('p_outval=' || p_outval);
8 ???dbms_output.put_line('p_inoutval=' || p_inoutval);
9 END;
10 /
Hello Edward~Hi~!
p_outval=A
p_inoutval=B
PL/SQL procedure successfully completed.