做用户备份之前,检查确定数据文件
1SELECT NAME FROM V$DATAFILE;
2
SELECT t.NAME "Tablespace", f.NAME "Datafile"
FROM V$TABLESPACE t, V$DATAFILE f
WHERE t.TS# = f.TS#
ORDER BY t.NAME;
3SELECT MEMBER FROM V$LOGFILE;
4SELECT NAME FROM V$CONTROLFILE;
检查在线表空间数据文件的状态
SELECT t.name AS "TB_NAME", d.file# as "DF#", d.name AS "DF_NAME", b.status FROM V$DATAFILE d, V$TABLESPACE t, V$BACKUP b WHERE d.TS#=t.TS# AND b.FILE#=d.FILE# AND b.STATUS='ACTIVE';
status要是not active那么表明了文件没有在备份状态,也就是没有执行ALTER TABLESPACE ... BEGIN BACKUP 或 ALTER DATABASE BEGIN BACKUP语句。
备份离线的表空间和数据文件
1查看表空间信息
SELECT TABLESPACE_NAME, FILE_NAME FROM SYS.DBA_DATA_FILES WHERE TABLESPACE_NAME = 'USERS';
2离线表空间
ALTER TABLESPACE users OFFLINE NORMAL;
3使用操作系统命令备份数据文件
4将表空间在线
alter tablespace users online;
5归档未归档的日志文件
alter system archive log current;
备份在线表空间
需要使用alter tablespace ..begin backup命令将表空间置于备份模式,在备份模式,数据库拷贝所有改变数据块到redo流中,在使用alter tablespace ...end backup或alter database end backup后,数据库将数据文件头标记成当前数据库的检查点。
1检查表空间信息
SELECT TABLESPACE_NAME, FILE_NAME FROM SYS.DBA_DATA_FILES WHERE TABLESPACE_NAME = 'USERS';
2ALTER TABLESPACE users BEGIN BACKUP;3拷贝数据文件
4ALTER TABLESPACE users END BACKUP;5ALTER SYSTEM ARCHIVE LOG CURRENT;
要是想对数据库所有的表空间进行备份,可以使用alter database begin backup;
在begin backup后数据库没有end backup的时候shutdown abort了,需要处理如下:
1mount数据库
2alter database end backup;
3 alter database open;
用户备份的控制文件
1备份控制文件到二进制文件中,二进制文件中包含比trace文件更多的信息,如归档日志备份历史,offline的表空间,备份集和镜像等。
alter database backup controlfile to '...bak' reuse;
2备份控制文件到trace文件中
alter database backup controlfile to trace;
可以用来重建控制文件,为了避免恢复正常offline或只读表空间,将他们排出trace文件中,当再次打开数据库的时候,数据字典会标记这些文件为missing状态,你可以使用alter database rename file命令来重命名回原来的名字。
验证用户备份
dbv file=tbs_52.f
使用操作系统命令查找文件find $ORACLE_HOME -name "*.ora" -print