我可是费了很大的劲完善的啊.......。只需要定义好批处理中的以下基本变量,便可以向任何目录、生成任何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:copy数据库备份文件:%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';