dbca建庫腳本——11g

dbca的建庫腳本是使用模板來創建數據庫,其優點是使用模板創建數據庫通常速度都會很快,原因就在於數據文件是從種子數據庫中恢復出來的,而不需要創建文件及字典對象等信息。

在是用dbca建庫時可以保存建庫的腳本,看下這些腳本。

[oracle@sharon sharon]$ cd scripts

[oracle@sharon scripts]$ ll

total 40

-rw-r----- 1 oracle oinstall 2856 Sep 29 04:30 cloneDBCreation.sql

-rw-r----- 1 oracle oinstall  283Sep 29 04:30 CloneRmanRestore.sql

-rw-r----- 1 oracle oinstall 1793 Sep 29 04:30 init.ora

-rw-r----- 1 oracle oinstall 1829 Sep 29 04:30 initsharonTemp.ora

-rw-r----- 1 oracle oinstall  509Sep 29 04:30 lockAccount.sql

-rw-r----- 1 oracle oinstall  654Sep 29 04:30 postDBCreation.sql

-rw-r----- 1 oracle oinstall  570Sep 29 04:30 postScripts.sql

-rw-r----- 1 oracle oinstall 1372 Sep 29 04:30 rmanRestoreDatafiles.sql

-rwxr-xr-x 1 oracle oinstall  705Sep 29 04:30 sharon.sh

-rwxr-xr-x 1 oracle oinstall  554Sep 29 04:30 sharon.sql

主要是運行shell腳本來掉sql腳本來建立數據庫。

 

1. sharon.sh

[oracle@sharon scripts]$ more sharon.sh

#!/bin/sh

OLD_UMASK=`umask`

umask 0027

--建立相關目錄

mkdir -p /u01/app/oracle/admin/sharon/adump

mkdir -p /u01/app/oracle/admin/sharon/dpdump

mkdir -p /u01/app/oracle/admin/sharon/pfile

mkdir -p /u01/app/oracle/cfgtoollogs/dbca/sharon

mkdir -p /u01/app/oracle/flash_recovery_area

mkdir -p /u01/app/oracle/flash_recovery_area/sharon

mkdir -p /u01/app/oracle/oradata/sharon

mkdir -p /u01/app/oracle/product/11.2.0/db_1/dbs

--設置環境變量

umask ${OLD_UMASK}

ORACLE_SID=sharon; export ORACLE_SID

PATH=$ORACLE_HOME/bin:$PATH; export PATH

--/etc/oratab中添加實例啓動項

echo You should Add this entry in the /etc/oratab:sharon:/u01/app/oracle/product/11.2.0/db_1:Y

/u01/app/oracle/product/11.2.0/db_1/bin/sqlplus /nolog

 --運行sharon.sql

@/u01/app/oracle/admin/sharon/scripts/sharon.sql

 

2. sharon.sql

set verify off

--設置sys/system用戶密碼

ACCEPT sysPassword CHAR PROMPT 'Enter new password for SYS: ' HIDE

ACCEPT systemPassword CHAR PROMPT 'Enter new password for SYSTEM: ' HIDE

--創建口令文件

host /u01/app/oracle/product/11.2.0/db_1/bin/orapwdfile=/u01/app/oracle/product/11.2.0/db_1/dbs/orapwsharon force=y

--使用RMAN restore 生成數據文件

@/u01/app/oracle/admin/sharon/scripts/CloneRmanRestore.sql

--重建控制文件,修改相關參數

@/u01/app/oracle/admin/sharon/scripts/cloneDBCreation.sql

--更新庫

@/u01/app/oracle/admin/sharon/scripts/postScripts.sql

--鎖用戶

@/u01/app/oracle/admin/sharon/scripts/lockAccount.sql

--編譯無效對象,創建spfile ,重啓數據庫

@/u01/app/oracle/admin/sharon/scripts/postDBCreation.sql

 

3. CloneRmanRestore.sql

SET VERIFY OFF

connect "SYS"/"&&sysPassword" as SYSDBA

set echo on

spool /u01/app/oracle/admin/sharon/scripts/CloneRmanRestore.log append

--使用init.ora初始化文件啓動數據庫到nomount狀態

startup nomountpfile="/u01/app/oracle/admin/sharon/scripts/init.ora";

--運行rmanRestoreDatafiles.sql腳本

@/u01/app/oracle/admin/sharon/scripts/rmanRestoreDatafiles.sql;

spool off

 

init.ora

##############################################################################

# Copyright (c) 1991, 2001, 2002 by Oracle Corporation

##############################################################################

 

###########################################

# Cache and I/O

###########################################

db_block_size=8192

 

###########################################

# Cursors and Library Cache

###########################################

open_cursors=300

 

###########################################

# Database Identification

###########################################

db_domain=""

db_name=sharon

 

###########################################

# File Configuration

###########################################

control_files=("/u01/app/oracle/oradata/sharon/control01.ctl","/u01/app/oracle/flash_recovery_area/sharon/control02.ctl")

db_recovery_file_dest=/u01/app/oracle/flash_recovery_area

db_recovery_file_dest_size=4039114752

 

###########################################

# Miscellaneous

###########################################

compatible=11.2.0.0.0

diagnostic_dest=/u01/app/oracle

memory_target=422576128

 

###########################################

# Processes and Sessions

###########################################

processes=150

 

###########################################

# Security and Auditing

###########################################

audit_file_dest=/u01/app/oracle/admin/sharon/adump

audit_trail=db

remote_login_passwordfile=EXCLUSIVE

 

###########################################

# Shared Server

###########################################

dispatchers="(PROTOCOL=TCP) (SERVICE=sharonXDB)"

 

###########################################

# System Managed Undo and Rollback Segments

###########################################

undo_tablespace=UNDOTBS1

 

rmanRestoreDatafiles.sql

set verify off;

set echo off;

set serveroutput on;

select TO_CHAR(systimestamp,'YYYYMMDD HH:MI:SS') from dual;

variable devicename varchar2(255);

declare

omfname varchar2(512) := NULL;

  done boolean;

  begin

    dbms_output.put_line(' ');

    dbms_output.put_line('Allocating device.... ');

    dbms_output.put_line('Specifying datafiles... ');

       :devicename :=dbms_backup_restore.deviceAllocate;

dbms_output.put_line(' Specifing datafiles... ');

--從種子文件中取出數據文件

   dbms_backup_restore.restoreSetDataFile;

     dbms_backup_restore.restoreDataFileTo(1, '/u01/app/oracle/oradata/sharon/system01.dbf',0, 'SYSTEM');

     dbms_backup_restore.restoreDataFileTo(2,'/u01/app/oracle/oradata/sharon/sysaux01.dbf', 0, 'SYSAUX');

     dbms_backup_restore.restoreDataFileTo(3,'/u01/app/oracle/oradata/sharon/undotbs01.dbf', 0, 'UNDOTBS1');

     dbms_backup_restore.restoreDataFileTo(4,'/u01/app/oracle/oradata/sharon/users01.dbf', 0, 'USERS');

    dbms_output.put_line(' Restoring... ');

    dbms_backup_restore.restoreBackupPiece('/u01/app/oracle/product/11.2.0/db_1/assistants/dbca/templates/Seed_Database.dfb', done);       //種子文件

    if done then

        dbms_output.put_line('Restore done.');

    else

        dbms_output.put_line('ORA-XXXX: Restore failed ');

    end if;

   dbms_backup_restore.deviceDeallocate;

  end;

/

select TO_CHAR(systimestamp,'YYYYMMDD HH:MI:SS') from dual;

dbms_backup_restore包的一些背景知識:

當通過RMAN進行數據庫備份時,RMAN會將多個數據文件寫出到一個或多個備份文件(稱爲備份集)中,RMAN的相關的備份信息或者存儲在控制文件中,或者存儲在RMAN的專用目錄數據庫(Catalog)中,如果RMAN的備份信息丟失,那麼通常備份集中的文件是沒有辦法讀取出來的,其他工具無法識別RMAN的備份集文件;而dbms_backup_restore就是針對這種情況提供的一種解決方案,dbms_backup_restore可以在數據庫nomount狀態下調用,直接從備份集中讀取數據文件,功能十分強大。

DBMS_BACKUP_RESTORE包由dbmsbkrs.sqlprvtbkrs.plb這兩個腳本創建,創建數據庫時執行的catproc.sql 腳本會調用這兩個腳本以創建包,這些腳本文件可以在$ORACLE_HOME/rdbms/admin目錄下找到,腳本文件中對包的內容有詳細的介紹。

 

4. cloneDBCreation.sql

SET VERIFY OFF

connect "SYS"/"&&sysPassword" as SYSDBA

set echo on

spool /u01/app/oracle/admin/sharon/scripts/cloneDBCreation.log append

--重建控制文件

Create controlfile reuse set database "sharon"

MAXINSTANCES 8

MAXLOGHISTORY 1

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

Datafile

'/u01/app/oracle/oradata/sharon/system01.dbf',

'/u01/app/oracle/oradata/sharon/sysaux01.dbf',

'/u01/app/oracle/oradata/sharon/undotbs01.dbf',

'/u01/app/oracle/oradata/sharon/users01.dbf'

LOGFILE GROUP 1 ('/u01/app/oracle/oradata/sharon/redo01.log') SIZE 51200K,

GROUP 2 ('/u01/app/oracle/oradata/sharon/redo02.log') SIZE 51200K,

GROUP 3 ('/u01/app/oracle/oradata/sharon/redo03.log') SIZE 51200KRESETLOGS;

execdbms_backup_restore.zerodbid(0);

/*zeroDbid是包中的一個過程,用於清空數據文件頭的部分信息,新的dbid在之後的控制文件創建時可以被計算,對於數據庫克隆,這是必須的。

zeroDbid有一個輸入參數,即文件號:PROCEDURE zeroDbid(fno       IN  binary_integer);

fno==0時,控制文件中包含的所有數據文件頭都將被清零,zeroDbid主要用於清除數據文件頭的3類信息:Database id信息、Checksum信息和Checksum符號位信息。*/

shutdownimmediate;

startupnomountpfile="/u01/app/oracle/admin/sharon/scripts/initsharonTemp.ora";

Create controlfile reuse set database "sharon"

MAXINSTANCES 8

MAXLOGHISTORY 1

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

Datafile

'/u01/app/oracle/oradata/sharon/system01.dbf',

'/u01/app/oracle/oradata/sharon/sysaux01.dbf',

'/u01/app/oracle/oradata/sharon/undotbs01.dbf',

'/u01/app/oracle/oradata/sharon/users01.dbf'

LOGFILE GROUP 1 ('/u01/app/oracle/oradata/sharon/redo01.log') SIZE 51200K,

GROUP 2 ('/u01/app/oracle/oradata/sharon/redo02.log') SIZE 51200K,

GROUP 3 ('/u01/app/oracle/oradata/sharon/redo03.log') SIZE 51200KRESETLOGS;

altersystem enable restricted session;

alterdatabase "sharon" open resetlogs;

execdbms_service.delete_service('seeddata');

execdbms_service.delete_service('seeddataXDB');

alterdatabase rename global_name to "sharon";

--添加臨時表空間

ALTERTABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/sharon/temp01.dbf' SIZE20480K REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED;

selecttablespace_name from dba_tablespaces where tablespace_name='USERS';

altersystem disable restricted session;

connect "SYS"/"&&sysPassword" as SYSDBA

@/u01/app/oracle/product/11.2.0/db_1/demo/schema/mkplug.sql&&sysPassword change_on_install change_on_install change_on_installchange_on_install change_on_install change_on_install/u01/app/oracle/product/11.2.0/db_1/assistants/dbca/templates/example.dmp /u01/app/oracle/product/11.2.0/db_1/assistants/dbca/templates/example01.dfb/u01/app/oracle/oradata/sharon/example01.dbf/u01/app/oracle/admin/sharon/scripts/ "\'SYS/&&sysPassword asSYSDBA\'";

connect "SYS"/"&&sysPassword" as SYSDBA

shutdown immediate;

connect "SYS"/"&&sysPassword" as SYSDBA

startup restrictpfile="/u01/app/oracle/admin/sharon/scripts/initsharonTemp.ora";

select sid, program, serial#, username from v$session;

--設置字符集

alter database character set INTERNAL_CONVERT AL32UTF8;

alter database national character set INTERNAL_CONVERT AL16UTF16;

--修改sys/system用戶密碼

alter user sys account unlock identified by"&&sysPassword";

alter user system account unlock identified by"&&systemPassword";

alter system disable restricted session;

 

initsharonTemp.ora

##############################################################################

# Copyright (c) 1991, 2001, 2002 by Oracle Corporation

##############################################################################

 

###########################################

# Cache and I/O

###########################################

db_block_size=8192

 

###########################################

# Cursors and Library Cache

###########################################

open_cursors=300

 

###########################################

# Database Identification

###########################################

db_domain=""

db_name=sharon

 

###########################################

# File Configuration

###########################################

control_files=("/u01/app/oracle/oradata/sharon/control01.ctl","/u01/app/oracle/flash_recovery_area/sharon/control02.ctl")

db_recovery_file_dest=/u01/app/oracle/flash_recovery_area

db_recovery_file_dest_size=4039114752

 

###########################################

# Miscellaneous

###########################################

compatible=11.2.0.0.0

diagnostic_dest=/u01/app/oracle

memory_target=422576128

 

###########################################

# Processes and Sessions

###########################################

processes=150

 

###########################################

# Security and Auditing

###########################################

audit_file_dest=/u01/app/oracle/admin/sharon/adump

audit_trail=db

remote_login_passwordfile=EXCLUSIVE

 

###########################################

# Shared Server

###########################################

dispatchers="(PROTOCOL=TCP) (SERVICE=sharonXDB)"

 

###########################################

# System Managed Undo and Rollback Segments

###########################################

undo_tablespace=UNDOTBS1

 

_no_recovery_through_resetlogs=true

 /*_no_recovery_through_resetlogs FALSE norecovery through this resetlogs operation

這個參數用於限制恢復能否跨越resetlogs,對於數據庫的恢復來說,resetlogs通常意味着不完全恢復,在數據庫resetlogs打開之後,控制文件中的很多信息被改寫,在Oracle 10g之前,如果數據庫resetlogs打開,那麼將不再能夠通過當前的控制文件再次進行resetlogs點之前的恢復,而Oracle 10g改變了這個歷史。

Oracle 10g中,即使通過resetlogs方式打開了數據庫,Oracle仍然支持再次從resetlogs時間點之前進行恢復;在Clone數據庫時,Oracle設置這個參數爲True,意思就是不允許再次進行跨越resetlogs時間點的恢復。*/

 

5. postScripts.sql

SET VERIFY OFF

connect "SYS"/"&&sysPassword" as SYSDBA

set echo on

spool /u01/app/oracle/admin/sharon/scripts/postScripts.log append

-更新dbms_sumadv_lib

@/u01/app/oracle/product/11.2.0/db_1/rdbms/admin/dbmssml.sql;

execute dbms_datapump_utl.replace_default_dir;

commit;

connect "SYS"/"&&sysPassword" as SYSDBA

alter session set current_schema=ORDSYS;    //ORDSYSOracle interMedia 管理員賬戶

--更新ORDIMLIBS

@/u01/app/oracle/product/11.2.0/db_1/ord/im/admin/ordlib.sql;

alter session set current_schema=SYS;

connect "SYS"/"&&sysPassword" as SYSDBA

connect "SYS"/"&&sysPassword" as SYSDBA

execute ORACLE_OCM.MGMT_CONFIG_UTL.create_replace_dir_obj;

 

6. lockAccount.sql

SET VERIFY OFF

set echo on

spool /u01/app/oracle/admin/sharon/scripts/lockAccount.log append

--鎖用戶

BEGIN

 FOR item IN ( SELECT USERNAME FROMDBA_USERS WHERE ACCOUNT_STATUS IN ('OPEN', 'LOCKED', 'EXPIRED') AND USERNAMENOT IN (

'SYS','SYSTEM') )

 LOOP

  dbms_output.put_line('Locking andExpiring: ' || item.USERNAME);

  execute immediate 'alter user ' ||

         sys.dbms_assert.enquote_name(

         sys.dbms_assert.schema_name(

         item.USERNAME),false) || ' password expireaccount lock' ;

 END LOOP;

END;

/

spool off

 

7. postDBCreation.sql

SET VERIFY OFF

connect "SYS"/"&&sysPassword" as SYSDBA

set echo on

spool /u01/app/oracle/admin/sharon/scripts/postDBCreation.log append

select 'utl_recomp_begin: ' || to_char(sysdate, 'HH:MI:SS') from dual;

execute utl_recomp.recomp_serial();

--重新編譯某個schema(user)下的無效對象,如果爲NULL則編譯整個數據庫。flags用於內部測試。

select 'utl_recomp_end: ' || to_char(sysdate, 'HH:MI:SS') from dual;

execute dbms_swrf_internal.cleanup_database(cleanup_local => FALSE);

commit;

connect "SYS"/"&&sysPassword" as SYSDBA

set echo on

--創建spfile

create spfile='/u01/app/oracle/product/11.2.0/db_1/dbs/spfilesharon.ora'FROM pfile='/u01/app/oracle/admin/sharon/scripts/init.ora';

--重啓實例以使用spfile啓動數據庫

shutdown immediate;

connect "SYS"/"&&sysPassword" as SYSDBA

startup ;

spool off

 

 

 

參考文檔:http://blog.chinaunix.net/uid-23177306-id-2531023.html

 

 

 

 


發佈了109 篇原創文章 · 獲贊 7 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章