手工备份及恢复:

缺点:需要手工管理备份内容,容易丢失,不利于管理

表空间:

实现:

表空间: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;