從零開始教你安裝Oracle數(shù)據(jù)庫!Oracle 數(shù)據(jù)庫的安裝和使用指導(dǎo)
1、數(shù)據(jù)庫安裝
1.1下載
根據(jù)自己的操作系統(tǒng)位數(shù),到oracle官網(wǎng)下載(以oracle 11g 為例)
之后把兩個(gè)壓縮包解壓到同一個(gè)文件夾內(nèi)(需要注意的是,這個(gè)文件夾路徑名稱中最好不要出現(xiàn)中文、空格等不規(guī)則字符。)
注意:下載的是Oracle DataBase數(shù)據(jù)庫服務(wù)器!!不要下錯(cuò)了,下載成client客戶端!!
1.2 安裝
打開相應(yīng)的解壓路徑,找到安裝文件“setup.exe”,雙擊進(jìn)行安裝,如下圖所示:
取消下圖中的“我希望通過My Oracle Support接受安全更新(W)”,點(diǎn)擊下一步
下面需要注意,如果是筆記本的話選擇“桌面類”,服務(wù)器就選擇“服務(wù)器類”
自定義oracle基目錄(安裝路徑)及密碼。
先決條件檢查。 安裝程序會(huì)檢查軟硬件系統(tǒng)是否滿足,安裝此Oracle版本的最低要求。 直接下一步就OK 了。
概要 安裝前的一些相關(guān)選擇配置信息。 可以保存成文件 或 不保存文件直接點(diǎn)完成即可。
數(shù)據(jù)庫管理軟件文件及dbms文件安裝完后,會(huì)自動(dòng)創(chuàng)建安裝一個(gè)實(shí)例數(shù)據(jù)庫默認(rèn)前面的orcl名稱的數(shù)據(jù)庫。
最后完成oracle安裝。
2、配置數(shù)據(jù)庫
2.1 創(chuàng)建表空間
Win+R 輸入cmd 進(jìn)入命令行,輸入下面,以sysdba 登錄進(jìn)去:
sqlplus /nolog connect / as sysdba startup
注意:在conn / as sysdba過程中遇到報(bào)ORA-01301:insufficient privileges錯(cuò)誤
解決辦法:
出現(xiàn)這種問題的原因,有兩個(gè)原因,一是在oracle的用戶組中沒有本機(jī)系統(tǒng);二是操作系統(tǒng)的本地驗(yàn)證不允許。
將當(dāng)前登錄用戶添加到ora_dba組中。
在sql.net文件中修改語句為
SQLNET.AUTHENTICATION_SERVICE=(NTS)
創(chuàng)建表空間
create tablespace TBS_CHOVA_DATA datafile 'E:\Oracle\oradata\TBS_CHOVA_DATA.dbf' size 1000 M autoextend on next 100 maxsize unlimited; create temporary tablespace TBS_CHOVA_TEMP tempfile 'E:\Oracle\oradata\TBS_CHOVA_TEMP.dbf' size 1000 M autoextend on next 100 maxsize unlimited; create tablespace TBS_CHOVA_IDX datafile 'E:\Oracle\oradata\TBS_CHOVA_IDX.dbf' size 200 M autoextend on next 100 maxsize unlimited;
注意:文件名前面的路徑需要真實(shí)存在,沒有這個(gè)路徑的話,需要自己手動(dòng)創(chuàng)建這個(gè)路徑
2.2 創(chuàng)建用戶
建立用戶,分配權(quán)限。第一個(gè)smis是用戶名,第二個(gè)smis是密碼。
create user smis identified by smis default tablespace TBS_CHOVA_DATA temporary tablespace TBS_CHOVA_TEMP; grant connect,resource to smis; grant dba to smis;
2.3 配置監(jiān)聽
-是Oracle基于服務(wù)器端的一種網(wǎng)絡(luò)服務(wù),主要用于監(jiān)聽客戶端向數(shù)據(jù)庫服務(wù)器端提出的連接請求。既然是基于服務(wù)器端的服務(wù),那么它也只存在于數(shù)據(jù)庫服務(wù)器端,進(jìn)行-的設(shè)置也是在數(shù)據(jù)庫服務(wù)器端完成的。
打開oracle程序下的 Net Manager
選擇監(jiān)聽程序,LISTENER ,監(jiān)聽位置處,添加地址,主機(jī)填寫自己電腦的IP地址,端口1521
選中窗口右側(cè)欄下拉選項(xiàng)中的“數(shù)據(jù)庫服務(wù)”,點(diǎn)擊添加數(shù)據(jù)庫按鈕。在出現(xiàn)的數(shù)據(jù)庫欄中輸入全局?jǐn)?shù)據(jù)庫名。注意這里的全局?jǐn)?shù)據(jù)庫名與數(shù)據(jù) 庫SID有所區(qū)別,全局?jǐn)?shù)據(jù)庫名實(shí)際通過域名來控制在同一網(wǎng)段內(nèi)數(shù)據(jù)庫全局命名的唯一性,就如Windows下的域名控制器。 Oracle主目錄可以不填寫,輸入SID。
2.4 配置本地服務(wù)名(Tnsnames)
本地服務(wù)名是基于Oracle客戶端的網(wǎng)絡(luò)配置,所以,如果客戶端需要連接數(shù)據(jù)庫服務(wù)器進(jìn)行操作,則需要配置該客戶端,其依附對象可以是任意一臺(tái)欲連接數(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ī)名與端口號(hào)。注意這里的主機(jī)名與端口號(hào)必須與數(shù)據(jù)庫服務(wù)器端-配置的主機(jī)名和端口號(hào)相同。點(diǎn)擊下一步,如下圖示:
選中(Oracle8i或更高版本)服務(wù)名,輸入服務(wù)名。這里的服務(wù)名實(shí)際上就是數(shù)據(jù)庫服務(wù)器端-配置中的全局?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:/oracle/ora92/network/admin/tnsnames.ora,Linux/Unix下$ORACLE_HOME/network/admin/ tnsnames.ora)。配置完成的本地服務(wù)名如下圖示:
樹形目錄下的服務(wù)命名可以通過編輯菜單里的重命名菜單更改成任意合法字符組成的服務(wù)名稱,注意服務(wù)名稱前不能有空格字符,否則可能無法連接數(shù)據(jù)庫服務(wù)器。
網(wǎng)絡(luò)配置與訪問方式完全解析
三個(gè)配置文件 listener.ora 、sqlnet.ora 、tnsnames.ora ,都是放在目錄:
ORACLE_HOME\network\admin
sqlnet.ora----- 作用類似于linux 或者其他unix 的nsswitch.conf 文件,通過這個(gè)文件來決定怎么樣找一個(gè)連接中出現(xiàn)的連接字符串。
例如我們客戶端輸入
sqlplus sys/oracle@orcl
假如我的sqlnet.ora 是下面這個(gè)樣子
SQLNET.AUTHENTICATION_SERVICES= (NTS) NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)
那么,客戶端就會(huì)首先在tnsnames.ora 文件中找orcl 的記錄. 如果沒有相應(yīng)的記錄則嘗試把orcl 當(dāng)作一個(gè)主機(jī)名,通過網(wǎng)絡(luò)的途徑去解析它的 ip 地址然后去連接這個(gè)ip 上GLOBAL_DBNAME=orcl 這個(gè)實(shí)例,當(dāng)然我這里orcl 并不是一個(gè)主機(jī)名。
如果我是這個(gè)樣子
NAMES.DIRECTORY_PATH= (TNSNAMES)
那么客戶端就只會(huì)從tnsnames.ora 查找orcl 的記錄, 括號(hào)中還有其他選項(xiàng),如LDAP 等并不常用。
2. Tnsnames.ora------ 這個(gè)文件類似于unix 的hosts 文件,提供的tnsname 到主機(jī)名或者ip 的對應(yīng),只有當(dāng)sqlnet.ora 中類似
NAMES.DIRECTORY_PATH= (TNSNAMES)
這樣,也就是客戶端解析連接字符串的順序中有TNSNAMES 是,才會(huì)嘗試使用這個(gè)文件。
PROTOCOL :客戶端與服務(wù)器端通訊的協(xié)議,一般為TCP ,該內(nèi)容一般不用改。
HOST:數(shù)據(jù)庫偵聽所在的機(jī)器的機(jī)器名或IP 地址,數(shù)據(jù)庫偵聽一般與數(shù)據(jù)庫在同一個(gè)機(jī)器上,所以當(dāng)我說數(shù)據(jù)庫偵聽所在的機(jī)器一般也是指數(shù)據(jù)庫所在的機(jī)器。在UNIX 或WINDOWS 下,可以通過在數(shù)據(jù)庫偵聽所在的機(jī)器的命令提示符下使用hostname 命令得到機(jī)器名,或通過ipconfig(for WINDOWS) or ifconfig (for UNIX )命令得到IP 地址。需要注意的是,不管用機(jī)器名或IP 地址,在客戶端一定要用ping 命令ping 通數(shù)據(jù)庫偵聽所在的機(jī)器的機(jī)器名,否則需要在 hosts 文件中加入數(shù)據(jù)庫偵聽所在的機(jī)器的機(jī)器名的解析。
PORT:數(shù)據(jù)庫偵聽正在偵聽的端口,可以察看服務(wù)器端的listener.ora 文件或在數(shù)據(jù)庫偵聽所在的機(jī)器的命令提示符下通過lnsrctl status [listener name] 命令察看。此處Port 的值一定要與數(shù)據(jù)庫偵聽正在偵聽的端口一樣。
SERVICE_NAME:在服務(wù)器端,用system 用戶登陸后,sqlplus> show parameter service_name 命令察看。
ORCL: 對應(yīng)的本機(jī),SALES 對應(yīng)的另外一個(gè)IP 地址,里邊還定義了使用主用服務(wù)器還是共享服務(wù)器模式進(jìn)行連接。
ORCL = (DESCRIPTION = (ADDRESS_LIST = # 下面是這個(gè)TNSNAME 對應(yīng)的主機(jī),端口,協(xié)議 (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) ) (CONNECT_DATA = # 使用專用服務(wù)器模式去連接需要跟服務(wù)器的模式匹配,如果沒有就根據(jù)服務(wù)器的模式自動(dòng)調(diào)節(jié) (SERVER = DEDICATED) # 對應(yīng)service_name ,SQLPLUS>;show parameter service_name; 進(jìn)行查看 (SERVICE_NAME = orcl) ) ) # 下面這個(gè)類似 SALES = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST =dg1)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = sales) ) )
注意:如果數(shù)據(jù)庫服務(wù)器用MTS ,客戶端程序需要用database link 時(shí)最好明確指明客戶端用dedicated 直連方式, 不然會(huì)遇到很多跟分布式環(huán)境有關(guān)的ORACLE BUG 。一般情況下數(shù)據(jù)庫服務(wù)器用直接的連接會(huì)好一些,除非你的實(shí)時(shí)數(shù)據(jù)庫連接數(shù)接近1000 。
3. listener.ora------listener -進(jìn)程的配置文件
關(guān)于listener 進(jìn)程就不多說了,接受遠(yuǎn)程對數(shù)據(jù)庫的接入申請并轉(zhuǎn)交給oracle 的服務(wù)器進(jìn)程。所以如果不是使用的遠(yuǎn)程的連接,并且不需要使用OEM時(shí),listener 進(jìn)程就不是必需的,同樣的如果關(guān)閉listener 進(jìn)程并不會(huì)影響已經(jīng)存在的數(shù)據(jù)庫連接。
***Listener.ora***文件的例子
#listener.ora Network Configuration File: #E:\oracle\product\10.1.0\Db_2\NETWORK\ADMIN\listener.ora # Generated by Oracle configuration tools. # 下面定義LISTENER 進(jìn)程為哪個(gè)實(shí)例提供服務(wù) 這里是ORCL ,并且它對應(yīng)的ORACLE_HOME 和GLOBAL_DBNAME 其中GLOBAL_DBNAME 不是必需的除非 # 使用HOSTNAME 做數(shù)據(jù)庫連接 SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = boway) (ORACLE_HOME = /u01/app/oracle) (SID_NAME = ORCL) ) ) # -的名字,一臺(tái)數(shù)據(jù)庫可以有不止一個(gè)- # 再向下面是-監(jiān)聽的協(xié)議,ip,端口等,這里使用的tcp1521端口,并且使#用的是主機(jī)名 LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = dg1)(PORT = 1521)) )
上面的例子是一個(gè)最簡單的例子,但也是最普遍的。一個(gè)listener 進(jìn)程為一個(gè)instance(SID) 提供服務(wù)。
-的操作命令
ORACLE_HOME/bin/lsnrctl start
其他諸如stop,status 等。具體敲完一個(gè)lsnrctl 后看幫助。
上面說到的三個(gè)文件都可以通過圖形的配置工具來完成配置
$ORACLE_HOME/netca 向?qū)问降?$ORACLE_HOME/netmgr
本人比較習(xí)慣netmgr,
profile 配置的是sqlnet.ora 也就是名稱解析的方式
service name 配置的是tnsnames.ora 文件
listeners 配置的是listener.ora 文件,即-進(jìn)程
具體的配置可以嘗試一下然后來看一下配置文件。
這樣一來總體結(jié)構(gòu)就有了不同的連接方式 。
連接過程
當(dāng)你輸入
sqlplus sys/oracle@orcl
1.查詢sqlnet.ora 看看名稱的解析方式,發(fā)現(xiàn)是TNSNAME
2.則查詢tnsnames.ora 文件,從里邊找orcl 的記錄,并且找到主機(jī)名,端口和service_name
3. 如果listener 進(jìn)程沒有問題的話,建立與listener 進(jìn)程的連接。
4 .根據(jù)不同的服務(wù)器模式如專用服務(wù)器模式或者共享服務(wù)器模式,listener 采取接下去的動(dòng)作。默認(rèn)是專用服務(wù)器模式,沒有問題的話客戶端就連接上了數(shù)據(jù)庫的server process 。
5 .這時(shí)候網(wǎng)絡(luò)連接已經(jīng)建立,listener 進(jìn)程的歷史使命也就完成了。
##
幾種連接方式
簡便命名連接:
默認(rèn)已啟用,不需要進(jìn)行客戶機(jī)配置,僅支持TC/IP(無SSL),不支持高級(jí)連接,如:連接時(shí)故障轉(zhuǎn)移,源路由,負(fù)載平衡。連接方式如:
connect hr/hr@db.us.oracle.com:1521/dba10g
其中db.us.oracle.com為主機(jī)名當(dāng)然也可以用IP代替,1521為連接端口,dba10g為服務(wù)名—可通過show parameter service 查看。
本地命名:
需要客戶機(jī)名稱解析文件tnsname.ora,支持所有的Oracle Net協(xié)議,支持高級(jí)連接選項(xiàng)。連接方式如: connect hr/hr@orcl,其中orcl為數(shù)據(jù)庫實(shí)例名
目錄命名:
需要加載了Oracle Net名稱解析的LDAP:Oracle Internet Directory和Microsoft Active Directory Services。支持所有的Oracle Net協(xié)議,支持高級(jí)連接選項(xiàng)。連接方式如: connect hr/hr@orcl
外部命名:
使用支持的非Oracle命名服務(wù),包括:網(wǎng)絡(luò)信息服務(wù)(NIS)外部命名,分布式計(jì)算環(huán)境(DCE)單元目錄服務(wù)(CDS)
連接用到的幾種驗(yàn)證形式
sqlplus / as sysdba
這是典型的操作系統(tǒng)認(rèn)證,不需要listener 進(jìn)程
sqlplus sys/oracle
這種連接方式只能連接本機(jī)數(shù)據(jù)庫,同樣不需要listener 進(jìn)程
sqlplus sys/oracle@orcl
這種方式需要listener 進(jìn)程處于可用狀態(tài)。最普遍的通過網(wǎng)絡(luò)連接。
以上驗(yàn)證方式使用sys 用戶或者其他通過密碼文件驗(yàn)證的用戶都不需要數(shù)據(jù)庫處于可用狀態(tài),操作系統(tǒng)認(rèn)證也不需要數(shù)據(jù)庫可用,數(shù)據(jù)庫用戶認(rèn)證放是由于采用數(shù)據(jù)庫認(rèn)證,所以數(shù)據(jù)庫必需處于open 狀態(tài)。
作為普通用戶進(jìn)行登錄
[oracle@dg1 admin]$ sqlplus sys/oracle SQL*Plus: Release 10.2.0.1.0 - Production on Sun Feb 13 16:18:33 2011 Copyright (c) 1982, 2005, Oracle. All rights reserved. ERROR: ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist Linux Error: 2: No such file or directory
Enter user-name: initSID.ora 中的Remote_Login_Passwordfile 對身份驗(yàn)證的影響
三個(gè)可選值:
NONE
默認(rèn)值,指示Oracle 系統(tǒng)不使用密碼文件,通過操作系統(tǒng)進(jìn)行身份驗(yàn)證的特權(quán)用戶擁有SYSORA 和SYSOPER 權(quán)限。
EXCLUSIVE
1.表示只有一個(gè)數(shù)據(jù)庫實(shí)例可以使用密碼文件
2.允許將SYSORA 和SYSOPER 權(quán)限賦值給SYS 以外的其它用戶
SHARED
1.表示可以有多個(gè)數(shù)據(jù)庫實(shí)例可以使用密碼文件
2.不允許將SYSORA 和SYSOPER 權(quán)限賦值給SYS 以外的其它用戶
所以,如果要以操作系統(tǒng)身份登錄,Remote_Login_Passwordfile 應(yīng)該設(shè)置為NONE
關(guān)于域名( 主機(jī)名) 解析
/etc/hosts (UNIX) 或者 windows\hosts(WIN98) winnt\system32\drivers\etc\hosts (WIN2000)
客戶端需要寫入數(shù)據(jù)庫服務(wù)器IP 地址和主機(jī)名的對應(yīng)關(guān)系。
127.0.0.1 dg1 192.168.0.35 oracledb oracledb 192.168.0.45 tomcat tomcat 202.84.10.193 bj_db bj_db
有些時(shí)候我們配置好第一步后,tnsping 數(shù)據(jù)庫服務(wù)器別名顯示是成功的,
但是sqlplus username/password@servicename 不通,jdbc thin link 也不通的時(shí)候,
一定不要忘了在客戶端做這一步,原因可能是DNS 服務(wù)器里沒有設(shè)置這個(gè)服務(wù)器IP 地址和主機(jī)名的對應(yīng)關(guān)系。
如果同時(shí)有私有IP 和Internet 上公有IP ,私有IP 寫在前面,公有IP 寫在后面。
編輯前最好留一個(gè)備份,增加一行時(shí)也最好用復(fù)制粘貼,避免編輯hosts 時(shí)空格或者tab 字符錯(cuò)誤。
UNIX 下ORACLE 多數(shù)據(jù)庫的環(huán)境,OS 客戶端需要配置下面兩個(gè)環(huán)境變量
ORACLE_SID=appdb;export ORACLE_SID TWO_TASK=appdb;export TWO_TASK
來指定默認(rèn)的目標(biāo)數(shù)據(jù)庫
平時(shí)排錯(cuò)可能會(huì)用到的:
LSNRCTL>help LSNRCTL>status LSNRCTL> services
[oracle@dg1 dbs]$ tnsping orcl TNS Ping Utility for Linux: Version 10.2.0.1.0 - Production on 13-FEB-2011 16:48:06 Copyright (c) 1997, 2005, Oracle. All rights reserved. Used parameter files: /u01/app/oracle/network/admin/sqlnet.ora Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dg1)(PORT = 1521))) (CONNECT_DATA = (SID = orcl))) OK (10 msec)
SQL>select instance_name,host_name,status from v$instance;
查看數(shù)據(jù)庫是打開還是mount 狀態(tài)。
SQL>select open_mode from v$database INSTANCE_NAME STATUS ------------------------------ ------------------------------------ orcl OPEN
使用hostname 訪問數(shù)據(jù)庫而不是tnsname 的例子
使用tnsname 訪問數(shù)據(jù)庫是默認(rèn)的方式,但是也帶來點(diǎn)問題,那就是客戶端都是需要配置tnsnames.ora 文件的。如果你的數(shù)據(jù)庫服務(wù)器地址發(fā)生改變,就需要重新編輯客戶端這個(gè)文件。通過hostname 訪問數(shù)據(jù)庫就沒有了這個(gè)麻煩。
查看數(shù)據(jù)庫名
SQL> select name from v$database; NAME --------------------------- ORCL
需要修改服務(wù)器端listener.ora
-的配置文件listener.ora
使用host naming 則不再需要tnsname.ora 文件做本地解析
listener.ora Network Configuration File:
d:\oracle\product\10.1.0\db_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools. SID_LIST_LISTENER = (SID_LIST = (SID_DESC = # (SID_NAME = PLSExtProc) (SID_NAME = orcl) (GLOBAL_DBNAME = ORCL) (ORACLE_HOME = /u01/app/oracle) # (PROGRAM = extproc) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) ) (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = dg1)(PORT = 1521)) ) )
客戶端sqlnet.ora 如果確認(rèn)不會(huì)使用TNSNAME 訪問的話,可以去掉 TNSNAMES
sqlnet.ora Network Configuration File: d:\oracle\product\10.1.0\db_1\NETWORK\ADMIN\sqlnet.ora
Generated by Oracle configuration tools. SQLNET.AUTHENTICATION_SERVICES= (NTS) NAMES.DIRECTORY_PATH= (HOSTNAME)
Tnsnames.ora 文件不需要配置,刪除也無所謂。
下面就是網(wǎng)絡(luò)和操作系統(tǒng)的配置問題了,怎么樣能夠解析我的主機(jī)名的問題了
可以通過下面的方式連接
sqlplus sys/oracle@orcl
這樣的話,會(huì)連接orcl 這臺(tái)服務(wù)器,并且listener 來確定你所要連接的service_name
2.5 oracle連接問題
要排除客戶端與服務(wù)器端的連接問題,首先檢查客戶端配置是否正確(客戶端配置必須與數(shù)據(jù)庫服務(wù)器端監(jiān)聽配置一致),再根據(jù)錯(cuò)誤提示解決。下面列出幾種常見的連接問題:
顯而易見,服務(wù)器端的-沒有啟動(dòng),另外檢查客戶端IP地址或端口填寫是否正確。啟動(dòng)-:
lsnrctl start
對于Windows而言,沒有啟動(dòng)Oracle實(shí)例服務(wù)。啟動(dòng)實(shí)例服務(wù):
C:oradim –startup -sid myoracle
出現(xiàn)這個(gè)問題的原因很多,但主要跟網(wǎng)絡(luò)有關(guān)。解決這個(gè)問題,首先檢查客戶端與服務(wù)端的網(wǎng)絡(luò)是否暢通,如果網(wǎng)絡(luò)連通,則檢查兩端的防火墻是否阻擋了連接。
檢查輸入的服務(wù)名與配置的服務(wù)名是否一致。另外注意生成的本地服務(wù)名文件(Windows下如
D:oracleora92networkadmin tnsnames.ora 或者 Linux/Unix下/network/admin/tnsnames.ora
里每項(xiàng)服務(wù)的首 行服務(wù)名稱前不能有空格。
打開Net Manager,選中服務(wù)名稱,檢查服務(wù)標(biāo)識(shí)欄里的服務(wù)名輸入是否正確。該服務(wù)名必須與服務(wù)器端-配置的全局?jǐn)?shù)據(jù)庫名一致。同時(shí)檢查sqlnet.ora,例如如果想要采用簡便連接方式連接就需要在NAMES.DIRECTORY_PATH參數(shù)中添加EZCONNECT。
出現(xiàn)該報(bào)錯(cuò)有兩個(gè)原因:在共享模式下是由于調(diào)度進(jìn)程(dispatchers)太少,在獨(dú)占模式下是由于進(jìn)程數(shù)(proces ses)超過了數(shù)據(jù)庫默認(rèn)的最大進(jìn)程數(shù)。解決步驟:
1、show parameter process查看數(shù)據(jù)庫允許最大進(jìn)程數(shù)
2、select count(*) from v$session;查看當(dāng)前系統(tǒng)進(jìn)程數(shù)
如果進(jìn)程數(shù)不夠,可通過擴(kuò)大PGA來增大進(jìn)程數(shù):
alter system set workarea_size_policy=auto scope=both; alter system set pga_aggregate_target=512m scope=both;
3、show parameter dispatchers查看調(diào)度進(jìn)程數(shù)量
如果調(diào)度進(jìn)程太少,則可執(zhí)行:
alter system set dispatchers = '(protocol=tcp)(dispatchers=3)(service=oracle10xdb)';
用命令或在服務(wù)窗口中啟動(dòng)監(jiān)聽提示找不到路徑,或監(jiān)聽服務(wù)啟動(dòng)異常。打開注冊表,進(jìn)入
HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/OracleOraHome92TNSListener
查看ImagePath字符串項(xiàng)是否存在,如果沒 有,設(shè)定值為D:oracleora92BINTNSLSNR,不同的安裝路徑設(shè)定值做相應(yīng)的更改。這種方法同樣適用于Oracle實(shí)例服務(wù),同 上,找到如同
HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/Oracle ServiceMYORACLE
查看ImagePath字符串項(xiàng)是否存在,如果沒有,則新建,設(shè)定值為d:oracleora92 binORACLE.EXE MYORACLE。以上是Oracle客戶端連接服務(wù)器端常見的一些問題,當(dāng)然不能囊括所有的連接異常。解決問題的關(guān)鍵在于方法與思路,而不是每種問題都有固定的答案。
在linux,Unix底下如果/etc/hosts文件配置不正確會(huì)出現(xiàn)如下報(bào)錯(cuò)
lsnrctl start LSNRCTL for HPUX: Version 10.1.0.4.0 - Production on 01-JUL-2005 10:16:59 Copyright (c) 1991, 2004, Oracle. All rights reserved. Starting /db02/product/10.1/bin/tnslsnr: please wait... TNS-12537: TNS:connection closed TNS-12560: TNS:proto adapter error TNS-00507: Connection closed HPUX Error: 29: Illegal seek
解決方式:
檢查該用戶是否有/etc/hosts文件的訪問權(quán)限,檢查/etc/hosts文件下是否包含
127.0.0.1 localhost.localdomain localhost
這個(gè)問題一般發(fā)生在利用JDBC連接數(shù)據(jù)庫時(shí),這里需要注意,上面的bbcd的位置應(yīng)該填寫sid_name,一般JDBC的配置格式為
jdbc:oracle:thin:@IP/HOSTNAME:PORT:SID例如jdbc:oracle:thin:@145.**.**.**:1521:z***db2
該問題是由于缺少-的SID_LIST描述項(xiàng)引起的,采用netca進(jìn)行配置的時(shí)候經(jīng)常會(huì)遇到該問題,listener.ora示例如下
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /opt/oracle/product/9.2.0.4) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = SAMPLE.COM) (ORACLE_HOME = /opt/oracle/product/9.2.0.4) (SID_NAME = SAMPLE) )) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = tcy.com)(PORT = 1521)) ) (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) )))
ORA-12528:監(jiān)聽中的服務(wù)使用了動(dòng)態(tài)服務(wù),系統(tǒng)啟動(dòng)后,數(shù)據(jù)庫沒有正常的MOUNT,因此在動(dòng)態(tài)模式下,就會(huì)出現(xiàn)這個(gè)問題,用靜態(tài)的就不會(huì)有這個(gè)問題,因此上面的方法就是把監(jiān)聽設(shè)置為靜態(tài),或者在tnsnames.ora中追加(UR=A)。
lisnter.ora增加如下內(nèi)容
(SID_DESC = (GLOBAL_DBNAME = ammicly) (ORACLE_HOME = c:\oracle\product\10.1.0\db_1) (SID_NAME = ammicly) ) 或者在tnsnames.ora增加如下內(nèi)容: (UR=A)
檢查tnsping是否能正常工作,檢查lsnrctl status是否正常。檢查local_listener參數(shù)(pmon只會(huì)動(dòng)態(tài)注冊port等于1521的監(jiān)聽,否則pmon不能動(dòng)態(tài)注冊listener,要想讓pmon動(dòng)態(tài)注冊listener,需要設(shè)置local_listener參數(shù)),通過如下方式設(shè)置
alter system set local_listener='(ADDRESS =(PROTOCOL=TCP)(HOST=10.201.1.134)(PORT=1521)(SID=siebtest))';
有以下3種可能
1、檢查數(shù)據(jù)庫是否是專用服務(wù)器,但是在tnsname.ora配置中設(shè)置了連接方式為shared,這種情況下
打開tnsname.ora, 把(server = shared) 改成 (server = dedicate);
2、是由于process不夠引起的:
select count(*) from v$session; show parameter processes show parameter sessions
調(diào)大processes參數(shù)即可
3、local_listener設(shè)置不當(dāng),設(shè)置方式參見上文。
TNS-12560: TNS:protocol adapter error TNS-00512: Address already in use
檢查/etc/hosts的配置,是否有多個(gè)ip指向同一主機(jī)名的情況
參考至:http://lzysystem.iteye.com/blog/424569
http://blogold.chinaunix.net/u2/82873/showart_1830733.html
http://gggwfn1982.blog.163.com/blog/static/15000427201041192213787/
http://guolr.iteye.com/blog/549692
http://blog.sina.com.cn/s/blog_4cd0d3a701000a6j.html
http://pengxianfeng.i.sohu.com/blog/view/84726397.htm
http://blog.sina.com.cn/s/blog_517cae3c01015dwu.html
http://luoping.blog.51cto.com/534596/1062670
http://xiekeli.blogbus.com/logs/93619549.html
http://www.linuxidc.com/Linux/2012-11/73694.htm
用命令或在服務(wù)窗口中啟動(dòng)監(jiān)聽提示找不到路徑,或監(jiān)聽服務(wù)啟動(dòng)異常。打開注冊表,進(jìn)入
HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/OracleOraHome92TNSListener
查看ImagePath字符串項(xiàng)是否存在,如果沒有,設(shè)定值為
D:/oracle/ora92/BIN/TNSLSNR
不同的安裝路徑設(shè)定值做相應(yīng)的更改。這種方法同樣適用于Oracle實(shí)例服務(wù),同上,找到如同
HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/Oracle ServiceMYORACLE
查看ImagePath字符串項(xiàng)是否存在,如果沒有,則新建,設(shè)定值為
d:/oracle/ora92/binORACLE.EXE MYORACLE
以上是Oracle客戶端連接服務(wù)器端常見的一些問題,當(dāng)然不能囊括所有的連接異常。解決問題的關(guān)鍵在于方法與思路,而不是每種問題都有固定的答案。
開始 -> 程序 -> Oracle -> Configuration and Migration Tools -> Net Manager→本地→概要文件→Oracle高級(jí)安全性→驗(yàn)證→去掉所選方法中的 "NTS"
就可以了.
3.備份還原數(shù)據(jù)庫
3.1 備份數(shù)據(jù)庫
exp導(dǎo)出
ORACLE 11g新特性,當(dāng)表沒有數(shù)據(jù)時(shí),不分配segment,以節(jié)省空間,所以exp導(dǎo)出的時(shí)候,不導(dǎo)出這些表。針對這個(gè)問題,首先執(zhí)行下面的sql:
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null;
復(fù)制上面語句生成的結(jié)果,在執(zhí)行這些即可。
在命令行執(zhí)行下面即可導(dǎo)出數(shù)據(jù)庫
exp rad/rad@orcl file='E:\rad.dmp' buffer=40960000
使用導(dǎo)出expdp工具
首先 指定轉(zhuǎn)儲(chǔ)文件和日志文件所在的目錄directory – lmm_db_bak
sqlplus /nolog connect / as sysdba startup create or replace directory lmm_db_bak as 'D:/lmm_db_bak'; grant read,write on directory lmm_db_bak to public;
查看
select * from dba_directories;
導(dǎo)出
expdp rad/rad@orcl schemas= rad dumpfile=rad-20170101.dmp directory= lmm_db_bak
導(dǎo)出部分表使用include
expdp rad/rad@orcl schemas= rad dumpfile=rad-20170101.dmp directory= lmm_db_bak include=table:\"like \'CT%\'\"
注:這種方式可以直接導(dǎo)出那些空表
3.2 還原數(shù)據(jù)庫
imp導(dǎo)入
如果是還原完整的oracle數(shù)據(jù)庫,可以先刪除當(dāng)前用戶,再創(chuàng)建用戶,導(dǎo)入數(shù)據(jù)庫
刪除用戶
drop user rad cascade;
創(chuàng)建用戶
create user rad identified by rad default tablespace TBS_LLM_DATA temporary tablespace TBS_LLM_TEMP; grant connect,resource to rad; grant dba to rad;
在命令行執(zhí)行下面即可導(dǎo)入數(shù)據(jù)庫
imp rad/rad@orcl file='E:\rad.dmp' buffer=40960000 full=y;
導(dǎo)入非完整數(shù)據(jù)庫dmp文件(部分表)
如果自己原本數(shù)據(jù)庫和dmp中存在同樣的表,那么導(dǎo)入dmp文件是不會(huì)導(dǎo)入已經(jīng)有的同名表的。需要提前刪除自己本來庫里的同名表。
使用導(dǎo)入impdb工具
impdp rad/rad@orcl schemas= rad directory= lmm_db_bak dumpfile=RAD-20170101.DMP FULL=y;
如果想導(dǎo)入的用戶已經(jīng)存在: 1. 導(dǎo)出用戶 expdp user1/pass1 directory=dumpdir dumpfile=user1.dmp 2. 導(dǎo)入用戶 impdp user2/pass2 directory=dumpdir dumpfile=user1.dmp REMAP_SCHEMA=user1:user2 EXCLUDE=USER full=y; 如果想導(dǎo)入的用戶不存在: 1. 導(dǎo)出用戶 expdp user1/pass1 directory=dumpdir dumpfile=user1.dmp 2. 導(dǎo)入用戶 impdp system/passsystem directory=dumpdir dumpfile=user1.dmp REMAP_SCHEMA=user1:user2 full=y; 3. user2會(huì)自動(dòng)建立,其權(quán)限和使用的表空間與user1相同,但此時(shí)用user2無法登錄,必須修改user2的密碼
Oracle 數(shù)據(jù)庫
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。