手工备份及恢复:
缺点:需要手工管理备份内容,容易丢失,不利于管理
表空间:
实现:
表空间:select * from v$tablespace
数据文件:select * from v$datafile
备份:
1. 在数据库中输入命令:alter tablespace 表空间 begin backup;
2. 在OS手工复制数据文件
3. 在数据库中输入命令:alter tablespace 表空间 end backup;
还原:
1. 在数据库中输入命令:alter database datafile 数字 offline;
2. 在OS手工复制数据文件
3. 在数据库中输入命令:recover datafile 数字;
4. 在数据库中输入命令:alter database datafile 数字 online;
控制文件备份
控制文件备份:
1. 指定路径:SQL>alter database backup controlfile to '备份路径\备份文件名';
2. 备份到trace:SQL>alter database backup controlfile to trace;
控制文件备份到参数:USER_DUMP_DEST
控制文件恢复
1. 控制部分丢失(control01,control02文件遗失)
方法一:
shutdown abort
startup nomount
alter system set control_files='$ORACLE_BASE/oradata/$ORACLE_SID/control03.ctl' scope=spfile;
shutdown abort;
startup
方法二:
shutdown abort
将现有文件复制两份,改名为crontrol01.ctl;control02.ctl
startup
2. 控制文件全部丢失(备份文件比较旧)
确保从上一次备份到控制文件丢失过程中,所有的redo log或者archived log都在。
否则只能进行不完全恢复
shutdown abort;
startup mount;
recover database using backup controlfile;
过程中如果出现提示"name of datafile is known...."
alter database rename file '提示中的路径和文件名' to '正确的数据文件路径及文件名'
过程中如果出现提示"datafile not found...."
alter database datafile 数字 offline;
过程中如果出现提示需要archive log,但是archive log目录没有,系统指的是online redo log,只能逐个尝试
/u01/app/oracle/oradata/redo01.log
/u01/app/oracle/oradata/redo02.log
/u01/app/oracle/oradata/redo03.log
每次提示通过后都要重新输入:
recover database using backup controlfile;
知道提示"media recover "
recover database using backup controlfile;
3. 从trace恢复controlfile
a. 打开备份controlfile时生成的trace文件
b. 找到标记”Set #1. NORESETLOGS case”部分。
注意:一般情况下trace文件里都会有2部分相关内容恢复时先执行”Set #1. NORESETLOGS case”部分
运行上述标记部分的sql语句
SQL>STARTUP NOMOUNT
SQL>CREATE CONTROLFILE REUSE DATABASE "ZP" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZP\REDO01.LOG' SIZE 50M,
GROUP 2 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZP\REDO02.LOG' SIZE 50M,
GROUP 3 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZP\REDO03.LOG' SIZE 50M
DATAFILE
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZP\SYSTEM01.DBF',
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZP\UNDOTBS01.DBF',
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZP\SYSAUX01.DBF',
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZP\USERS01.DBF',
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZP\TBS1.DBF'
CHARACTER SET ZHS16GBK
;
SQL>VARIABLE RECNO NUMBER;
SQL>EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','ON');
RECOVER DATABASE;
SQL>ALTER SYSTEM ARCHIVE LOG ALL;
SQL>ALTER DATABASE OPEN;
SQL>ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZP\TEMP01.DBF'
SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
Redo log文件(archive log开启)
类型:
current:目前在使用的;
Inactive:目前不用,并且已经archived
Active:
1. 目前不用,等待archive;
2. 目前不用,等待DWRn写数据文件
Unused:新建的Redo log文件;被resetlog过的文件
查看log group 状态:select * from v$log;
查看log file状态:select * from v$logfile;
Inactived / Unused:
log group 如果有多个成员
删除其中那个损坏的文件:
ALTER DATABASE DROP LOGFILE MEMBER '$ORACHE_BASE\oradata\$ORACLE_SID\redo01.log';
新建一个新的文件:
ALTER DATABASE ADD LOGFILE MEMBER '$ORACHE_BASE\oradata\$ORACHE_SID\redo04.log' TO GROUP 1;
log group 只有一个成员
删除log group:
alter database drop logfile group 1;
新建log group:
alter database add logfile group 4;
Active:
Alter database clear unarchived logfile group 2;
temp表空间:
1. 删除数据文件temp01.bdf
2. 创建新的temp 表空间:
CREATE TEMPORARY TABLESPACE temp2 TEMPFILE '$ORACLE_BASE/oradata/$ORACHE_SID/temp02.dbf'
SIZE 50M autoextend on next 1m ;
3. 让ORACLE数据库使用新的temp表空间:
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2;
4. 删除原有的temp表空间:
drop tablespace temp including contents and datafiles;