1、資料庫安裝
1.1下載下傳
根據自己的作業系統位數,到oracle官網下載下傳(以oracle 11g 為例)
之後把兩個壓縮包解壓到同一個檔案夾内(需要注意的是,這個檔案夾路徑名稱中最好不要出現中文、空格等不規則字元。)
注意:下載下傳的是Oracle DataBase資料庫伺服器!!不要下錯了,下載下傳成client用戶端!!
1.2 安裝
打開相應的解壓路徑,找到安裝檔案“setup.exe”,輕按兩下進行安裝,如下圖所示:
取消下圖中的“我希望通過My Oracle Support接受安全更新(W)”,點選下一步
下面需要注意,如果是筆記本的話選擇“桌面類”,伺服器就選擇“伺服器類”
自定義oracle基目錄(安裝路徑)及密碼。
先決條件檢查。 安裝程式會檢查軟硬體系統是否滿足,安裝此Oracle版本的最低要求。 直接下一步就OK 了。
概要 安裝前的一些相關選擇配置資訊。 可以儲存成檔案 或 不儲存檔案直接點完成即可。
資料庫管理軟體檔案及dbms檔案安裝完後,會自動建立安裝一個執行個體資料庫預設前面的orcl名稱的資料庫。
最後完成oracle安裝。
2、配置資料庫
2.1 建立表空間
Win+R 輸入cmd 進入指令行,輸入下面,以sysdba 登入進去:
sqlplus /nolog
connect / as sysdba
startup
注意:在conn / as sysdba過程中遇到報ORA-01301:insufficient privileges錯誤
解決辦法:出現這種問題的原因,有兩個原因,一是在oracle的使用者組中沒有本機系統;二是作業系統的本地驗證不允許。
- 将目前登入使用者添加到ora_dba組中。
從零開始教你安裝Oracle資料庫!Oracle 資料庫的安裝和使用指導1、資料庫安裝2、配置資料庫3.備份還原資料庫 - 在sql.net檔案中修改語句為
SQLNET.AUTHENTICATION_SERVICE=(NTS)
建立表空間
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;
注意:檔案名前面的路徑需要真實存在,沒有這個路徑的話,需要自己手動建立這個路徑
2.2 建立使用者
建立使用者,配置設定權限。第一個smis是使用者名,第二個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 配置監聽
監聽器是Oracle基于伺服器端的一種網絡服務,主要用于監聽用戶端向資料庫伺服器端提出的連接配接請求。既然是基于伺服器端的服務,那麼它也隻存在于資料庫伺服器端,進行監聽器的設定也是在資料庫伺服器端完成的。
- 打開oracle程式下的 Net Manager
- 選擇監聽程式,LISTENER ,監聽位置處,添加位址,主機填寫自己電腦的IP位址,端口1521
- 選中視窗右側欄下拉選項中的“資料庫服務”,點選添加資料庫按鈕。在出現的資料庫欄中輸入全局資料庫名。注意這裡的全局資料庫名與資料 庫SID有所差別,全局資料庫名實際通過域名來控制在同一網段内資料庫全局命名的唯一性,就如Windows下的域名控制器。 Oracle主目錄可以不填寫,輸入SID。
2.4 配置本地服務名(Tnsnames)
- 本地服務名是基于Oracle用戶端的網絡配置,是以,如果用戶端需要連接配接資料庫伺服器進行操作,則需要配置該用戶端,其依附對象可以是任意一台欲連接配接資料庫伺服器進行操作的PC機,也可以是資料庫伺服器自身。如前面所介紹,可以利用Oracle自帶的圖形化管理工具Net Manager來完成Oracle用戶端的配置。選中服務命名,再點選左上側“+”按鈕,彈出如下圖示對話框:
- 輸入Net服務名,如myoracle,點選下一步,進入下圖示對話框:
- 選中TCP/IP(Internet協定),點選下一步,如下圖示:
- 輸入主機名與端口号。注意這裡的主機名與端口号必須與資料庫伺服器端監聽器配置的主機名和端口号相同。點選下一步,如下圖示:
- 選中(Oracle8i或更高版本)服務名,輸入服務名。這裡的服務名實際上就是資料庫伺服器端監聽器配置中的全局資料庫名,前者與後者必須相同。連接配接類型通常選專用伺服器,這要視資料庫伺服器的配置而定,如果配置的共享資料庫伺服器,這裡的連接配接類型就要選共享伺服器,否則建議選專用伺服器(關于專用伺服器的介紹請參閱相關文檔)。配置好後點選下一步,如下圖示:
- 如果資料庫伺服器端相關服務啟動了,可以點選測試按鈕進行連接配接測試。Oracle預設是通過scott/tiger使用者進行測試連接配接,由于scott使用者是Oracle自帶的示例使用者,對于正式的業務資料庫或專業測試資料庫可能沒有配置這個使用者,是以需要更改成有效的使用者登入才可能測試成功。如果這裡測試連接配接不成功,也不要緊,先點完成按鈕結束配置。回到Oracle網絡管理器(Oracle Net Manager)主視窗,儲存配置,預設即可在Oracle安裝目錄下找到本地服務名配置檔案 (Windows下如D:/oracle/ora92/network/admin/tnsnames.ora,Linux/Unix下$ORACLE_HOME/network/admin/ tnsnames.ora)。配置完成的本地服務名如下圖示:
- 樹形目錄下的服務命名可以通過編輯菜單裡的重命名菜單更改成任意合法字元組成的服務名稱,注意服務名稱前不能有空格字元,否則可能無法連接配接資料庫伺服器。
網絡配置與通路方式完全解析
三個配置檔案 listener.ora 、sqlnet.ora 、tnsnames.ora ,都是放在目錄:
ORACLE_HOME\network\admin
- sqlnet.ora----- 作用類似于linux 或者其他unix 的nsswitch.conf 檔案,通過這個檔案來決定怎麼樣找一個連接配接中出現的連接配接字元串。
例如我們用戶端輸入
sqlplus sys/oracle@orcl
假如我的sqlnet.ora 是下面這個樣子
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)
那麼,用戶端就會首先在tnsnames.ora 檔案中找orcl 的記錄. 如果沒有相應的記錄則嘗試把orcl 當作一個主機名,通過網絡的途徑去解析它的 ip 位址然後去連接配接這個ip 上GLOBAL_DBNAME=orcl 這個執行個體,當然我這裡orcl 并不是一個主機名。
如果我是這個樣子
NAMES.DIRECTORY_PATH= (TNSNAMES)
那麼用戶端就隻會從tnsnames.ora 查找orcl 的記錄, 括号中還有其他選項,如LDAP 等并不常用。
- Tnsnames.ora------ 這個檔案類似于unix 的hosts 檔案,提供的tnsname 到主機名或者ip 的對應,隻有當sqlnet.ora 中類似
NAMES.DIRECTORY_PATH= (TNSNAMES)
這樣,也就是用戶端解析連接配接字元串的順序中有TNSNAMES 是,才會嘗試使用這個檔案。
PROTOCOL :用戶端與伺服器端通訊的協定,一般為TCP ,該内容一般不用改。
HOST:資料庫偵聽所在的機器的機器名或IP 位址,資料庫偵聽一般與資料庫在同一個機器上,是以當我說資料庫偵聽所在的機器一般也是指資料庫所在的機器。在UNIX 或WINDOWS 下,可以通過在資料庫偵聽所在的機器的指令提示符下使用hostname 指令得到機器名,或通過ipconfig(for WINDOWS) or ifconfig (for UNIX )指令得到IP 位址。需要注意的是,不管用機器名或IP 位址,在用戶端一定要用ping 指令ping 通資料庫偵聽所在的機器的機器名,否則需要在 hosts 檔案中加入資料庫偵聽所在的機器的機器名的解析。
PORT:資料庫偵聽正在偵聽的端口,可以察看伺服器端的listener.ora 檔案或在資料庫偵聽所在的機器的指令提示符下通過lnsrctl status [listener name] 指令察看。此處Port 的值一定要與資料庫偵聽正在偵聽的端口一樣。
SERVICE_NAME:在伺服器端,用system 使用者登陸後,sqlplus> show parameter service_name 指令察看。
ORCL: 對應的本機,SALES 對應的另外一個IP 位址,裡邊還定義了使用主用伺服器還是共享伺服器模式進行連接配接。
連接配接的時候輸入的 TNSNAME
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
# 下面是這個TNSNAME 對應的主機,端口,協定
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
# 使用專用伺服器模式去連接配接需要跟伺服器的模式比對,如果沒有就根據伺服器的模式自動調節
(SERVER = DEDICATED)
# 對應service_name ,SQLPLUS>;show parameter service_name; 進行檢視
(SERVICE_NAME = orcl)
)
)
# 下面這個類似
SALES =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =dg1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = sales)
)
)
注意:如果資料庫伺服器用MTS ,用戶端程式需要用database link 時最好明确指明用戶端用dedicated 直連方式, 不然會遇到很多跟分布式環境有關的ORACLE BUG 。一般情況下資料庫伺服器用直接的連接配接會好一些,除非你的實時資料庫連接配接數接近1000 。
- listener.ora------listener 監聽器程序的配置檔案
關于listener 程序就不多說了,接受遠端對資料庫的接入申請并轉交給oracle 的伺服器程序。是以如果不是使用的遠端的連接配接,并且不需要使用OEM時,listener 程序就不是必需的,同樣的如果關閉listener 程序并不會影響已經存在的資料庫連接配接。
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 程序為哪個執行個體提供服務 這裡是ORCL ,并且它對應的ORACLE_HOME 和GLOBAL_DBNAME 其中GLOBAL_DBNAME 不是必需的除非
# 使用HOSTNAME 做資料庫連接配接
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = boway)
(ORACLE_HOME = /u01/app/oracle)
(SID_NAME = ORCL)
)
)
# 監聽器的名字,一台資料庫可以有不止一個監聽器
# 再向下面是監聽器監聽的協定,ip,端口等,這裡使用的tcp1521端口,并且使#用的是主機名
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dg1)(PORT = 1521))
)
上面的例子是一個最簡單的例子,但也是最普遍的。一個listener 程序為一個instance(SID) 提供服務。
監聽器的操作指令
ORACLE_HOME/bin/lsnrctl start
其他諸如stop,status 等。具體敲完一個lsnrctl 後看幫助。
上面說到的三個檔案都可以通過圖形的配置工具來完成配置
$ORACLE_HOME/netca 向導形式的
$ORACLE_HOME/netmgr
本人比較習慣netmgr,
profile 配置的是sqlnet.ora 也就是名稱解析的方式
service name 配置的是tnsnames.ora 檔案
listeners 配置的是listener.ora 檔案,即監聽器程序
具體的配置可以嘗試一下然後來看一下配置檔案。
這樣一來總體結構就有了不同的連接配接方式 。
連接配接過程
當你輸入
sqlplus sys/oracle@orcl
1.查詢sqlnet.ora 看看名稱的解析方式,發現是TNSNAME
2.則查詢tnsnames.ora 檔案,從裡邊找orcl 的記錄,并且找到主機名,端口和service_name
- 如果listener 程序沒有問題的話,建立與listener 程序的連接配接。
4 .根據不同的伺服器模式如專用伺服器模式或者共享伺服器模式,listener 采取接下去的動作。預設是專用伺服器模式,沒有問題的話用戶端就連接配接上了資料庫的server process 。
5 .這時候網絡連接配接已經建立,listener 程序的曆史使命也就完成了。
幾種連接配接方式
簡便命名連接配接:
預設已啟用,不需要進行客戶機配置,僅支援TC/IP(無SSL),不支援進階連接配接,如:連接配接時故障轉移,源路由,負載平衡。連接配接方式如:
connect hr/[email protected]:1521/dba10g
其中db.us.oracle.com為主機名當然也可以用IP代替,1521為連接配接端口,dba10g為服務名---可通過show parameter service 檢視。
本地命名:
需要客戶機名稱解析檔案tnsname.ora,支援所有的Oracle Net協定,支援進階連接配接選項。連接配接方式如: connect hr/hr@orcl,其中orcl為資料庫執行個體名
目錄命名:
需要加載了Oracle Net名稱解析的LDAP:Oracle Internet Directory和Microsoft Active Directory Services。支援所有的Oracle Net協定,支援進階連接配接選項。連接配接方式如: connect hr/hr@orcl
外部命名:
使用支援的非Oracle命名服務,包括:網絡資訊服務(NIS)外部命名,分布式計算環境(DCE)單元目錄服務(CDS)
連接配接用到的幾種驗證形式
sqlplus / as sysdba
這是典型的作業系統認證,不需要listener 程序
sqlplus sys/oracle
這種連接配接方式隻能連接配接本機資料庫,同樣不需要listener 程序
sqlplus sys/oracle@orcl
這種方式需要listener 程序處于可用狀态。最普遍的通過網絡連接配接。
以上驗證方式使用sys 使用者或者其他通過密碼檔案驗證的使用者都不需要資料庫處于可用狀态,作業系統認證也不需要資料庫可用,資料庫使用者認證放是由于采用資料庫認證,是以資料庫必需處于open 狀态。
作為普通使用者進行登入
[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 對身份驗證的影響
三個可選值:
NONE
預設值,訓示Oracle 系統不使用密碼檔案,通過作業系統進行身份驗證的特權使用者擁有SYSORA 和SYSOPER 權限。
EXCLUSIVE
1.表示隻有一個資料庫執行個體可以使用密碼檔案
2.允許将SYSORA 和SYSOPER 權限指派給SYS 以外的其它使用者
SHARED
1.表示可以有多個資料庫執行個體可以使用密碼檔案
2.不允許将SYSORA 和SYSOPER 權限指派給SYS 以外的其它使用者
是以,如果要以作業系統身份登入,Remote_Login_Passwordfile 應該設定為NONE
關于域名( 主機名) 解析
/etc/hosts (UNIX)
或者
windows\hosts(WIN98) winnt\system32\drivers\etc\hosts (WIN2000)
用戶端需要寫入資料庫伺服器IP 位址和主機名的對應關系。
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
有些時候我們配置好第一步後,tnsping 資料庫伺服器别名顯示是成功的,
但是sqlplus username/password@servicename 不通,jdbc thin link 也不通的時候,
一定不要忘了在用戶端做這一步,原因可能是DNS 伺服器裡沒有設定這個伺服器IP 位址和主機名的對應關系。
如果同時有私有IP 和Internet 上公有IP ,私有IP 寫在前面,公有IP 寫在後面。
編輯前最好留一個備份,增加一行時也最好用複制粘貼,避免編輯hosts 時空格或者tab 字元錯誤。
UNIX 下ORACLE 多資料庫的環境,OS 用戶端需要配置下面兩個環境變量
ORACLE_SID=appdb;export ORACLE_SID
TWO_TASK=appdb;export TWO_TASK
來指定預設的目标資料庫
平時排錯可能會用到的:
1 .lsnrctl status 檢視伺服器端listener 程序的狀态
LSNRCTL>help
LSNRCTL>status
LSNRCTL> services
2 .tnsping 檢視用戶端sqlnet.ora 和tnsname.ora 檔案的配置正确與否,及對應的伺服器的listener 程序的狀态。
[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)
3.檢視instance 是否已經啟動
SQL>select instance_name,host_name,status from v$instance;
檢視資料庫是打開還是mount 狀态。
SQL>select open_mode from v$database
INSTANCE_NAME STATUS
------------------------------ ------------------------------------
orcl OPEN
使用hostname 通路資料庫而不是tnsname 的例子
使用tnsname 通路資料庫是預設的方式,但是也帶來點問題,那就是用戶端都是需要配置tnsnames.ora 檔案的。如果你的資料庫伺服器位址發生改變,就需要重新編輯用戶端這個檔案。通過hostname 通路資料庫就沒有了這個麻煩。
檢視資料庫名
SQL> select name from v$database;
NAME
---------------------------
ORCL
需要修改伺服器端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 如果确認不會使用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 檔案不需要配置,删除也無所謂。
下面就是網絡和作業系統的配置問題了,怎麼樣能夠解析我的主機名的問題了
可以通過下面的方式連接配接
sqlplus sys/oracle@orcl
這樣的話,會連接配接orcl 這台伺服器,并且listener 來确定你所要連接配接的service_name
2.5 oracle連接配接問題
要排除用戶端與伺服器端的連接配接問題,首先檢查用戶端配置是否正确(用戶端配置必須與資料庫伺服器端監聽配置一緻),再根據錯誤提示解決。下面列出幾種常見的連接配接問題:
1.ORA-12541: TNS: 沒有監聽器
顯而易見,伺服器端的監聽器沒有啟動,另外檢查用戶端IP位址或端口填寫是否正确。啟動監聽器:
lsnrctl start
2.ORA-12500: TNS: 監聽程式無法啟動專用伺服器程序
對于Windows而言,沒有啟動Oracle執行個體服務。啟動執行個體服務:
C:oradim –startup -sid myoracle
3.ORA-12535: TNS: 操作逾時
出現這個問題的原因很多,但主要跟網絡有關。解決這個問題,首先檢查用戶端與服務端的網絡是否暢通,如果網絡連通,則檢查兩端的防火牆是否阻擋了連接配接。
4.ORA-12154: TNS: 無法處理服務名
檢查輸入的服務名與配置的服務名是否一緻。另外注意生成的本地服務名檔案(Windows下如
D:oracleora92networkadmin tnsnames.ora
或者
Linux/Unix下/network/admin/tnsnames.ora
裡每項服務的首 行服務名稱前不能有空格。
5.ORA-12514: TNS: 監聽程序不能解析在連接配接描述符中給出的SERVICE_NAME
打開Net Manager,選中服務名稱,檢查服務辨別欄裡的服務名輸入是否正确。該服務名必須與伺服器端監聽器配置的全局資料庫名一緻。同時檢查sqlnet.ora,例如如果想要采用簡便連接配接方式連接配接就需要在NAMES.DIRECTORY_PATH參數中添加EZCONNECT。
6.ORA-12518 TNS:監聽程式無法分發客戶機連接配接
出現該報錯有兩個原因:在共享模式下是由于排程程序(dispatchers)太少,在獨占模式下是由于程序數(proces ses)超過了資料庫預設的最大程序數。解決步驟:
1、show parameter process檢視資料庫允許最大程序數
2、select count(*) from v$session;檢視目前系統程序數
如果程序數不夠,可通過擴大PGA來增大程序數:
alter system set workarea_size_policy=auto scope=both;
alter system set pga_aggregate_target=512m scope=both;
3、show parameter dispatchers檢視排程程序數量
如果排程程序太少,則可執行:
alter system set dispatchers = '(protocol=tcp)(dispatchers=3)(service=oracle10xdb)';
7.Windows 下啟動監聽服務提示找不到路徑
用指令或在服務視窗中啟動監聽提示找不到路徑,或監聽服務啟動異常。打開系統資料庫,進入
HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/OracleOraHome92TNSListener
檢視ImagePath字元串項是否存在,如果沒 有,設定值為D:oracleora92BINTNSLSNR,不同的安裝路徑設定值做相應的更改。這種方法同樣适用于Oracle執行個體服務,同 上,找到如同
HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/Oracle ServiceMYORACLE
檢視ImagePath字元串項是否存在,如果沒有,則建立,設定值為d:oracleora92 binORACLE.EXE MYORACLE。以上是Oracle用戶端連接配接伺服器端常見的一些問題,當然不能囊括所有的連接配接異常。解決問題的關鍵在于方法與思路,而不是每種問題都有固定的答案。
8.TNS-12537, TNS-12560, TNS-00507 Linux Error: 29: Illegal seek error When Starting the Listener
在linux,Unix底下如果/etc/hosts檔案配置不正确會出現如下報錯
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檔案的通路權限,檢查/etc/hosts檔案下是否包含
127.0.0.1 localhost.localdomain localhost
9.ORA-12505, TNS:listener does not currently know of SID given in connect descriptor The Connection descriptor used by the client was:192.168.1.1:1521:bbcd
這個問題一般發生在利用JDBC連接配接資料庫時,這裡需要注意,上面的bbcd的位置應該填寫sid_name,一般JDBC的配置格式為
jdbc:oracle:thin:@IP/HOSTNAME:PORT:SID例如jdbc:oracle:thin:@145.**.**.**:1521:z***db2
10.Ora-12514:TNS:監聽程式目前無法識别連結描述符中請求的服務
該問題是由于缺少監聽器的SID_LIST描述項引起的,采用netca進行配置的時候經常會遇到該問題,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))
)))
11.ORA-12528: TNS:listener: all appropriate instances are blocking new connections
ORA-12528:監聽中的服務使用了動态服務,系統啟動後,資料庫沒有正常的MOUNT,是以在動态模式下,就會出現這個問題,用靜态的就不會有這個問題,是以上面的方法就是把監聽設定為靜态,或者在tnsnames.ora中追加(UR=A)。
lisnter.ora增加如下内容
(SID_DESC =
(GLOBAL_DBNAME = ammicly)
(ORACLE_HOME = c:\oracle\product\10.1.0\db_1)
(SID_NAME = ammicly)
)
或者在tnsnames.ora增加如下内容:
(UR=A)
12.ORA-01034: ORACLE not available和ORA-27101: shared memory realm does not exist
檢查tnsping是否能正常工作,檢查lsnrctl status是否正常。檢查local_listener參數(pmon隻會動态注冊port等于1521的監聽,否則pmon不能動态注冊listener,要想讓pmon動态注冊listener,需要設定local_listener參數),通過如下方式設定
alter system set local_listener='(ADDRESS =(PROTOCOL=TCP)(HOST=10.201.1.134)(PORT=1521)(SID=siebtest))';
13.ORA-12520 TNS:Listener count not find available handler for requested type of server
有以下3種可能
1、檢查資料庫是否是專用伺服器,但是在tnsname.ora配置中設定了連接配接方式為shared,這種情況下
打開tnsname.ora, 把(server = shared) 改成 (server = dedicate);
2、是由于process不夠引起的:
select count(*) from v$session;
show parameter processes
show parameter sessions
調大processes參數即可
3、local_listener設定不當,設定方式參見上文。
14.TNS-12542: TNS:address already in use
TNS-12560: TNS:protocol adapter error
TNS-00512: Address already in use
檢查/etc/hosts的配置,是否有多個ip指向同一主機名的情況
參考至:
http://lzysystem.iteye.com/blog/424569http://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
15. Windows下啟動監聽服務提示找不到路徑
HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/OracleOraHome92TNSListener
檢視ImagePath字元串項是否存在,如果沒有,設定值為
D:/oracle/ora92/BIN/TNSLSNR
不同的安裝路徑設定值做相應的更改。這種方法同樣适用于Oracle執行個體服務,同上,找到如同
HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/Oracle ServiceMYORACLE
檢視ImagePath字元串項是否存在,如果沒有,則建立,設定值為
d:/oracle/ora92/binORACLE.EXE MYORACLE
以上是Oracle用戶端連接配接伺服器端常見的一些問題,當然不能囊括所有的連接配接異常。解決問題的關鍵在于方法與思路,而不是每種問題都有固定的答案。
16.ORA-12638: 身份證明檢索失敗
開始 -> 程式 -> Oracle -> Configuration and Migration Tools ->
Net Manager→本地→概要檔案→Oracle進階安全性→驗證→去掉所選方法中的 "NTS"
就可以了.
3.備份還原資料庫
3.1 備份資料庫
exp導出
ORACLE 11g新特性,當表沒有資料時,不配置設定segment,以節省空間,是以exp導出的時候,不導出這些表。針對這個問題,首先執行下面的sql:
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null;
複制上面語句生成的結果,在執行這些即可。
在指令行執行下面即可導出資料庫
exp rad/rad@orcl file='E:\rad.dmp' buffer=40960000
使用導出expdp工具
首先 指定轉儲檔案和日志檔案所在的目錄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;
- 導出
expdp rad/rad@orcl schemas= rad dumpfile=rad-20170101.dmp directory= lmm_db_bak
- 導出部分表使用include
expdp rad/rad@orcl schemas= rad dumpfile=rad-20170101.dmp directory= lmm_db_bak include=table:\"like \'CT%\'\"
注:這種方式可以直接導出那些空表
3.2 還原資料庫
imp導入
如果是還原完整的oracle資料庫,可以先删除目前使用者,再建立使用者,導入資料庫
- 删除使用者
drop user rad cascade;
- 建立使用者
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;
在指令行執行下面即可導入資料庫
imp rad/rad@orcl file='E:\rad.dmp' buffer=40960000 full=y;
導入非完整資料庫dmp檔案(部分表)
如果自己原本資料庫和dmp中存在同樣的表,那麼導入dmp檔案是不會導入已經有的同名表的。需要提前删除自己本來庫裡的同名表。
使用導入impdb工具
impdp rad/rad@orcl schemas= rad directory= lmm_db_bak dumpfile=RAD-20170101.DMP FULL=y;
如果想導入的使用者已經存在:
1. 導出使用者 expdp user1/pass1 directory=dumpdir dumpfile=user1.dmp
2. 導入使用者 impdp user2/pass2 directory=dumpdir dumpfile=user1.dmp REMAP_SCHEMA=user1:user2 EXCLUDE=USER full=y;
如果想導入的使用者不存在:
1. 導出使用者 expdp user1/pass1 directory=dumpdir dumpfile=user1.dmp
2. 導入使用者 impdp system/passsystem directory=dumpdir dumpfile=user1.dmp REMAP_SCHEMA=user1:user2 full=y;
3. user2會自動建立,其權限和使用的表空間與user1相同,但此時用user2無法登入,必須修改user2的密碼