Oracle數據庫的安裝和使用
- 1、數據庫安裝
- 1.1下載
- 1.2 安裝
- 2、配置數據庫
- 2.1 創建表空間
- 2.2 創建用戶
- 2.3 配置監聽
- 2.4 配置本地服務名(Tnsnames)
- 網絡配置與訪問方式完全解析
- 連接的時候輸入的 TNSNAME
- 連接過程
- 幾種連接方式
- 連接用到的幾種驗證形式
- 1 .lsnrctl status 查看服務器端listener 進程的狀態
- 2 .tnsping 查看客戶端sqlnet.ora 和tnsname.ora 文件的配置正確與否,及對應的服務器的listener 進程的狀態。
- 3.查看instance 是否已經啟動
- 2.5 oracle連接問題
- 1.ORA-12541: TNS: 沒有監聽器
- 2.ORA-12500: TNS: 監聽程序無法啟動專用服務器進程
- 3.ORA-12535: TNS: 操作超時
- 4.ORA-12154: TNS: 無法處理服務名
- 5.ORA-12514: TNS: 監聽進程不能解析在連接描述符中給出的SERVICE_NAME
- 6.ORA-12518 TNS:監聽程序無法分發客戶機連接
- 7.Windows 下啟動監聽服務提示找不到路徑
- 8.TNS-12537, TNS-12560, TNS-00507 Linux Error: 29: Illegal seek error When Starting the Listener
- 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
- 10.Ora-12514:TNS:監聽程序當前無法識別鏈接描述符中請求的服務
- 11.ORA-12528: TNS:listener: all appropriate instances are blocking new connections
- 12.ORA-01034: ORACLE not available和ORA-27101: shared memory realm does not exist
- 13.ORA-12520 TNS:Listener count not find available handler for requested type of server
- 14.TNS-12542: TNS:address already in use
- 15. Windows下啟動監聽服務提示找不到路徑
- 16.ORA-12638: 身份證明檢索失敗
- 3.備份還原數據庫
- 3.1 備份數據庫
- exp導出
- 使用導出expdp工具
- 3.2 還原數據庫
- imp導入
- 導入非完整數據庫dmp文件(部分表)
- 使用導入impdb工具
- 3.1 備份數據庫
1、數據庫安裝
1.1下載


根據自己的操作系統位數,到oracle官網下載(以oracle 11g 為例)
之后把兩個壓縮包解壓到同一個文件夾內(需要注意的是,這個文件夾路徑名稱中最好不要出現中文、空格等不規則字符。)
注意:下載的是Oracle DataBase數據庫服務器!!不要下錯了,下載成client客戶端?。?/strong>
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組中。
- 在sql.net文件中修改語句為
SQLNET.AUTHENTICATION_SERVICE=(NTS)


創建表空間
create tablespace TBS_CHOVA_DATA datafile 'E:OracleoradataTBS_CHOVA_DATA.dbf' size 1000 M autoextend on next 100 maxsize unlimited;
create temporary tablespace TBS_CHOVA_TEMP tempfile 'E:OracleoradataTBS_CHOVA_TEMP.dbf' size 1000 M autoextend on next 100 maxsize unlimited;
create tablespace TBS_CHOVA_IDX datafile 'E:OracleoradataTBS_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自帶的示例用戶,對于正式的業務數據庫或專業測試數據庫可能沒有配置這個用戶,所以需要更改成有效的用戶登錄才可能測試成功。如果這里測試連接不成功,也不要緊,先點完成按鈕結束配置?;氐絆racle網絡管理器(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_HOMEnetworkadmin
- 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 等并不常用。
2. 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 。
3. listener.ora——listener 監聽器進程的配置文件
關于listener 進程就不多說了,接受遠程對數據庫的接入申請并轉交給oracle 的服務器進程。所以如果不是使用的遠程的連接,并且不需要使用OEM時,listener 進程就不是必需的,同樣的如果關閉listener 進程并不會影響已經存在的數據庫連接。
***Listener.ora***文件的例子
#listener.ora Network Configuration File:
#E:oracleproduct10.1.0Db_2NETWORKADMINlistener.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
3. 如果listener 進程沒有問題的話,建立與listener 進程的連接。
4 .根據不同的服務器模式如專用服務器模式或者共享服務器模式,listener 采取接下去的動作。默認是專用服務器模式,沒有問題的話客戶端就連接上了數據庫的server process 。
5 .這時候網絡連接已經建立,listener 進程的歷史使命也就完成了。
##
幾種連接方式
簡便命名連接:
默認已啟用,不需要進行客戶機配置,僅支持TC/IP(無SSL),不支持高級連接,如:連接時故障轉移,源路由,負載平衡。連接方式如:
connect hr/hr@db.us.oracle.com: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)
或者
windowshosts(WIN98) winntsystem32driversetchosts (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:oracleproduct10.1.0db_1NETWORKADMINlistener.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:oracleproduct10.1.0db_1NETWORKADMINsqlnet.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:oracleproduct10.1.0db_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/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
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的
版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。