官术网_书友最值得收藏!

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過程
主站蜘蛛池模板: 广南县| 唐海县| 隆化县| 得荣县| 兴海县| 璧山县| 无棣县| 平和县| 穆棱市| 鄂托克前旗| 二连浩特市| 晋中市| 尼玛县| 南乐县| 陕西省| 英山县| 安庆市| 宁强县| 福鼎市| 古交市| 汶川县| 霍林郭勒市| 南丹县| 七台河市| 义马市| 定日县| 青冈县| 濮阳市| 梁河县| 嘉义县| 宁明县| 陇南市| 邯郸市| 新安县| 万州区| 泾源县| 板桥市| 武清区| 天津市| 繁峙县| 尖扎县|