在复制不同sid数据库或同sid数据库
一、建相关文件夹,密码文件,参数文件
ln -s /hotbak/fox /u01/oradata/pretty
cp initfox.ora initpretty.ora
vi initpretty.ora
%s/fox/pretty 全部替换掉,再修改控制文件参数
mkdir -p $ORACLE_BASE/admin/pretty/adump
mkdir -p $ORACLE_BASE/admin/pretty/bdump
mkdir -p $ORACLE_BASE/admin/pretty/cdump
mkdir -p $ORACLE_BASE/admin/pretty/udump
mkdir archive(注意在参数指定归档的地方)
orapwd -h 显示帮助
orapwd file=$ORACLE_HOME/dbs/orapwpretty password=qkhhfqp entries=10
export ORACLE_SID=pretty
sqlplus / as sysdba
startup mount;
二、把OS热备的数据文件拷贝到复制数据库相应的目录,或者用软连接也可以。
vi hotbak.sql (OS热备脚本)
set feedback off pagesize 0 heading off verify off linesize 32767 trimspool on termout off serveroutput on
remark 备份目录要先建好,并赋予ORACLE用户所有,确保有足够的空间。
define dir='/hotbak/fox'
define fil='&dir/open_backup_commands.sql'
define spo='&dir/open_backup_output.log'
spool &fil
prompt connectas sysdba;;
prompt alter system switch logfile;;
declare
cursor cur_tablespace is
select tablespace_name from dba_tablespaces
where status <>'READ ONLY' and contents <>'TEMPORARY';
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('!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 logfile;;
prompt alter database backup controlfile to '&dir/backup.ctl' reuse;;
prompt alter database backup controlfile to trace;;
spool off;;
remark 写好脚本先别加@&执行,看看输出是否正常,确认正常在加@&fil执行,控制文件的REUSE表示如果目标文件存在则覆盖
spool &spo
@&fil
spool off
remark 备完之后记得备归档日志,怎么知道要备哪些归档日志?查看V$backup找出数据文件在备份的时候的SCN,再对比V$archived_log的first_change#,例如 select max(sequence#) from v$archived_log where first_change#三、在被复制数据库中备份控制文件,脚本生成控制文件,重建控制文件
/%s/fox/pretty (reuse set)
startup nomount;
执行生成控制文件脚本
alter database mount;
recover database using backup controlfile until cancel;(注意输入正确的归档位置和日志文件)
alter database open resetlogs;