10_Oracle_Admin_手動創建一個比較實用的數據庫

上一節中手動創建數據庫由於參數太過簡單,且沒有安裝數據字典,是無法實際應用的,本章節是對上節內容的深入,增加了很多細節和參數配置,按照以下步驟,可以成功安裝一個能實際使用的數據庫。

 

======清理現有數據庫文件======

[oracle@localhost dbs]$ ll

total 240396
-rw-r-----. 1 oracle oinstall  7847936 Aug 28 11:43 cntrlwly.dbf
-rw-r-----. 1 oracle oinstall 81928192 Aug 28 11:40dbs1wly.dbf
-rw-r-----. 1 oracle oinstall 10493952 Aug 28 11:40 dbu1wly.dbf
...
-rw-r-----. 1 oracle oinstall     2560 Aug 28 04:17 spfileorcl.ora
-rw-r-----. 1 oracle oinstall     1536 Aug 28 10:25 spfilewly.ora
-rwxr-xr-x. 1 oracle oinstall      254 Aug 28 07:40 wly.env

 

[oracle@localhost dbs]$ rm -f*dbf

 

[oracle@localhost dbs]$ rm -fspfilewly.ora

[oracle@localhost dbs]$ ls

hc_orcl.dat initorcl.ora  lkWLY      peshm_orcl_0  spfileorcl.ora  hc_wly.dat  initwly.ora   old     peshm_ORCL_0  wly.env init.ora     lkORCL        orapworcl  peshm_wly_0

 

=======準備初始化參數文件=========

可以通過聯機文檔reference參考各參數的含義和用法。對於初學者,可以直接拷貝有經驗的DBA創建的參數文件,也可以對安裝ORACLE時默認創建的數據庫中的PFILE進行修改。

 

[oracle@localhost dbs]$ env |grep ORA

ORACLE_SID=orcl
ORACLE_BASE=/oracle
ORACLE_HOME=/oracle/11g
# 當前使用的是orcl這個數據庫

 

[oracle@localhost dbs]$ stringsspfileorcl.ora > initsmn.ora

# 提取orclSPFILEinitsmn.ora

 

[oracle@localhost dbs]$ viminitsmn.ora

*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
…
~                                                                                
:%s/orcl/smn
# 在vim中使用 %s/原字符串/要替換的字符串將orcl 換成smn
# 這裏有很多目錄也被替換了,需要提前將他們創建出來,否則運行時會報錯
 
:%s/*\.//g
# 去掉SPFILE中帶上的*號


========根據參數文件逐一創建目錄=========

[oracle@localhost dbs]$ catinitsmn.ora

smn.__db_cache_size=96468992
smn.__java_pool_size=4194304
smn.__large_pool_size=4194304
smn.__oracle_base='/oracle'#ORACLE_BASE set from environment
smn.__pga_aggregate_target=146800640
smn.__sga_target=276824064
smn.__shared_io_pool_size=0
smn.__shared_pool_size=159383552
smn.__streams_pool_size=4194304
audit_file_dest='/oracle/admin/smn/adump'
audit_trail='db'
compatible='11.2.0.0.0'
control_files='/oracle/oradata/smn/control01.ctl','/oracle/flash_recovery_area/smn/control02.ctl'
db_block_size=8192
db_domain=''
db_name='smn'
db_recovery_file_dest='/oracle/flash_recovery_area'
db_recovery_file_dest_size=4039114752
diagnostic_dest='/oracle'
dispatchers='(PROTOCOL=TCP) (SERVICE=smnXDB)'
LOG_ARCHIVE_DEST_1='LOCATION=/oracle/oradata/smn/archive'
LOG_ARCHIVE_FORMAT ='%t_%s_%r.dbf'
memory_target=421527552
open_cursors=300
processes=150
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'

 

[oracle@localhost dbs]$ cd/oracle/oradata

 [oracle@localhost oradata]$ mkdir smn

 [oracle@localhost oradata]$ ll

total 8
drwxr-x---. 2 oracle oinstall 4096 Aug 27 09:21 orcl
drwxr-xr-x. 2 oracle oinstall 4096 Aug 28 12:13 smn

 

[oracle@localhost dbs]$ mkdir/oracle/flash_recovery_area/smn/

[oracle@localhost ~]$ mkdir/oracle/oradata/smn/archive

# 創建archive目錄

 

 [oracle@localhost oradata]$ mkdir/oracle/admin/smn/

[oracle@localhost ~]$ cd/oracle/admin/

[oracle@localhost admin]$ ll

total 8
drwxr-x---. 5 oracle oinstall 4096 Aug  5 18:24 orcl
drwxr-xr-x. 2 oracle oinstall 4096 Aug 28 12:33 smn

 

[oracle@localhost admin]$ cp -Rorcl/* smn

# orcl目錄下的子目錄都複製到smn


[oracle@localhost admin]$ cdsmn

[oracle@localhost smn]$ ll

total 20
drwxr-x---. 2 oracle oinstall 12288 Aug 28 12:41 adump
drwxr-x---. 2 oracle oinstall  4096 Aug 28 12:41 dpdump
drwxr-x---. 2 oracle oinstall  4096 Aug 28 12:41 pfile

 

 

[oracle@localhost smn]$ rm -fadump/*

[oracle@localhost smn]$ rm -fdpdump/*


[oracle@localhost smn]$ rm -fpfile/*

# 刪除上述三個子目錄中原有的文件

 

wKioL1QcUy_TTrxVAAI5wZBDT5U947.jpg

 

======準備創建數據庫用的腳本======

由於真正使用的創建數據庫命令很長,如果直接在命令行中輸入,很容易出錯,因此建議先將這個命令編寫成一個腳本,然後執行:

[oracle@localhost dbs]$ vimcrdb01.sql

spool dbcreate.log
 -- 將以下執行的語句輸出到dbcreate.log這個文件中
CREATE DATABASE "smn"
        MAXDATAFILES500
        MAXINSTANCES 8
       MAXLOGFILES  32
        CHARACTER SET"UTF8"
        NATIONALCHARACTER SET AL16UTF16
        ARCHIVELOG
        SYSAUX
        DATAFILE
               '/oracle/oradata/smn/system01.dbf' SIZE 300M
        EXTENTMANAGEMENT LOCAL
        DEFAULTTEMPORARY TABLESPACE temp TEMPFILE '/oracle/oradata/smn/tempts01.dbf' SIZE 100M
        EXTENTMANAGEMENT LOCAL
        UNDOTABLESPACE "UNDOTBS1"
        DATAFILE'/oracle/oradata/smn/undotbs01.dbf' SIZE 200M
        LOGFILE
GROUP 1 (
        '/oracle/oradata/smn/redo01a.rdo',
       '/oracle/oradata/smn/redo01b.rdo'
        ) SIZE 100M,
GROUP 2 (
       '/oracle/oradata/smn/redo02a.rdo',
       '/oracle/oradata/smn/redo02b.rdo'
        ) SIZE 100M,
GROUP 3 (
   '/oracle/oradata/smn/redo03a.rdo',
   '/oracle/oradata/smn/redo03b.rdo'
    ) SIZE 100M
        ;
Spool off;

 

上述腳本需要和數據庫的初始化參數文件中列出的數值一一對應,比如在PFILEundo_tablespace='UNDOTBS1',那麼,在CREATEDATABASE的腳本中,就需要指明UNDO TABLESPACE"UNDOTBS1"。這些細節需要十分小心,否則數據庫創建會失敗。

CREATE DATABASE語句的更多用法細節,可以查詢聯機文檔中SQLReference相關章節的內容。

wKiom1QcU0aQnNCEAADXafjOqxM395.jpg

wKioL1QcU3CAL_fiAAFkNFFAiB4838.jpg

 

========創建環境變量========

[oracle@localhost dbs]$ vimsmn.env

ORACLE_BASE=/oracle
ORACLE_HOME=$ORACLE_BASE/11g
ORACLE_SID=smn
ORACLE_NLS33=$ORACLE_HOME/nls/data
PATH=$ORACLE_HOME/bin:$PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
 
export ORACLE_BASE ORACLE_HOME ORACLE_SID ORACLE_NLS33 PATHLD_LIBRARY_PATH

[oracle@localhost dbs]$ chmod+x smn.env

[oracle@localhost dbs]$ ../smn.env

[oracle@localhost dbs]$ env |grep ORAC

ORACLE_NLS33=/oracle/11g/nls/data
ORACLE_SID=smn
ORACLE_BASE=/oracle
ORACLE_HOME=/oracle/11g

 

======執行創建數據庫用的腳本======

[oracle@localhost dbs]$ sqlplus/nolog

SQL*Plus: Release 11.2.0.1.0 Production on Tue Sep 915:34:09 2014
Copyright (c) 1982, 2009, Oracle.  All rights reserved.

 

SQL> conn / as sysdba

Connected to an idle instance.

 

SQL> create spfile frompfile;

File created.

 

SQL> startup nomount

ORACLE instance started.
 
Total System Global Area 422670336 bytes
Fixed Size                 1336960 bytes
Variable Size            318769536 bytes
Database Buffers          96468992 bytes
Redo Buffers               6094848 bytes

 

SQL>@$ORACLE_HOME/dbs/crdb01.sql;

-- 使用@加上路徑和腳本的名字,就可以執行sql腳本了
Database created.

 

[oracle@localhost ~]$ cd/oracle/admin/smn

[oracle@localhost smn]$ ls

adump  dpdump  pfile

[oracle@localhost smn]$ lsadump

smn_ora_14093_1.aud smn_ora_14201_2.aud smn_ora_14430_1.aud smn_ora_14513_1.aud
smn_ora_14201_1.aud smn_ora_14303_1.aud smn_ora_14430_2.aud

[oracle@localhost ~]$ cd/oracle/oradata/smn

[oracle@localhost smn]$ ls

archive        redo01a.rdo  redo02a.rdo redo03a.rdo  system01.dbf  undotbs01.dbf
control01.ctl redo01b.rdo  redo02b.rdo  redo03b.rdo tempts01.dbf
# 已經創建了很多文件


 

=======創建額外的表空間=======

wKioL1QcU_SgFPyYAAIYaFc_iR0914.jpg

出於安全性和實用性考慮,用戶可以創建額外的表空間,只需要執行CREATETABLESPACE 語句就可以了:

SQL> CREATE TABLESPACEmytbs

  2 DATAFILE '/oracle/oradata/smn/mytbs01.dbf' SIZE 100M

  3 EXTENT MANAGEMENT LOCAL;

Tablespace created.
-- 創建了此表空間以後,可以將數據存放在該空間裏


 

[oracle@localhost dbs]$ cd/oracle/oradata/smn


[oracle@localhost smn]$ ls

archive       mytbs01.dbf  redo01b.rdo  redo02b.rdo redo03b.rdo   tempts01.dbf
# 可以看到剛剛創建的表空間mytbs01.dbf 
control01.ctl redo01a.rdo  redo02a.rdo  redo03a.rdo system01.dbf  undotbs01.dbf

 

 

=======創建數據字典=========

wKioL1QcVRyTbO7IAAKiHz8i9wI901.jpg

沒有數據字典的數據庫是無法使用的,因此這一步是必須的:

[oracle@localhost ~]$ cd/oracle/11g/rdbms/admin

[oracle@localhost admin]$ ls

a0902000.sql                         dbmshtdb.sql           owmricb.plb        prvtmetd.plb
...
catalog.sql  catproc.sql

[oracle@localhost ~]$ cd/oracle/11g/sqlplus

[oracle@localhost admin]$ ls

afiedt.buf glogin.sql  help  libsqlplus.def  plustrce.sql pupbld.sql

 

SQL> spool log1.1

-- 用來記錄執行過程


SQL>@?/rdbms/admin/catalog.sql

-- 執行第一個腳本

...
PL/SQL procedure successfully completed.
 
TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP CATALOG   2014-09-09 17:01:14

 

SQL> spool log2.log


SQL>@?/rdbms/admin/catproc.sql

...
PL/SQL procedure successfully completed.

 

SQL> spool log3.log

SQL> @?/sqlplus/admin/pupbld.sql;

SQL> -- End of pupbld.sql

 

創建過程中會出現一些ERROR,這通常是因爲腳本中會先刪除某個表再創建一個表,而第一次運行時表並不存在,所以那些ERROR是正常的。

[oracle@localhost dbs]$ vimlog2.log

DROP TYPE kupc$_mastererror FORCE
*
ERROR at line 1:
ORA-04043: object KUPC$_MASTERERROR does not exist

 

======檢驗數據庫是否可以正常工作=======

[oracle@localhost dbs]$ env |grep ORA

ORACLE_NLS33=/oracle/11g/nls/data
ORACLE_SID=smn
ORACLE_BASE=/oracle
ORACLE_HOME=/oracle/11g

[oracle@localhost dbs]$ sqlplus/nolog

 
SQL*Plus: Release 11.2.0.1.0 Production on Tue Sep 917:23:07 2014
 
Copyright (c) 1982, 2009, Oracle.  All rights reserved.

 

SQL> conn / as sysdba

Connected to an idle instance.

SQL> startup

ORACLE instance started.
 
Total System Global Area 422670336 bytes
Fixed Size                 1336960 bytes
Variable Size            322963840 bytes
Database Buffers          92274688 bytes
Redo Buffers               6094848 bytes
Database mounted.
Database opened.
-- 正常啓動數據庫

 

SQL> select * from dual;

D
-
X
-- 能夠執行查詢語句

 

SQL> desc dba_objects;

 Name                                     Null?    Type
 ------------------------------------------------- --------------------
 OWNER                                             VARCHAR2(30)
 OBJECT_NAME                                       VARCHAR2(128)
 SUBOBJECT_NAME                                    VARCHAR2(30)
 OBJECT_ID                                          NUMBER
 DATA_OBJECT_ID                                     NUMBER
 OBJECT_TYPE                                       VARCHAR2(19)
 CREATED                                           DATE
 LAST_DDL_TIME                                      DATE
 TIMESTAMP                                         VARCHAR2(19)
 STATUS                                            VARCHAR2(7)
 TEMPORARY                                         VARCHAR2(1)
 GENERATED                                          VARCHAR2(1)
 SECONDARY                                         VARCHAR2(1)
 NAMESPACE                                         NUMBER
 EDITION_NAME                                      VARCHAR2(30)
-- 能夠查詢表結構


 

SQL> Create tabletestb1(id integer, name char(10));

Table created.
--能夠創建表


 SQL> insert into testb1values(0, 'smn');

1 row created.
-- 能夠插入數據


 

SQL> select * from testb1; 

        ID NAME
---------- ----------
         0 smn

到這裏,一個完整的並可以正常工作的數據庫就創建好了

 

wKiom1QcVSThYOQrAAJDBvRdEtU357.jpg

根據具體的需求,還可以安裝一些額外的包。

 

wKiom1QcVTWSE4ATAAIdKC6TFkA299.jpg

wKioL1QcVWbz1fe2AAIwBpgxNuA733.jpg

由於創建數據庫的過程非常繁瑣,且有大量的初始化參數需要設置,爲了簡化操作,ORACLE提供了OMF特性,預設了很多參數幫助安裝。

wKiom1QcVV2z4kaHAAFfgUTCWOo341.jpg

在創建數據庫過程中可能會出現很多問題,需要自行查詢聯機文檔和日誌文件,來排查錯誤。

 

wKioL1QcVYnChaORAAGISph4bgQ094.jpg

 

當數據庫建立好以後,需要修改初始化密碼,其中SYS用戶的缺省密碼是change_on_install

SYSTEM用戶的缺省密碼是manager


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