Oracle 克隆改配置文件,Oracle备份与恢复系列(四)复制数据库 续 创建新的控制文件...

本次试验采用用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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值