• 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';

  • 相关阅读:
    Hash表解题之大数据查找
    数据结构与算法之字典树解题
    oracle存储过程学习
    mq常见问题
    通过反射构造对象
    平衡二叉树
    LinkList源码
    ArrayList源码
    JVM参数调优
    MyBatis源码图
  • 原文地址:https://www.cnblogs.com/jinzhenshui/p/1402241.html
Copyright © 2020-2023  润新知