原文:https://blog.csdn.net/lvshaorong/article/details/78048823
本文基於Redhat 6.7操作系統,已經成功安裝了Oracle 12c數據庫,配置好了內核參數和環境變量,僅介紹一下如何新建一個實例
Oracle Database版本:Oracle Database 12c Release 2(12.2.0.1.0)
下載地址:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
第一步,在之前創建好的,dba用戶組下面的用戶執行dbca,彈出圖形界面
選擇第一項,創建數據庫,點擊下一步
在第二頁“創建模式”中選擇“高級配置”,典型配置會留下很多大坑,很不推薦。
第三頁選擇單實例數據庫,因為我們這里只創建一個能用的簡單數據就行,如果想要做RAC集群,那么你還需要部署硬盤,這種情況會另寫一片文章介紹
選擇模板可以選擇“定制數據庫”或“一般用途或事務處理”,由於定制數據庫是不基於模板的,所以創建過程非常緩慢,可能需要好幾個小時的時間,而“一般用途或事務處理”是基於Oracle提供的模板創建,創建速度很快,5分鍾不到即可完成,而且可配置的選項已經足夠了,所以選擇“一般用途或事務處理”。點下一步
第四頁是充滿大坑的選項,全局數據庫名字可以隨便填,但是SID必須是上面的名字+Sid格式來書寫,否則后面會報找不到.ora文件的錯誤。
“容器數據庫”是12c版本新加的一個功能,但是這個功能可能很少有人用,最麻煩的是一旦勾選了這個選項,那么你新建的數據庫用戶必須以C##開頭,特別不方便,所以此處強烈建議不勾選容器數據庫,除非你真的有這方面需求。
第五頁默認即可
第六頁指定快速恢復區,推薦全部勾選(圖中沒有勾選),有用快速恢復區之后,使用rman做的完整備份會被放到快速恢復區去,啟用歸檔以后可以使用rman快速創建全庫備份。如果此處不填寫,那么以后再想啟用歸檔就要把數據庫實例停止之后再設置歸檔,而且會導致歸檔不完整,所以推薦建立實例的時候就開啟歸檔。另外點擊“編輯歸檔模式參數”按鈕之后可以選擇歸檔文件的保存地點,建議選擇一個和快速恢復區、表空間不同的硬盤來存儲,提高安全性。
注意快速恢復區還有一個大小限制,盡量設置的大一點並且定期清理快速恢復區的備份,否則快速恢復區滿了之后會卡死數據庫的。點擊Edit archive mode parameters還可以配置歸檔日志的參數
“網絡配置”頁面一般使用oracle默認自建的LISTENER即可,使用默認1521端口,如果你想使用別的端口,或者多個端口,就勾選下面的創建新監聽程序。一般推薦創建一個新的,以后改起端口來方便。
Data Vault選項保持默認(全都不勾選)即可
內存管理,如果不知道怎么配置那么就使用默認即可
第二個選擇最大進程限制,這個也很關健,軟件會根據你的cpu和內存情況提供給你一個默認值,但是如果你的應用線程池特別大,你又部署了好幾台應用服務器的話,那么數據庫連接數就會成倍增長,如果數據庫連接數滿了,那你用sqlplus就登錄不進去了,所以一般推薦改的大一點,不過為了防止數據庫性能被耗盡,也不要太大,1000左右就可以。
注意上面還可以選擇塊大小,也就是db_block_size這個參數,此參數和表空間文件的最大大小息息相關,根據操作系統的不同CentOS默認是8192,單個表空間的文件容器最大為32GB,如果你的數據量很大不想頻繁增加表空間文件(最多1024)個,那么應該增大塊大小,如果你前面第三頁“部署類型”選擇的是“定制數據庫”,那么此處是可以修改的,如下圖
第三個標簽容易留下大坑,最重要的是最上面數據庫的存儲方式,一定要選擇UTF-8,下面的默認語言一定要選擇“英語(美國)”,否則在使用命令行和SQLPULS的時候,中文字符很容易變成????,同樣的問題還會出現在你應用的日志上,還是使用英文遠離亂碼的困擾好。
連接模式選擇“專用服務器模式”
示例方案保持默認不勾選就行,點擊下一步
EM據說是個精簡版的Oracle,一般不用配置
配置管理員賬戶密碼,一定要牢記,一會登錄要用上
創建選項推薦勾選另存為數據庫模板,這樣可以很快的創建一模一樣的數據庫,為其他的測試環境創造便利。點擊定制存儲位置可以看到這個實例所創建的表空間的位置
注意這一步特別的關健,直接關系到你的數據庫存放的位置,一般來說我們都會專門掛一個硬盤存放表空間和備份文件,所以這里一般是要手動修改表空間和控制文件的存放位置的,一定不要改錯。同時,如果做集群,更需要注意這個存放位置一定要放到共享磁盤上去
修改默認如下圖
還能看到重做日志的位置,並設置重做日志的大小,可以選擇一個不同於表空間的位置存儲,提高安全性。表空間和重做日志是肯定得有的,歸檔文件和快速恢復區是可選的,一般推薦全部都設置,並且放在不同的存儲設備上。
修改默認后
如果你前面第三頁“部署類型”選擇的是“定制數據庫”,那么這個頁面的配置也會更為豐富,所以我還是推薦自己定制,
比如我們可以增加數據庫控制文件的存放位置和數量,存放位置越多,那么全部丟失的概率就越小,推薦放到不同的磁盤上去,修改完本頁不要忘記點擊Apply
數據庫表空間會默認幫我們建立幾個,我們也可在這用圖形化的界面再創建幾個,並且指定默認表空間,非常方便
這里還可以指定塊大小,要和前面數據庫塊大小配置的一樣才可以,如果不一樣那么在創建過程中會報錯退出
這里一般采用默認值即可,但是要注意圖上圈內的內容,我們可以指定這是一個大文件表空間(普通表空間,8K塊大小的每個表空間文件最大為32G,16K最大為64G,可以通過添加表空間文件來擴大表空間,而大文件表空間單個文件可以上TB,不能通過增加表空間文件的方式來增加表空間大小)為了靈活性還是推薦普通表空間,這樣我們可以把表空間文件分散在不同的磁盤或者存儲上增加並行的速度,但是需要手工去增加表空間文件。第二個選項是設置為默認表空間,這樣在新建用戶的時候就不用指定默認表空間了。
注意設置完畢之后一定要點擊右下角的Apply,不然不會保存
在下面的Datafiles選項里能看到剛剛新建表空間后自動建立的表空間文件,文件大小已經在上一個界面設置好了,這里可以在options選項卡里配置是否自動增長和最大大小。一般來說要打開自動增長,不然你這個表空間大小到達初始大小之后就滿了不能插入新數據了,但是如果你的磁盤大小空間不夠或者有限制的話你可以去掉這個功能。最大大小是在不超過最大限制的情況下的最大大小(8K塊最大32G單個文件,16K最大64G單個文件),比如你的磁盤就剩10G了,而這個表空間文件最大是64G,那么我就可以限制一下防止超出了磁盤的容量。
點擊下一步瀏覽一下概要
點擊完成開始創建數據庫實例,因為是基於模板創建,所以幾分鍾就可以了
完成之后注意“服務器參數文件名”這個配置文件,一定要以Sid.ora結尾,不然啟動不了實例,需要修改配置的時候也是直接修改這個ora文件然后重啟。
然后打開終端
使用dba組的用戶(非root)執行sqlplus,要注意配置好環境變量。語法是sqlplus sys/sys的密碼@數據庫ip:端口/數據庫實例名 as sysdba,如下圖
然后我們就以dba的權限操縱數據庫了,可以執行創建用戶和分配表空間的操作
然后查看一下數據庫的讀寫權限,還有默認的表空間的存放位置,我們新建的表空間最好也放到同一位置下
然后執行創建用戶分配表空間的指令,如果前面都沒問題那么此處應該都很順利
注意如果報錯權限不足,請檢查是不是以sysdba用戶登錄的。請不要以system用戶登錄。
如果報錯ORA-65096:公用用戶名或角色名無效,那么說明你開了oracle容器,用戶名要以C##開頭。
建立完用戶之后我們使用數據庫客戶端比如DBVisualizer或者Navicat這種,由於DBVisualizer使用的是JDBC連接,可以測試JDBC的兼容性,所以我比較喜歡用。
如果使用PLSQL那么一定要用12c的PLSQL,如果你用11g的netca,那么是連不上的,會報下面的錯誤ORA-28040:http://blog.csdn.net/kongxx/article/details/44887379
很順利的連接成功,說明JDBC可用。順道提一下,JDBC的連接url應該是類似於下面這種格式:
jdbc\:oracle\:thin\:@127.0.0.1\:1521/oadb
注意JDBC要注意版本的問題,對於12c的數據庫要用12c的JDBC去連接,否則會報錯找不到數據庫實例的錯誤或者用戶名密碼錯誤。
JDBC的下載地址http://www.oracle.com/technetwork/database/features/jdbc/jdbc-drivers-12c-download-1958347.html
注意ojdbc6.jar是給JDK1.6版本使用的,ojdbc7.jar是給JDK1.7和1.8使用的,注意不要下載錯了。
附錄:sqlplus不能連接數據庫,而數據庫已經建好的解決方案
使用DBCA創建完數據庫以后,數據庫實例是自動啟動的,通過SQLPLUS和RMAN可以很輕松的連上(環境變量中ORACLE_SID要指定正確)。但是一旦在SQLPLUS里停止了這個實例,那么可能就再也連不上了。停止實例的命令是
shutdown immediate
或者
shutdown normal
那么你再通過SQLPLUS登錄的時候,會報“ORA-12514 TNS 監聽程序當前無法識別連接描述符中請求服務”的錯誤,此時使用
lsnrctl status
命令也看不到剛剛關掉的數據庫實例。
然后使用dbca想要修改這個數據庫實例,DBCA報錯該實例不屬於當且節點。這個數據庫實例就像被從本地刪掉了一樣。
出現這個問題的原因是當前數據庫實例沒有靜態綁定到數據庫監聽器。數據庫監聽器只能監聽到已經啟動的數據庫實例,所以就連接不上了,解決方法就是添加監聽器對實例的靜態綁定,那樣不管數據庫實例啟動沒有都可以通過SQLPLUS登錄進去了。
方法是修改/u01/product/12.2.0/dbhome_1/network/admin/listener.ora,這個文件
【修改前】
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
修改后添加了一個SID列表,如下
# listener.ora Network Configuration File: /u01/product/12.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = recoverySid)
(ORACLE_HOME = /u01/product/12.2.0/dbhome_1)
(GLOBAL_DBNAME = recovery)
)
(SID_DESC =
(GLOBAL_DBNAME = oadb)
(ORACLE_HOME = /u01/product/12.2.0/dbhome_1)
(SID_NAME = oadbSid)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
上面的SID_NAME和GLOBAL_DBNAME按照你上面創建實例的實際情況填寫,可以填一個也可以填多個實例,注意一定不要填反了,SID_NAME就是以Sid結尾的名字。ORACLE_HOME就填環境變量中的ORACLE_HOME就可以,需要根據這個去bin目錄下查找一個可執行文件。
配置好listener.ora之后,使用如下語句重啟監聽器
lsnrctl stop
lsnrctl start
進行重啟,重啟之后再使用lsnrctl status查看,就可以看到被我們關掉的實例的名字了,其狀態應該為UNKNOWN,如果不配置listener.ora,那我們是看不到實例的名字的。
[alex@localhost ~]$ lsnrctl status
LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 19-OCT-2017 08:31:55
Copyright (c) 1991, 2016, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date 19-OCT-2017 08:21:39
Uptime 0 days 0 hr. 10 min. 15 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/product/12.2.0/dbhome_1/network/admin/listener.ora
Listener Log File /u01/diag/tnslsnr/localhost/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
Services Summary...
Service "oadb" has 1 instance(s).
Instance "oadbSid", status UNKNOWN, has 1 handler(s) for this service...
Service "recovery" has 2 instance(s).
Instance "recoverySid", status UNKNOWN, has 1 handler(s) for this service...
Instance "recoverySid", status READY, has 1 handler(s) for this service...
Service "recoverySidXDB" has 1 instance(s).
Instance "recoverySid", status READY, has 1 handler(s) for this service...
The command completed successfully