热备份
对表空间进行备份
1.alter tablespace tbs_test begin backup;
2.对表空间下面的文件进行拷贝
3.alter tablespace tbs_test end backup;
要在线备份数据库,数据库的模式必须是archive 模式
archive log list;(查看)
把noarchive 转换到archive 模式
startup mount
alert database noarchivelog ;
alert database open;
aler database archivelog;
热备份脚本:
set feedback off pagesize 0 heading off verify off linesize 32767 trimspool on termout off serveroutput on remark 备份目录先要建好,并赋予ORACLE用户所有。确保有足够的空间
define dir='/hotbak/colnedb'
define fil='&dir/open_backup_commands.sql'
define spo='&dir/open_backup_output.lst'
spool &fil
prompt connect sys/oracle@clonedb as 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执行,看看输出是否正常,确认正常再加上@&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# <(select min(CHANGE#) FROM V$backup); 并且确保所有的数据文件都备了。
磁盘添加:
pvcreate -v /dev/sdf
vgcreate -h
vgcreate -v orabak /dev/sdf
lvcreate -h
lvcreate -L 7800m -n lv_orabak orabak
mkfs.ext2 -h
mkfs.ext2 /dev/oradbak/lv_orabak
mkdir /orabak
mount /dev/orabak/lv_orabak /orabak
chown -R oracle:dba /orabak
vi /etc/fstab
/dev/orabak/lv_orabak /orabak ext2 defaults 0 , 0 (自动挂载磁盘)
磁盘添加结束
rm -rf /hotbak/
ln -s /orabak/ /hotbak 把/orabak目录链接到/hotbak目录下面(hotbak是个虚拟目录)
用一个备份的文件来创建一个数据库
1.建文件夹 、密码文件、参数文件
2.备份控制文件到脚本
3.执行脚本生成控制文件
4.打开数据库
5.新建temp文件
1.先备份数据,不移动数据文件。做一个软连接
ln -s /orabak/clonedb/ /oradata/digoal /orabak/clonedb/是备份的数据文件所在的目录,而/oradata/digoal是新数据库数据文件存放的地方
2. cp initclonedb.ora initdigoal.ora 把参数文件从复制的数据库拷贝过来
3、vi initdigoal.ora 把该文件中的clonedb替换为digoal 替换命令:
%s/clonedb/digoal
4、常见目录:
mkdir -p $ORACLE_BASE/admin/digoal/adump
mkdir -p $ORACLE_BASE/admin/digoal/bdump
mkdir -p $ORACLE_BASE/admin/digoal/cdump
mkdir -p $ORACLE_BASE/admin/digoal/udump
在/oradata/digoal/目录下面创建archive目录
5.创建密码文件,密码文件的名称是orapwd+sid
查看orapwd帮助是 orapwd -h
useage: orapwd file=<fname> password=<password> entries=<users> force=<y/n>
entries=maximum number of distinct DBA 最多有多少个DBA
orapwd file=$ORACLE_HOME/dbs/orapwdigoal password= oracle entries=10
export ORACLE_SID=digoal
7.进入数据库
conn / as sysdba
startup mount
控制文件脚本
shutdown abort
vi ctlsql.sql这个文件 ,把这个文件中创建数据文件的地方用新的SID进行替换(ctlsql.sql)是在以前的视频教程中创建的
uniread sqlplus / as sysdba (连接到数据库)
startup nomount
@$Home/ctlsql.sql(创建控制文件脚本)
出现一个错误,
CREATE CONTRALFILE REUSE DATABASE 'DIGOAL' RESETLOGS ARCHIVELOG
*
database name COLONEDB in file header does not match given name of DIGOAL
说明数据文件/oradata/digoal/system01.dbf的头部记录了 SID的值
只要在/ctlsql.sql中加入一个set 就能够解决这个文件
vi @$Home/ctlsql.sql
CREATE CONTRALFILE SET REUSE DATABASE 'DIGOAL' RESETLOGS ARCHIVELOG
8.恢复数据库
recove database using backup controlfile until cancel;
如果出现错误,按照数据库的提示
/oradata/clonedb/archive/1_8_652237584.dbf
引用归档日志
(
/oradata/clonedb/redo_g1_m1.ora
recove database using backup controlfile until cancel;
/oradata/clonedb/redo_g2_m1.ora
recove database using backup controlfile until cancel;
/oradata/clonedb/redo_g3_m1.ora
到archive目录下面:
recove database using backup controlfile until cancel;
/oradata/clonedb/archive/1_8_652237584.dbf
)
alter database open resetlogs;
SQL> !ipcs (启动了两个实例)