Oracle学习笔记:利用rman数据库备份,手工创建clone数据库

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

原文地址:https://www.cnblogs.com/jinzhenshui/p/1402241.html