我可是費了很大的勁完善的啊.......。只需要定義好批處理中的以下基本變數,便可以向任何目錄、產生任何sid的clone執行個體。
set oracle_base=d:\oracle10g\app\oracle\product\10.2.0
set oracle_sid=TEMP
set syspwd=oracle
set data_base=d:\data
不是吹:好好研究下我的指令碼,你會得到到很多!
已知的問題:你必須瞭解自己備份的內容,才可以寫出適合自己的指令碼!我是基於oracle預設的種子模板製作的!
共有三部分組成:
1.批處理——用於設定變數、運行命令、動態產生指令碼、運行指令碼
2.批處理動態產生的指令碼——定義替換變數
3.固定指令碼——從備份中提取資料庫檔案、產生控制檔案、開啟資料庫
批處理:
@echo off
echo .
echo step1:設定環境變數
set oracle_base=d:\oracle10g\app\oracle\product\10.2.0
set oracle_sid=TEMP
set syspwd=oracle
set data_base=d:\data
set datapath=%data_base%\%oracle_sid%
set oracle_home=%oracle_base%\server
set path=%path%;%oracle_home%\bin;
set adminpath=%oracle_base%\admin\%oracle_sid%
echo .
echo step2:刪除執行個體:請等待...
oradim -delete -sid %oracle_sid%
echo step2:刪除執行個體:成功!
echo .
echo step3:刪除 %oracle_sid% 執行個體的已有db_create_file_dest目錄、*dump目錄
if exist %datapath% del %datapath%\*.* /s /f /q
if exist %adminpath% del %adminpath%\*.* /s /f /q
if exist %oracle_home%\database\init%oracle_sid%.ora del %oracle_home%\database\init%oracle_sid%.ora
if exist %oracle_home%\database\pwd%oracle_sid%.ora del %oracle_home%\database\pwd%oracle_sid%.ora
rem del %oracle_home%\database\create_db.dbf
echo .
echo step4:建立 %oracle_sid% 執行個體必要的目錄
if not exist %oracle_home%\cfgtoollogs\dbca\%oracle_sid% mkdir %oracle_home%\cfgtoollogs\dbca\%oracle_sid%
if not exist %oracle_home%\dbs mkdir %oracle_home%\dbs
if not exist %oracle_home%\RDBMS\trace mkdir %oracle_home%\RDBMS\trace
if not exist %oracle_home%\RDBMS\log mkdir %oracle_home%\RDBMS\log
if not exist %adminpath%\adump mkdir %adminpath%\adump
if not exist %adminpath%\bdump mkdir %adminpath%\bdump
if not exist %adminpath%\cdump mkdir %adminpath%\cdump
if not exist %adminpath%\dpdump mkdir %adminpath%\dpdump
if not exist %adminpath%\pfile mkdir %adminpath%\pfile
if not exist %adminpath%\udump mkdir %adminpath%\udump
if not exist %datapath% mkdir %datapath%
echo .
echo step5:copyDatabase Backup檔案:%oracle_home%\database\create_db.dbf
if not exist %oracle_home%\database\create_db.dbf copy usercent-2009-02-23.dbf %oracle_home%\database\create_db.dbf
echo .
echo step6:建立 %oracle_sid% 執行個體初始化參數檔案pfile:%oracle_home%\database\init%oracle_sid%.ora
echo compatible='10.2.0.1.0' >%oracle_home%\database\init%oracle_sid%.ora
echo db_name='%oracle_sid%' >>%oracle_home%\database\init%oracle_sid%.ora
echo db_recovery_file_dest='%data_base%' >>%oracle_home%\database\init%oracle_sid%.ora
echo db_recovery_file_dest_size=2g >>%oracle_home%\database\init%oracle_sid%.ora
echo sga_target=250m >>%oracle_home%\database\init%oracle_sid%.ora
echo undo_management='AUTO' >>%oracle_home%\database\init%oracle_sid%.ora
echo control_files='%datapath%\control_%oracle_sid%_01.ctl','%datapath%\control_%oracle_sid%_02.ctl' >>%oracle_home%\database\init%oracle_sid%.ora
echo audit_file_dest='%adminpath%\adump' >>%oracle_home%\database\init%oracle_sid%.ora
echo background_dump_dest='%adminpath%\bdump' >>%oracle_home%\database\init%oracle_sid%.ora
echo core_dump_dest='%adminpath%\cdump' >>%oracle_home%\database\init%oracle_sid%.ora
echo user_dump_dest='%adminpath%\udump' >>%oracle_home%\database\init%oracle_sid%.ora
echo .
echo step7:建立 %oracle_sid% 執行個體,定義sys使用者的密碼
oradim.exe -new -sid %oracle_sid% -syspwd %syspwd%
echo .
echo step8:使用重新導向產生create_db_define.sql定義替換變數檔案
echo define datapath = '%datapath%'; >.\create_db_define.sql
echo define oracle_sid = '%oracle_sid%'; >>.\create_db_define.sql
echo define oracle_home = '%oracle_home%'; >>.\create_db_define.sql
echo .
echo step9:使用sqlplus串連至執行個體,運行建立資料庫的指令碼
sqlplus / as sysdba @%cd%\create_db_and_controlfile.sql
pause
@echo on
固定指令碼:
@@create_db_define.sql;
set verify off;
set define on;
startup nomount;
declare
devicename varchar2(255);
omfname varchar2(512) := NULL;
done boolean;
begin
devicename := dbms_backup_restore.deviceAllocate;
dbms_backup_restore.restoreSetDataFile;
dbms_backup_restore.restoreDataFileTo(1, '&&datapath\SYSTEM01.DBF');
dbms_backup_restore.restoreDataFileTo(2, '&&datapath\UNDOTBS01.DBF');
dbms_backup_restore.restoreDataFileTo(3, '&&datapath\SYSAUX01.DBF');
dbms_backup_restore.restoreDataFileTo(4, '&&datapath\USERS01.DBF');
dbms_backup_restore.restoreBackupPiece('&&oracle_home\database\create_db.dbf', done);
dbms_backup_restore.deviceDeallocate;
end;
/
Create controlfile reuse set database "&&oracle_sid"
MAXINSTANCES 8
MAXLOGHISTORY 1
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
Datafile
'&&datapath\SYSTEM01.DBF',
'&&datapath\UNDOTBS01.DBF',
'&&datapath\SYSAUX01.DBF',
'&&datapath\USERS01.DBF'
LOGFILE
GROUP 1 ('&&datapath\redo01.log') SIZE 51200K,
GROUP 2 ('&&datapath\redo02.log') SIZE 51200K,
GROUP 3 ('&&datapath\redo03.log') SIZE 51200K
RESETLOGS;
alter database open resetlogs;
動態指令碼內容:
define datapath = 'd:\data\TEMP';
define oracle_sid = 'TEMP';
define oracle_home = 'd:\oracle10g\app\oracle\product\10.2.0\server';