1. 程式人生 > >Oracle新建資料庫總結

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

'/oracle/oradata/orcl/MTLTEMP.dat'

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地址。