- Oracle DBA基礎(chǔ)教程
- 林樹澤
- 3268字
- 2021-03-26 13:21:37
1.5 手工建庫
1.5.1 手工建庫的步驟以及注意事項
手工創(chuàng)建數(shù)據(jù)庫需要詳細的前期工作,并且要求對操作系統(tǒng)和應(yīng)用系統(tǒng)有清晰的了解,手工創(chuàng)建數(shù)據(jù)庫的過程如下:
01 確定唯一的實例名和數(shù)據(jù)庫名;
02 選擇數(shù)據(jù)庫字符集;
03 設(shè)置操作系統(tǒng)變量;
04 編輯或創(chuàng)建初始化參數(shù)文件;
05 啟動實例(NOMOUNT);
06 執(zhí)行CREATE DATABASE指令;
07 運行腳本來創(chuàng)建數(shù)據(jù)字典并完成之后的數(shù)據(jù)庫創(chuàng)建過程。
下面將對以上步驟做詳細的介紹。
1.確定實例名
首先需要確定數(shù)據(jù)庫名和實例名,一般在設(shè)置時將二者的名字設(shè)為相同以便于維護,一個數(shù)據(jù)庫可以對應(yīng)多個實例,如集群RAC系統(tǒng),但是一個實例只能對應(yīng)一個數(shù)據(jù)庫。
2.選擇數(shù)據(jù)庫字符集
要根據(jù)操作系統(tǒng)選擇字符集,如果是中文Windows系統(tǒng),則最好選用中文字符集ZHS16GBK,這樣可以減少數(shù)據(jù)庫字符集和操作系統(tǒng)字符集之間的轉(zhuǎn)換。
3.設(shè)置操作系統(tǒng)變量
在創(chuàng)建數(shù)據(jù)庫前要設(shè)置如下所示的操作系統(tǒng)變量。
● Oracle_BASE:在Oracle軟件的頂層目錄。例如在筆者的電腦上,這個頂層目錄為F:\Oracle。
● Oracle_HOME:設(shè)置Oracle軟件的安裝目錄。在筆者電腦上該安裝目錄為F:\Oracle\product\10.2.0。
● ORA_NLS33:當(dāng)創(chuàng)建不是US7ASCII字符集的數(shù)據(jù)庫時使用該操作系統(tǒng)參數(shù),如$Oracle_HOME/ocommon/nls/admin/data。
● PATH:設(shè)置操作系統(tǒng)搜索可執(zhí)行文件的目錄,如執(zhí)行SQLPLUS、DBCA等工具,在Oracle11g中該目錄是$Oracle_HOME/bin,并且需要將該目錄添加到操作系統(tǒng)的PATH變量中。
● LD_LIBRARY_PATH:說明操作系統(tǒng)和Oracle數(shù)據(jù)庫文件的目錄,筆者的電腦上為$Oracle_HOME/lib。
4.創(chuàng)建初始化參數(shù)文件
在安裝數(shù)據(jù)庫軟件時生成了一個初始化參數(shù)文件init.ora,此時創(chuàng)建一個新庫需要的初始化參數(shù)文件newinit.ora,將init.ora文件中的內(nèi)容全部復(fù)制到newinit.ora文件中,然后修改newinit.ora文件中的參數(shù)選項,如修改數(shù)據(jù)庫名db_name,或SGA大小sga_target參數(shù)等。在參數(shù)文件中至少有一個數(shù)據(jù)庫名參數(shù),其他參數(shù)可以沒有。
此時如果需要使用SPFILE參數(shù)文件啟動數(shù)據(jù)庫,可以使用如下命令初始化SPFILE參數(shù)文件,即CREATE SPFILE FORM PFILE。
5.啟動數(shù)據(jù)庫到NOMOUNT狀態(tài)
此時啟動了實例,讀取參數(shù)文件,在當(dāng)前數(shù)據(jù)庫狀態(tài)下執(zhí)行數(shù)據(jù)庫創(chuàng)建,如下所示。
SQL> connect system/Oracle@orcl as sysdba
6.使用CREATE DATABASE指令創(chuàng)建數(shù)據(jù)庫
我們首先給出文獻中提供的手工創(chuàng)建數(shù)據(jù)庫的語法格式,然后給出一個例子詳細介紹。
創(chuàng)建數(shù)據(jù)庫的語法格式如下所示。
CREATE DATABASE [database] [CONTROLFILE REUSE] LOGFILE [GROUP integer]] filename [MAXLOGFILES integer] [MAXLOGMEMBERS integer] [MAXLOGHISTORY integer] [MAXDATAFILES integer] [MAXDINSTANCES integer] [ARCHIVELOG|NOARCHIVELOG] [CHARACTER SET charset] [NATIONAL CHARACTER SET charset] [DATAFILE filename [autoextend_clause]]
下面我們給出一個例子說明如何使用CREATE DATABASE來創(chuàng)建數(shù)據(jù)庫。
SQL> CREATE DATABASE LIN 2 LOGFILE 3 GROUP 1 ('F:/logfile/redo01_lin.log') size 20M 4 GROUP 1 ('F:/logfile/redo02_lin.log') size 20M 5 GROUP 1 ('F:/logfile/redo03_lin.log') size 20M 6 MAXLOGFILES 5 7 MAXLOGMEMBERS 5 8 MAXLOGHISTORY 8 9 MAXDATAFILES 256 10 MAXINSTANCES 1 11 ARCHIVELOG 12 FORCE LOGGING 13 DATAFILE 'F:/LINDATA/SYSTEM01_LIN.DBF' SIZE 500m 14 UNDO TABLESPACE UNDOTBS 15 DATAFILE 'F:/UNDODATA/UNDO01_LIN.DBF' SIZE 100m 16 DEFAULT TEMPORARY TABLESPACE temp 17 TEMPFILE 'F:/TEMPFILE/temp01_lin.dbf' SIZE 100M 18 EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M 19 character set ZHS16GBK;
● 第1行:創(chuàng)建名為LIN的數(shù)據(jù)庫。
● 第2行~5行:創(chuàng)建3個重做日志組,每個日志組一個重做日志成員,每個成員大小為20MB。
● 第6行:該數(shù)據(jù)庫中最多有5個重做日志組。
● 第7行:每個重做日志組最多有5個重做日志成員。
● 第8行:在集群環(huán)境中自動介質(zhì)恢復(fù)時需要的最多歸檔日志文件數(shù)量。
● 第9行:控制文件中保留的數(shù)據(jù)文件記錄個數(shù)。
● 第10行:可以同時打開的數(shù)據(jù)庫個數(shù)為1。
● 第11行:新建的數(shù)據(jù)處于歸檔模式。
● 第12行:強制將除臨時表空間和臨時段中的變化數(shù)據(jù)外的所有變化,記錄到重做日志文件中。
● 第13行:新數(shù)據(jù)庫使用的數(shù)據(jù)文件為F:/LINDATA/SYSTEM01_LIN.DBF,大小為500MB,注意此時該文件是系統(tǒng)SYSTEM表空間基于的數(shù)據(jù)文件,默認(rèn)是用戶創(chuàng)建的表或其他數(shù)據(jù)庫對象將保存在系統(tǒng)表空間中,所以在創(chuàng)建數(shù)據(jù)庫后要創(chuàng)建一個USERS表空間用來存儲用戶數(shù)據(jù)。
● 第14行~15行:設(shè)置UNDO表空間(還原表空間),該表空間基于的數(shù)據(jù)文件為F:/UNDODATA/UNDO01_LIN.DBF,文件大小為100MB。
● 第16~17行:設(shè)置TEMP表空間(默認(rèn)臨時表空間),該表空間基于的數(shù)據(jù)文件為F:/TEMPFILE/temp01_lin.dbf,文件大小為100MB。
● 第18行:臨時表空間的存儲參數(shù)。該表空間為本地管理的表空間,EXTENT大小為1MB。
● 第19行:設(shè)置數(shù)據(jù)庫字符集為中文字符集ZHS16GBK。
注意
在上述手工創(chuàng)建數(shù)據(jù)庫的過程中沒有創(chuàng)建用戶,此時使用數(shù)據(jù)庫默認(rèn)的用戶名和密碼,其中SYS用戶的密碼為change_on_install,而SYSTEM用戶的密碼為 manager。
此時,數(shù)據(jù)庫中包含了數(shù)據(jù)文件、控制文件和重做日志文件,一個數(shù)據(jù)表空間,一個還原表空間以及一個臨時表空間。但是還需要使用腳本文件來創(chuàng)建數(shù)據(jù)字典。
7.創(chuàng)建數(shù)據(jù)字典視圖
此時使用catalog.sql腳本文件,目錄$Oracle_HOME\RDBMS\ADMIN為該腳本文件的存儲目錄。如果讀者查看該文件的內(nèi)容會發(fā)現(xiàn)一系列創(chuàng)建視圖的SQL語句,Oracle使用腳本文件使得SQL指令成批地執(zhí)行,在執(zhí)行該腳本文件創(chuàng)建數(shù)據(jù)字典時要確保數(shù)據(jù)庫處于打開狀態(tài),如下所示。
SQL> CONNECT SYSTEM/Oracle@ORCL AS SYSDBA SQL>@F:\Oracle\product\10.2.0\db_1\RDBMS\ADMIN\CATALOG.SQL;
8.創(chuàng)建PL/SQL的軟件包和過程
此時使用catproc.sql腳本文件。目錄$Oracle_HOME\RDBMS\ADMIN為該腳本文件的存儲目錄。在數(shù)據(jù)庫打開的狀態(tài)下執(zhí)行該腳本,如下所示。
SQL> CONNECT SYSTEM/Oracle@ORCL AS SYSDBA SQL>@F:\Oracle\product\10.2.0\db_1\RDBMS\ADMIN\CATPROC.SQL;
9.創(chuàng)建用戶的概要文件以及相關(guān)過程
此時使用pupbld.sql腳本文件。目錄$Oracle_HOME\SQLPLUS\ADMIN為該腳本文件的存儲目錄。該文件必須在DBA用戶下執(zhí)行,如下所示。
SQL> CONNECT SYSTEM/Oracle@ORCL AS SYSDBA SQL>@F:\Oracle\product\10.2.0\db_1\RDBMS\SQLPLUS\CATPROC.SQL;
說明
此時成功手工創(chuàng)建了數(shù)據(jù)庫,但是在創(chuàng)建數(shù)據(jù)庫的過程中會出現(xiàn)一些問題,如創(chuàng)建的文件可能已經(jīng)存在,此時必須手工刪除這些文件再重新創(chuàng)建數(shù)據(jù)庫,如果建庫過程中出現(xiàn)了問題,而需要使用CREATE DATABASE創(chuàng)建數(shù)據(jù)庫,則要先刪除掉操作系統(tǒng)上已經(jīng)創(chuàng)建的文件。如遇到文件權(quán)限或磁盤空間不足的情況也需要重新執(zhí)行相關(guān)指令,所以在手工創(chuàng)建數(shù)據(jù)庫前要做詳細的“調(diào)查研究”,搞清楚需求和機器的硬件軟件資源。
1.5.2 Linux系統(tǒng)上的手工建庫實例
前提是我們預(yù)先安裝了Oracle數(shù)據(jù)庫軟件,即RDBMS,并且配置了環(huán)境變量$Oracle_HOME、$Oracle_BASE。下面我們詳細介紹在此基礎(chǔ)上如何從無到有,手工創(chuàng)建一個數(shù)據(jù)庫。
1.查看當(dāng)前的環(huán)境變量
[Oracle@ocm1 ~]$ echo $Oracle_HOME /u01/app/Oracle/product/10.2.0/db_1 [Oracle@ocm1 ~]$ echo $Oracle_BASE; /u01/app/Oracle
獲得環(huán)境變量值,為編寫參數(shù)文件中的某些參數(shù)涉及的目錄做準(zhǔn)備。
2.編寫參數(shù)文件
參數(shù)文件的內(nèi)容如下:
compatible=10.2.0.1.0 db_name=pod instance_name=POD sga_max_size=500m sga_target=300m undo_management=auto undo_tablespace=undotbs job_queue_processes=10 user_dump_dest=/u01/app/Oracle/admin/POD/udump core_dump_dest=/u01/app/Oracle/admin/POD/cdump background_dump_dest=/u01/app/Oracle/admin/POD/bdump control_files='/u01/app/Oracle/oradata/POD/control01.ctl','/u01/app/Oracle/oradata/POD/cont rol02.ctl','/u01/app/Oracle/oradata/POD/control03.ctl'
下面我們依次解釋這些參數(shù)的含義:
● compatible:Oracle數(shù)據(jù)庫版本號;
● db_name:數(shù)據(jù)庫名;
● instance_name:實例名;
● sga_max_size:設(shè)置SGA的最大值;
● sga_target:設(shè)置SGA_TARGET的值,該值不大于SGA_MAX_SIZE的值;
● undo_management:還原表空間的管理方式;
● undo_tablespace:數(shù)據(jù)庫要使用的還原表空間;
● job_queue_processes:作業(yè)隊列進程數(shù);
● user_dump_dest:用戶后臺導(dǎo)出文件目錄,參考$Oracle_BASE設(shè)置;
● core_dump_dest:核心后臺導(dǎo)出文件目錄,參考$Oracle_BASE設(shè)置;
● background_dump_dest:后臺進程導(dǎo)出文件目錄,參考$Oracle_BASE設(shè)置;
● control_files:控制文件的目錄和文件名,控制文件需要多工設(shè)置。
3.創(chuàng)建密碼文件
密碼文件存放的目錄位于$Oracle_HOME/dbs下,我們在該目錄下創(chuàng)建密碼文件,如下所示。
[Oracle@ocm1 dbs]$ orapwd file=orapwPOD password=Oracle
此時,我們完成了初始化參數(shù)為文件和密碼文件的創(chuàng)建,就可以啟動數(shù)據(jù)庫到nomount狀態(tài)了,但是要注意,由于是手工建庫,某些目錄需要創(chuàng)建,下面我們就創(chuàng)建這些必要的目錄。
4.創(chuàng)建所需要的目錄
mkdir /u01/app/Oracle/admin/POD/{a,b,c,u,dp}dump -p mkdir /u01/app/Oracle/oradata/disk1 -p mkdir /u01/app/Oracle/oradata/disk2 mkdir /u01/app/Oracle/oradata/POD/ -p
5.啟動數(shù)據(jù)庫到nomount狀態(tài)
首先需要告訴數(shù)據(jù)庫要啟動的是哪個數(shù)據(jù)庫,通過export的一個環(huán)境變量獲得,之后使用pfile參數(shù)啟動數(shù)據(jù)庫到nomount狀態(tài)。
export Oracle_SID=POD sqlplus / as sysdba SQL> startup nomount pfile='/u01/app/Oracle/product/10.2.0/db_1/dbs/initPROD.ora'; Oracle instance started. Total System Global Area 524288000 bytes Fixed Size 1220384 bytes Variable Size 310378720 bytes Database Buffers 209715200 bytes Redo Buffers 2973696 bytes SQL> create spfile from pfile; File created.
接下來,使用startup force指令來強制數(shù)據(jù)庫關(guān)閉再重啟,但只是啟動到nomount狀態(tài)。
SQL> startup force nomount; Oracle instance started. Total System Global Area 524288000 bytes Fixed Size 1220384 bytes Variable Size 310378720 bytes Database Buffers 209715200 bytes Redo Buffers 2973696 bytes
6.創(chuàng)建數(shù)據(jù)庫
該步驟將使用一系列創(chuàng)建數(shù)據(jù)庫的參數(shù),如實例數(shù),日志組數(shù),字符集以及各種表空間的設(shè)置,具體如下所示。
create database pod maxinstances 2 maxdatafiles 200 maxlogfiles 32 maxlogmembers 5 maxloghistory 100 user sys identified by Oracle user system identified by Oracle character set al32utf8 national character set al16utf16 datafile '/u01/app/Oracle/oradata/POD/system01.dbf' size 300m autoextend on extent management local segment space management auto sysaux datafile '/u01/app/Oracle/oradata/POD/sysaux01.dbf' size 300m autoextend on undo tablespace undotbs datafile '/u01/app/Oracle/oradata/POD/undotbs01.dbf' size 100m autoextend on default temporary tablespace temp tempfile '/u01/app/Oracle/oradata/POD/temp01.dbf' size 100m autoextend on logfile group 1 '/u01/app/Oracle/oradata/POD/disk1/redo01.log' size 100m, group 2 '/u01/app/Oracle/oradata/POD/disk2/redo02.log' size 100m
參數(shù)的含義在手工建庫的步驟中已經(jīng)說明,雖然此時已經(jīng)成功創(chuàng)建了一個合法的數(shù)據(jù)庫,但是具體使用還需要一些工作要做。首先需要創(chuàng)建一個用戶表空間,然后需要運行必要的腳本來創(chuàng)建數(shù)據(jù)字典和PL/SQL過程,最后還需要配置必要的監(jiān)聽和tns文件。下面我們一步步完成這些需求。
創(chuàng)建永久表空間。
create tablespace users datafile '/u01/Oracle/oradata/POD/users01.dbf' size 100m autoextend on;
設(shè)置數(shù)據(jù)庫默認(rèn)永久表空間為USERS,如果新建的用戶沒有指定永久默認(rèn)表空間,將使用USERS表空間作為永久默認(rèn)表空間。
alter database default tablespace users;
7.配置監(jiān)聽
cd $Oracle_HOME/network/admin vi listener.ora
編輯后的listener.ora文件的內(nèi)容如下所示。
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = POD) (Oracle_HOME=/u01/app/Oracle/product/10.2.0/db_1) (GLOBAL_DBNAME = POD) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ocm1.uplooking.com)(PORT = 1521)) ) )
8.編輯TNS文件
cd $Oracle_HOME/network/admin vi tnsnames.ora
編輯后的tnsnames.ora文件內(nèi)容如下所示。
POD = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ocm1.uplooking.com)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = POD) ) )
然后啟動監(jiān)聽。
lsnrctl start
通過TNSPING指令測試連通性。
SQL>tnsping POD [Oracle@ocm1 dbs]$ tnsping std TNS Ping Utility for Linux: Version 10.2.0.1.0 - Production on 08-OCT-2011 21:23:30 Copyright (c) 1997, 2005, Oracle. All rights reserved. Used parameter files: Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ocm1.oracle)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = POD))) OK (50 msec)
9.執(zhí)行三個腳本
前兩個腳本使用sys as sysdba連接數(shù)據(jù)庫執(zhí)行,如下所示。
sqlplus sys/Oracle as sysdba @?/rdbms/admin/catalog //創(chuàng)建數(shù)據(jù)字典 @?/rdbms/admin/catproc //創(chuàng)建必須PL/SQL過程
第三個腳本使用system用戶連接并執(zhí)行。
connect system/Oracle @?/sqlplus/admin/pupbld //創(chuàng)建必須PL/SQL過程
- Mastering NetBeans
- Web Development with Django Cookbook
- 區(qū)塊鏈:以太坊DApp開發(fā)實戰(zhàn)
- MATLAB實用教程
- Java軟件開發(fā)基礎(chǔ)
- 創(chuàng)意UI:Photoshop玩轉(zhuǎn)APP設(shè)計
- Solutions Architect's Handbook
- Java程序設(shè)計教程
- C語言程序設(shè)計
- 從零開始學(xué)UI:概念解析、實戰(zhàn)提高、突破規(guī)則
- 啊哈C語言!:邏輯的挑戰(zhàn)(修訂版)
- 游戲設(shè)計的底層邏輯
- Hands-On ROS for Robotics Programming
- Kotlin入門與實戰(zhàn)
- Python程序設(shè)計案例教程