So Easy! Oracle在Linux上的安裝配置系列三

So Easy! Oracle在Linux上的安裝配置系列三

                 使用create database創建數據庫


本文爲So Easy! Oracle在Linux上的安裝配置系列的第三篇,使用create database創建數據庫,本序列第一篇介紹了學習實驗環境的搭建包括:在win 7中使用VMware Workstation 創建虛擬機,安裝CentOS-6.6-x86_64,網絡配置 和使用xshell連接遠程linux服務器,上傳Oracle軟件和使用操作系統安裝光盤搭建本地yum源,第二篇專門說了Oracle11g R2在CentOS6.6上的安裝,包括Oracle安裝前的準備工作,並以圖文詳細介紹了安裝過程,安裝界面亂碼問題,還說了工具軟件rlwrap的安裝和配置,安裝完軟件之後,還設置了oracle用戶的環境變量.


在上一篇的結尾設置了Oracle用戶的環境變量,但是出於實驗目的,最重要的一個環境變量oracle_sid並沒有設置.


本文文檔位置:

http://docs.oracle.com/cd/E11882_01/server.112/e25494/create.htm#CIAEJDBE

文檔一開始就說了幾個最重要的oracle用戶環境變量,包括oracle_home,oracle_sid,path,這幾個環境變量的正確設置 ,是create database執行成功的關鍵


  1. 名詞解釋

  2. 數據庫創建前的準備

  3. 創建初始化參數文件 

  4. 使用create database創建數據庫

  5. 運行腳本創建數據字典


1. 名詞解釋

①、數據庫(database)

       物理操作系統文件或磁盤的集合是一個靜態的概念

②、實例(instance):

       一組Oracle後臺進程/線程以及一個共享內存區,這些內存由同一個計算機上運行的線程/進程共享

③、參數文件

       數據庫的參數文件,通常稱爲初始文件,這個文件告訴oracle實例在哪裏可以找到控制文件,並且指定某些初始化參數,這些參數定義了某種內存結構有多大等設置 默認名init<ORACLE_SID>.ora   Oracle,

Oracle9iR1開始引入了一個改進的新服務器參數文件(server parameter file)簡稱爲SPFILE默認名爲spfile<ORACLE_SID>,這兩個文件的默認存放位置爲$ORACLE_HOME/dbs. 數據庫參數是一個鍵/值對 如db_name=ora11g,當oracle實例啓動會從參數文件中讀取初始化參數,create database語句創建數據庫時最少的初始文件必須包含db_name,此參數和oracle_sid環境變量的值相同,其它參數可以使用默認值。oracle啓動時會搜索服務器參數文件(spfile),如果找不到spfile則會查找文本的初始文件。

參數文件的文檔位置:

http://docs.oracle.com/cd/E11882_01/server.112/e25494/create.htm#i1013946

④、 控制文件

        控制文件記錄oracle數據庫的物理結構,是一個相當小的二進制文件,其中包含Oracle需要的其他文件的一個目錄。參數文件告訴實例控制文件的位置,控制文件則告知實例數據庫和在線重做日誌文件的位置。控制文件包括數據庫名,數據庫和在線重做日誌文件的位置,創建數據庫的時間戳,當前日誌序列號,檢查點等 .控制文件在發出create database語句時被創建,控制文件的文件名由參數文件中的CONTROL_FILER指定 

參數文件中的控制文件的例子如:(/u01/app/oracle/admin/control目錄必須先創建)

CONTROL_FILES = (/u01/app/oracle/admin/control/control01.ctl,
                 /u01/app/oracle/admin/control/control02.ctl, 
                 /u01/app/oracle/admin/control/control03.ctl)

作爲實驗環境控制文件都以不同文件名保存在同一目錄下,生產環境中建議多路保存

控制文件的文檔位置:

http://docs.oracle.com/cd/E11882_01/server.112/e25494/control.htm#g1009963


2 . 數據庫創建前的準備

上一篇中我們安裝了Oracle Database 11g 11.2.0.1。我們執行一個純軟件的安裝 ,不包括初始的"啓動"數據庫,除了軟件外什麼都沒有。

切換到oracle初始文件的目錄,可以看到除oracle提供的一個初始文件模板外,這個目錄中什麼內容也沒有

$ cd $ORACLE_HOME/dbs 
$ pwd

/u01/app/oracle/product/11.2.0/db_1/dbs
[oracle@Oracle dbs]$ ls
init.ora

使用linux的ps命令.查看oracle軟件所有者運行的所有進程,這裏oracle是軟件的所有者,可以看到此時沒有任何Oracle數據庫進程 

$ ps -aef | grep oracle 
root      32429   22185  0 11:06 pts/1     00:00:00 su - oracle
oracle    32431  32429  0 11:06 pts/1     00:00:00 -bash
oracle    32526  32431  0 11:26 pts/1     00:00:00 vim .bash_profile
root      33101   21914   0 14:57 pts/0    00:00:00 su - oracle
oracle    33103  33101   0 14:57 pts/0    00:00:00 -bash
oracle    33205  33103  0 15:07 pts/0    00:00:00 ps -aef
oracle    33206  33103  0 15:07 pts/0    00:00:00 grep oracle

使用linux的ipcs -a查看顯示unix進程間的通信設備,如共享內存,信號量等 ,可以看到目前系統中沒有任何通信設備 

$ ipcs -a 

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      

------ Semaphore Arrays --------
key        semid      owner      perms      nsems    

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages

啓動SQL *Plus,並作爲sysdba連接 ,開始時假設還沒有設置環境變量ORACLE_SID,將看到:

$ sqlplus  / as sysdba 

SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 15 15:10:50 2015

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

ERROR:
ORA-12162: TNS:net service name is incorrectly specified


Enter user-name:

有錯誤發生,因爲數據庫軟件不知道該連接誰。連接時,Oracle軟件將查找一個TNS連接字符串(一個網絡連接)。如果像這個例子,沒有連接字符串,Oracle軟件將查找ORACLE_SID的變量。ORACLE_SID是Oracle的站點標識符,它是訪問實例的鍵,如果像下面這樣設置ORACLE_SID

export ORACLE_SID=ora11g 

連接將會成功,SQL*Plus報告稱連接上了一個空閒的實例:

$ export ORACLE_SID=orcl
[oracle@Oracle dbs]$ sqlplus  / as sysdba


SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 15 15:13:25 2015

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to an idle instance.

SQL>

實例現在只包括一個oracle服務器進程,此時還沒有分配共享內存,也沒有其他進程 

$ ps -aef | grep oracle | grep -v pts
oracle    33228  33227  0 15:13 ?        00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
$ ipcs -a

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      

------ Semaphore Arrays --------
key        semid      owner      perms      nsems    

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages

下面啓動實例

SQL> startup 
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u01/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora'

注意關於丟失文件initorcl.ora的錯誤。那個文件爲init.ora文件,通常叫做參數文件,是啓動實例時必須要有的一個文件 ,啓動實例時我們需要有一個參數文件 或者要一個存儲參數文件 


3. 創建初始化參數文件 

現在就來創建參數文件並放入啓動數據庫實例的最少信息,默認情況下,文件位於$ORACLE_HOME/dbs目錄,名字init${ORACLE_SID}.ora

只需要有db_name就可以啓動數據庫實例,但是oracle推薦最小初始化參數爲:

DB_NAME
CONTROL_FILES
MEMORY_TARGET

DB_NAME:參數設置數據庫的名字。這量個強制性的參數,其值與創建的數據庫名稱相同。DB_NAME的值應該與ORACLE_SID環境變量的值相同。此參數在數據庫創建後不能更改.DB_NAME的值最多爲8個字符

CONTROL_FILES:控制文件是保存數據文件名和位置以及許多其他重要信息的關鍵文件。數據庫只需要一個控制文件,但因爲這是一個非常重要的文件,所以總會保存多個副本。多路複用控制文件的方法是在CONTROL_FILES參數中指定多個位置,這個oracle強烈推薦的參數

MEMORY_TARGET:設置這個參數可以使oracle的內存管理完全自動化,這個參數指定分配給oracle的內存。數據庫將調優SGA和PGA組件的值,使它們的和等於MEMORY_TARGET參數值,可以KB,MB或GB爲單位設置這個值

 爲了以後創建監聽器的實驗,這裏還有幾個參數需要注意,這幾個參數可以在一臺安裝並創建了數據庫的機器上使用SHOW PARAMETER NAME看到如下:

SQL> SHOW PARAMETER NAME 

NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert     string
db_name                     string     ora11g
db_unique_name     string     ora11g
global_names             boolean     FALSE
instance_name             string      ora11g
lock_name_space             string
log_file_name_convert     string
service_names             string      ora11g

DB_UNIQUE_NAME:參數指定數據庫的全局名稱.默認和db_name相同。如果是手動設置一般格式爲database_naem.database.domaim.

INSTANCE_NAME:在單一實例環境中,INSTANCE_NAME參數具有與DB_NAME參數相同的值,默認值實例SID

SERVICE_NAME:爲數據庫服務提供一個名字,可以隨意起一個名字,默認值DB_NAME.DB_DOMAIN

DIAGNOSTIC_DEST:Oracle Database 11g爲存儲診斷信息使用一種新的結構,稱爲Automatic Diagnostic Repository(ADR).用初始化參數DIAGNOSTIC_DEST指定這個目錄的位置。DIAGNOSTIC_DEST參數以下面的方式指定ADR的結構 

<diagnostic_dest>/diag/rdbms/<dbname>/<instname>

ADR文檔位置

http://docs.oracle.com/cd/E11882_01/server.112/e25494/control.htm#g1009963

此ADR主目錄包含預警日誌,跟蹤文件,核心文件和意外事件文件

DB_DOMAIN:指定數據庫的完全限定名,這個參數一般與擁有數據庫的組織機構的名稱相同

創建init.ora文件:

$ pwd 
/u01/app/oracle/product/11.2.0/db_1/dbs
[oracle@Oracle dbs]$ vim initorcl.ora

db_name=orcl
memory_targer=1G  
diagnostic_dest=/u01/app/oracle/admin
CONTROL_FILES = (/u01/app/oracle/admin/control/control01.ctl,
                /u01/app/oracle/admin/control/control02.ctl,
                /u01/app/oracle/admin/control/control03.ctl)
db_unique_name=orcl
instance_name=orcl
db_domain=Oracle.Study.org
service_names=orcl_Oracle.Study.org

這裏的初始參數比啓動實例的最小化參數多了好多,不過不管了,就這樣吧!

爲了創建數據庫,首先必須使實例啓動和運行。注意,實例可獨立存在而無需附加到其上的數據庫,活動的實例能夠創建數據庫。

實例啓動必須滿足的前提是:

# env | grep ORA
ORACLE_SID=orcl
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1

另外創建過程中所需要的目錄必須先被創建好

準備將來存放數據文件、日誌文件,控制文件,ADR的路徑,。這幾類文件的路徑如下

如果沒有事先創建好存儲控制文件,ADR的路徑,實例不能啓動,如果沒有準備好數據文件,日誌文件的路徑CREATE DATABASE語句將出錯

$ mkdir -p  $ORACLE_BASE/admin/{control,logs/my,oradata/orcl}
$ tree $ORACLE_BASE/admin

wKiom1UuJs7gauoOAADObOezrJ0438.jpg

4. 使用create database創建數據庫

經過以上步驟數據庫創建準備工作完成,下面將使用CEATE DATABASE創建數據庫

ADR(自動診斷信息庫)存儲在$ORACLE_BASE/admin下面,ADR所使用的目錄將從這個目錄派生

控制文件存話在:$ORACLE_BASE/admin/control下面

日誌文件存放在:$ORACLE_BASE/admin/logs和$ORACLE_BASE/logs/my下面

數據文件在放在:$ORACLE_BASE/admin/oradata/orcl下面

以NOMOUNT方式啓動實例,因爲現在還沒有任何控制文件可安裝。如果使用普通的STRATUP命令,Oracle將查找控制文件。不用擔心現在還沒有創建它們,在創建數據庫的過程中會創建的。

wKioL1UuLQmzLz9vAAEdkK_C0uo082.jpg


以nomount方式裝載數據庫得到以上錯誤,產生這個錯誤的原因是共享內存太小,我們設置MEMORY_TARGET的內存爲1g,,解決辦法是增加系統的共享內存

$ df -h | grep shm
tmpfs                 931M     0  931M   0% /dev/shm

可以看到shm的大小爲931M,但我們的MEMORY_TARGET設置爲1G,MEMORY_TARGET 的設置不能超過 /dev/shm 的大小,知道問題所在就很容易解決,立馬加大shm

$ su root  -c  "sed -i 's/tmpfs[[:blank:]]*defaults/tmpfs defaults,size=1G/' /etc/fstab" 
$ cat /etc/fstab | grep tmpfs
tmpfs                   /dev/shm                tmpfs defaults,size=1G        0 0

 可以通過重啓使這個配置生效,也可以通過重新掛載來修改其大小:

#su -c "mount -o remount,size=1G /dev/shm" root
$ df -h | grep shm
tmpfs                 1.0G     0  1.0G   0% /dev/shm

實例可以正常啓動不報錯了

wKioL1UuUUegefrTAAG2zwHogyA372.jpg


現在就有了所謂的"實例"。運行數據庫所需的後臺進程都有了,如進程監視器(process monitor)、日誌寫入器(log write,lgwr)等 

wKioL1UuWpeTTwWLAAOaWBKoL9E623.jpg


再使用ipcs 命令,它會首次報告指出使用了共享內存和信號量

wKiom1UuWbmA7hZJAAG1IQuYRVY083.jpg


可在這一步執行簡單的查詢驗證數據庫版本

SQL> SELECT * FROM v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production


也可以查看ADR(自動診斷消息庫)的目錄結構

wKioL1UuXhuzfzJAAAMZnH4X5FU861.jpg


可再預警日誌中查看oracle實例的創建過程

$ cd $ORACLE_BASE/admin/diag/rdbms/orcl/orcl/trace 
$ tail -f alert_orcl.log  

Oracle將所有啓動和關閉以及實例創建和例行數據庫數據庫操作的信息寫預警日誌。預警日誌還列出init.ora文件中的所有非默認的初始化參數。請注意所有Oracle進程的啓動,這些進程包括:

DBWn  :(Database Block Write)數據庫塊寫入器

LGWR  :(Log Writer Process)日誌寫入器

PMON  :(Porcess Monitor)進程監視器

CKPT    :(Checkpoint Process)檢查點進程

SMON :(System Monitor Process)系統監視器

RECO   :(recoverer process)分佈式數據庫恢復

注意,我們還沒有"數據庫"呢!此時,只有數據庫之名(在所創建的參數文件中),而沒有數據庫之實。

如何試圖“裝載”這個數據庫,就會失敗,因爲數據庫根本就不存在,下面就來創建數據庫,可以在預警日誌中查看數據庫的創建過程:

CREATE  DATABASE orcl
USER SYS IDENTIFIED BY oracle
USER SYSTEM IDENTIFIED BY oracle
LOGFILE GROUP 1 ('/u01/app/oracle/admin/logs/redo01a.log','/u01/app/oracle/admin/logs/my/redo01b.log') SIZE 100M BLOCKSIZE 512,
       GROUP 2 ('/u01/app/oracle/admin/logs/redo02a.log','/u01/app/oracle/admin/logs/my/redo02b.log') SIZE 100M BLOCKSIZE 512,
       GROUP 3 ('/u01/app/oracle/admin/logs/redo03a.log','/u01/app/oracle/admin/logs/my/redo03b.log') SIZE 100M BLOCKSIZE 512
MAXLOGFILES   5
MAXLOGMEMBERS 5
MAXLOGHISTORY 1
MAXDATAFILES  3
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
EXTENT MANAGEMENT LOCAL
DATAFILE '/u01/app/oracle/admin/oradata/orcl/system01.dbf' SIZE 325M REUSE
SYSAUX DATAFILE '/u01/app/oracle/admin/oradata/orcl/sysaux01.dbf' SIZE 325M REUSE
DEFAULT TABLESPACE users
DATAFILE '/u01/app/oracle/admin/oradata/orcl/users01.dbf'  SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE tempts1
TEMPFILE '/u01/app/oracle/admin/oradata/orcl/temp01.dbf'  SIZE 20M REUSE
UNDO TABLESPACE undotbs
DATAFILE '/u01/app/oracle/admin/oradata/orcl/undotbs01.dbf'  SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

現在數據庫已經有了,可以簡單地查詢一些Oracle V$視圖(具體就是v$datafile、v$logfile和v$controlfile),列出構成數據庫的文件:

列出數據文件:

SQL> SELECT name FROM v$datafile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/admin/oradata/orcl/system01.dbf
/u01/app/oracle/admin/oradata/orcl/sysaux01.dbf
/u01/app/oracle/admin/oradata/orcl/undotbs01.dbf
/u01/app/oracle/admin/oradata/orcl/users01.dbf

列出日誌文件:

SQL> SELECT member FROM v$logfile;

MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/admin/logs/redo01a.log
/u01/app/oracle/admin/logs/my/redo01b.log
/u01/app/oracle/admin/logs/redo02a.log
/u01/app/oracle/admin/logs/my/redo02b.log
/u01/app/oracle/admin/logs/redo03a.log
/u01/app/oracle/admin/logs/my/redo03b.log

列出控制文件:

SQL> SELECT name FROM v$controlfile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/admin/control/control01.ctl
/u01/app/oracle/admin/control/control02.ctl
/u01/app/oracle/admin/control/control03.ctl

5. 運行腳本創建數據字典

運行腳本創建必須的數據字典,同名對象和PL/SQL包

在SQL * Plus中以sysdba身份運行以下兩個腳本

@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql

在SQL * Plus中以system身份運行以下腳本

@?/sqlplus/admin/pupbld.sql

可以運行另外的腳本添加符加的選項

文檔位置

http://docs.oracle.com/cd/E11882_01/server.112/e40402/scripts.htm#REFRN005

在啓動oracle實例或重起linux會話時,記得在oracle用戶的.bash_profile文件中添加oracle_sid

export ORACLE_SID=orcl


本篇的內容到此爲止,恭候閱讀,不對的地址請批評指證,討論. 

                                                                                                                                                    qq:276631587

                                                                                                                                                good luck!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章