Oracle新建資料庫總結
1. 建立ORACLE例項以後,需要先配置ORACLE的環境變數,我們通過su - oracle 切換使用者至oracle(使用者名稱為oracle)進行配置環境變數:~/.bash_profile,其中~代表當前使用者的$HOME
EXPORTORACLE_HOME=/oracle/app/oracle/product/11.2.0/dbhome_1/
EXPORT ORACLE_SID=SGSORCL,
2. 配置oracle的監聽listener.ora(如果沒有,需要我們自己手動建立),一般在
[[email protected] admin]$ cat listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.31.2.121)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = gzyhdb)
(SID_NAME = SGSORCL)
)
)
ADR_BASE_LISTERNER = /oracle/app/oracle
3. 分別通過命令dbstart和lsnrctl start重啟資料庫和重啟監聽器(1521埠)
一般預設路徑是在$ORACLE_HOME/bin目錄下
4. 開始建立使用者資料庫(包括使用者表空間):
使用oracle使用者登入,進入sqlplus,進行操作:
$su - oracle |
[[email protected] ~]$ sqlplus /nolog SQL*Plus: Release 11.2.0.3.0 Production on 星期四 5月 28 11:33:06 2015 Copyright (c) 1982, 2011, Oracle. All rights reserved. SQL> conn system/system Connected. SQL> --建立資料表空間 SQL> create tablespace MTLDATA datafile '/oracle/oradata/orcl/MTLDATA.dat' size 10240m; --建立索引表空間 SQL> create tablespace MTLINDEX datafile '/oracle/oradata/orcl/MTLINDEX.dat' size 1024 m; --建立臨時表空間 SQL> create temporary tablespace MTLTEMP tempfile size 2048m; --建立使用者並指定表空間 SQL> create user gzyhdb identified by gzyhab default tablespace MTLDATA temporary tablespace MTLTEMP; --給使用者授予許可權 SQL> grant connect,resource to gzyhdb; |
5. 在一切貌似順利的時候,發現通過伺服器上的sqlplus工具,connect可以連線成功,但是通過其他電腦上的oracle客戶端(navicat或者plsql)都不能連線成功,客戶端提示no listener(以下命令都需要用oracle的使用者名稱下啟動,除了配置hostname之外。)
提示:TNS-12541: TNS:no listener錯誤 ,通過上網查發現一般是監聽配置不對,我追加了紅框內的如下內容,指明瞭GLOBAL_DBNAME,和SID_NAME的值。
配置好後再次重啟監聽器時(通過lsnrctlstop關閉,通過lsnrctl start開啟),又出現以下錯誤:
TNS-12547: TNS:lost contact
TNS-12560: TNS:protocol adapter error
TNS-00517: Lost contact
Linux Error: 104: Connection reset by peer
Connecting to(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Linux Error: 111: Connection refused
這個錯誤一般是由我們的伺服器DNS沒有配置127.0.0.1的域名解析,輸入命令:vi /etc/hosts,並進行編輯並追加:127.0.0.1 localhost localhost.localdomain
6. 繼續重啟,發現還是不成功:
[[email protected] bin]$ ./lsnrctl start
LSNRCTL for Linux: Version 11.2.0.3.0 -Production on 15-MAY-2017 20:03:00
Copyright (c) 1991, 2011, Oracle. All rights reserved.
Starting/oracle/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 11.2.0.3.0 -Production
System parameter file is /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Log messages written to/oracle/app/oracle/diag/tnslsnr/oracle/listener/alert/log.xml
Listening on:(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.31.2.121)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Connecting to(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.31.2.121)(PORT=1521)))
發現一隻在connecting....,並通過提示檢視日誌檔案(日誌檔案目錄:
Log messages written to/oracle/app/oracle/diag/tnslsnr/oracle/listener/alert/log.xml),日誌最後列印如下:
<msgtime='2017-05-15T19:54:55.549+08:00' org_id='oracle' comp_id='tnslsnr'
type='UNKNOWN' level='16' host_id='redhat6.5'
host_addr='127.0.0.1'>
日誌中顯示:host_id為'redhat6.5',輸入命令驗證:hostname,輸出了:redhat6.5,
看來找到問題原因了。切換回root使用者進行修改/etc/sysconfig/network,先將原來的主機名稱從:redhat6.5改為其他名稱(我們這裡取名為oracle,此oracle與系統使用者名稱oracle沒有任何關係,也完全可以取名為abc)
此時如果不重啟,系統不會生效,我們對它進行強制生效(通過命令:hostname=oracle)
然後再修改DNS配置檔案,vi /etc/hosts,將172.31.2.121的主機名改為oracle(即netwok中的HOSTNAME;如果取名為abc,則需要將oracle改為abc),然後再重啟監聽器, ./lsnrctl start,啟動成功。
7. 對於HOSTNAME和/etc/hosts的區別和解釋,自己先網上查明。對於我們本案例,
Hostname:是給資料庫伺服器Oracle的listener用的,它通過系統的HOSTNAME(我們配置的名字是oracle),找到/etc/hosts下對應的IP為172.31.2.121並解析。
錯誤的日誌輸出:
<msgtime='2017-05-15T21:14:43.590+08:00' org_id='oracle' comp_id='tnslsnr'
type='UNKNOWN' level='16' host_id='oracle'
host_addr='UNKNOWN'>
配置HOSTNAME和/etc/hosts之後的正確日誌輸出:
<msgtime='2017-05-15T21:24:14.233+08:00' org_id='oracle' comp_id='tnslsnr'
type='UNKNOWN' level='16' host_id='oracle'
host_addr='172.31.2.121'>
<txt>Listening on:
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.31.2.121)(PORT=1521)))
</txt>
</msg>
上述藍色的HOST就是我們listener.ora中配置的HOST地址。