ITPub博客

首页 > 数据库 > Oracle > Oracle备份与恢复系列(四)复制数据库 续 创建新的控制文件

Oracle备份与恢复系列(四)复制数据库 续 创建新的控制文件

原创 Oracle 作者:SnowDBA 时间:2014-08-02 20:04:42 0 删除 编辑
本次试验采用用Create controlfile命令来创建控制文件。
应用场合如下
1,丢失了所有的控制文件
2,需要更改重做日志成员或组的最大设置。
3,必须更改数据库文件或实例的最大序号。
4,希望更改数据库文件的名称和位置(也可以在open状态下用其他方法实现)
5,希望更改数据库名。
注意事项
1,数据库实例必须启动,但没有mount。如果执行成功create controlfile语句则加载新创建的控制文件。
2,运行该命令的用户必须被赋予osdba角色
3,当创建一个新的控制文件时,会丢失所保存的历史资料,例如归档日志历史和rman备份。

实验步骤如下

1 准备克隆数据库
2 备份打开的PRACTICE数据库
3 配置控制文件脚本
4 运行控制文件脚本
5 恢复克隆的数据库
6 打开克隆的数据库

step1 准备克隆数据库
export ORACLE_SID=CLNE
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
export ORACLE_DATA=/oradata/$ORACLE_SID
export ORACLE_ADMIN=$ORACLE_BASE/admin/$ORACLE_SID

mkdir -p $ORACLE_ADMIN/{b,c,u}dump
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/create

mkdir /oradata
mkdir /archive
mkdir /backup
chown oracle:oinstall /oradata
chown oracle:oinstall /archive
chown oracle:oinstall /backup

create pfile from spfile;
scp $ORACLE_HOME/dbs/initPRACTICE.ora192168.1.21:$ORACLE_HOME/dbs/initCLNE.ora

vi $ORACLE_HOME/dbs/initCLNE.ora
db_name=CLNE  <==修改克隆数据库名
db_files = 80
db_file_multiblock_read_count = 8
#db_block_buffers = 100
#shared_pool_size = 3500000
log_checkpoint_interval = 10000
processes = 200
parallel_max_servers = 5
log_buffer = 32768
max_dump_file_size = 10240
global_names = FALSE
job_queue_processes=20
control_files = (/oradata/CLNE/control01.ctl,/oradata/CLNE/control02.ctl)
sga_max_size=300M
sga_target=300M
undo_management='AUTO'

CLNE.__db_cache_size=218103808
CLNE.__java_pool_size=4194304
CLNE.__large_pool_size=4194304
CLNE.__shared_pool_size=83886080
CLNE.__streams_pool_size=0
*.control_files='/oradata/CLNE/control01.ctl','/oradata/CLNE/control02.ctl'
*.db_file_multiblock_read_count=8
*.db_files=80
*.db_name='CLNE'
*.global_names=FALSE
*.job_queue_processes=20
*.log_archive_dest_1='location=/oradata/CLNE/archive'
*.log_archive_format='%t_%s_%r.arc'
*.log_buffer=32768
*.log_checkpoint_interval=10000
*.max_dump_file_size='10240'
*.parallel_max_servers=5
*.processes=200
*.sga_max_size=300M
*.sga_target=300M
*.undo_management='AUTO'

创建密码文件
orapwd file=$ORACLE_HOME/dbs/orapwCLNE password=oracle entries=30 force=y


step2 备份打开的PRACTICE数据库
该脚本是在源数据库open状态下执行alter tablespace begin backup方式进行的。
@/backup/scripts/open_backup.sql

脚本如下
vi /backup/scripts/open_backup.sql

set feedback off
set pagesize 0
set heading off
set verify off
set linesize 100
set trimspool on
define dir = '/backup/open_backup'
define fil = '/backup/scripts/open_backup_commands.sql'
define spo = '&dir/open_backup_output.lst'
set serveroutput on
spool &fil
prompt spool &spo
prompt archive log list;;
prompt alter system switch logfile;;
prompt alter system archive log all;;
DECLARE
rem不备份临时表空间
CURSOR cur_tablespace IS
  SELECT tablespace_name
    FROM dba_tablespaces where tablespace_name<>'TEMP';

CURSOR cur_datafile (tn VARCHAR) IS
  SELECT file_name
    FROM dba_data_files
   WHERE tablespace_name = tn;
BEGIN
  FOR ct IN cur_tablespace LOOP
    dbms_output.put_line ('alter tablespace '||ct.tablespace_name||' begin backup;');
    FOR cd IN cur_datafile (ct.tablespace_name) LOOP
       dbms_output.put_line ('host cp '||cd.file_name||' &dir');
    END LOOP;
    dbms_output.put_line ('alter tablespace '||ct.tablespace_name||' end backup;');
  END LOOP;
END;
/
prompt alter system switch log file;;
rem 注意此处只备份了一个控制文件,需要手工复制一份到快速恢复区/u01/app/oracle/fast_recovery_area/PRACTICE
prompt alter database backup controlfile to '&dir./control01.ctl' REUSE;;
prompt archive log list;;
prompt spool off
spool off;
@&fil


执行脚本,复制PRACTICE数据库文件
@/backup/scripts/open_backup.sql

将备份文件复制到实例目录下
scp /backup/open_backup/* 192.168.1.21:/backup/
scp -r /archive/ 192.168.1.21:/


step3 配置控制文件脚本

执行backup 控制文件命令
alter database backup controlfile to trace resetlogs;

查看当前pid
!ps -ef|grep ora
oracle    3689  3688  0 12:35 ?        00:00:00 oraclePRACTICE (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

找到用户dump目录
show parameter user_dump_dest;
user_dump_dest                       string      /u01/app/oracle/admin/PRACTICE/udump

打开trace文件
vi /u01/app/oracle/admin/PRACTICE/udump/practice_ora_3689.trc

STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "PRACTICE" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 30
    MAXLOGMEMBERS 5
    MAXDATAFILES 100
    MAXINSTANCES 1
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/oradata/PRACTICE/redo01.log'  SIZE 100M,
  GROUP 2 '/oradata/PRACTICE/redo02.log'  SIZE 100M,
  GROUP 3 '/oradata/PRACTICE/redo03.log'  SIZE 100M
-- STANDBY LOGFILE
DATAFILE
  '/oradata/PRACTICE/system01.dbf',
  '/oradata/PRACTICE/undotbs01.dbf',
  '/oradata/PRACTICE/sysaux01.dbf',
  '/oradata/PRACTICE/rbs01.dbf',
  '/oradata/PRACTICE/users01.dbf',
  '/oradata/PRACTICE/tools01.dbf',
  '/oradata/PRACTICE/indx01.dbf',
  '/oradata/PRACTICE/users02.dbf'
CHARACTER SET US7ASCII
;

创建一个控制文件生成sql
vi /u01/app/oracle/admin/CLNE/create/create_control.sql
STARTUP NOMOUNT
CREATE CONTROLFILE set DATABASE "CLNE" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 30
    MAXLOGMEMBERS 5
    MAXDATAFILES 100
    MAXINSTANCES 1
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/oradata/CLNE/redo01.log'  SIZE 100M,
  GROUP 2 '/oradata/CLNE/redo02.log'  SIZE 100M,
  GROUP 3 '/oradata/CLNE/redo03.log'  SIZE 100M
-- STANDBY LOGFILE
DATAFILE
  '/oradata/CLNE/system01.dbf',
  '/oradata/CLNE/undotbs01.dbf',
  '/oradata/CLNE/sysaux01.dbf',
  '/oradata/CLNE/rbs01.dbf',
  '/oradata/CLNE/users01.dbf',
  '/oradata/CLNE/tools01.dbf',
  '/oradata/CLNE/indx01.dbf',
  '/oradata/CLNE/users02.dbf'
CHARACTER SET US7ASCII
;

step4 运行控制文件脚本
export ORACLE_SID=CLNE
sqlplus / as sysdba
@/u01/app/oracle/admin/CLNE/create/create_control.sql

step5 恢复克隆的数据库
set logsource /archive;
recover database until cancel using backup controlfile;

step6 打开克隆的数据库
alter database open resetlogs;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29047826/viewspace-1244346/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-06-21

  • 博文量
    223
  • 访问量
    1633583