1、数据库备份
数据库的备份分为一致性备份 和 非一致性备份。。。。备份数据库也就是备份数据库的四个文件:数据文件、控制文件、参数文件、口令文件。
数据库的一致性备份: 需要关闭数据库,所以也就是传说中的冷备份,基本步骤非常简单:
1)列出数据库内的所有数据文件和控制文件:通过查询v$controlfile和v$datafile中的name列即可。
2)关闭数据库SQL>shutdown immediate
3)利用操作系统命令拷贝所有的:数据文件,控制文件,参数文件、口令文件到指定的目录中。
4)重新启动数据库SQL>startup 备份完成。
数据库的非一致性备份: 不需要关闭数据库,数据库处于open状态,不影响业务正常的运行。注意非一致性数据库备份只能在archivelog模式下,而一致性备份可以在archivelog和noarchivelog模式下都是可以的。
1)列出数据库内的所有数据文件和控制文件:通过查询v$controlfile和v$datafile中的name列即可。
2)将数据库设置为备份模式,在设置备份模式后,数据库会做一个全局的检查点,然后再所有的数据文件的头块加锁,以确保数据备份中数据文件头块不会发生变化,执行:alter database begin backup
3)备份数据文件和控制文件,其中数据文件和一致性备份一样,使用操作系统命令即可,但是控制文件的备份,需要使用:alter database backup controlfile to '/u01/app/oracle/ctl.bak
4)结束数据库备份。为了确保数据文件备份的同步性,还应该归档当前日志组'SQL>alter database end backup; SQL> alter system archive log current;
2、备份表空间
备份表空间,就是指的是当数据库处于open状态,备份其数据文件的方法。。。注意表空间的备份只能是archivelog模式下的备份,而不能是noarchivelog。表空间的备份可以分为脱机备份和联机备份。
脱机备份
脱机备份是指当表空间处于offline的时候,对单个数据文件或多个数据文件进行备份,与联机备份的相比,可以产生较少的重做日志。
脱机备份有一个缺点,那就是system表空间,正在使用的undo表空间,都不能脱机,也就不能备份。下面以备份USER表空间为例,来说明:
1)确定表空间所包含的数据文件,可以通过视图:DBA_DATA_FILES 查看表空间和数据文件的对应关系:select file_name ,tablespace_name from dba_data_files;
2)将表空间脱机:alter tablespace USER offline;
3)利用操作系统命令复制数据文件。
4)备份完数据文件之后,将表空间设置为联机:alter tablespace USER online;
联机备份
连接备份是指表空间处于online状态,进行数据文件的备份,这种备份的优点是能对所有的表空间数据文件进行备份,不管是system还是正在使用的undo表空间。但是其缺点是产生大量的重做日志信息和归档信息。
为什么会产生大量的的重做和归档呢?这是一个很复杂的问题,简单解释一下:因为对于处于backup 模式的表空间内的数据文件,当第一次受到DML操作(此时dba正在使用操作系统命令来备份数据文件)时,因为操作系统的copy是以操作系统的数据块大小来执行的,而数据库内的数据文件的数据块的大小一般会比操作系统的大。还有,copy是操作系统命令,不能与oracle内部命令进行交互,这就造成了多次copy系统块的的数据来完成一个db数据块的拷贝,这就造成了数据的不一致。所以oracle把所有进行DML操作的数据块全部先存入redo,然后再进行DML操作。。。。这就是为什么联机备份表空间会产生大量的重做信息。更详细的资料请参考:http://blog.csdn.net/changyanmanman/article/details/7899056
1)确定表空间所包含的数据文件,利用dba_data_files查看就可以了。
2)修改表空间位备份模式,此时会在表空间的所有数据文件块头上加上锁,scn被冻结。执行:alter tablespace USERS begin backup;
3)利用操作系统命令copy数据文件。
4)设置表空间位正常模式:alter tablespace USERS end backup;
模拟并处理联机备份失败的处理:
在进行联机备份数据文件的时候,如果数据库突然因为断电或者某些故障而实例崩溃,当再次进行数据库装载的时候,会提示需要进行实例恢复:
ORA-01113: file 6 needs media recovery
ORA-01110: data file 6: '/u01/app/oracle/oradata/orcl/test.dbf'
如何进行处理呢?下面我们通过:首先修改表空间备份模式,然后关闭数据库,再然后启动数据库,来模拟此情景:
SQL> alter tablespace TEST begin backup;
Tablespace altered.
SQL> select file_name,tablespace_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
TABLESPACE_NAME
------------------------------
/u01/app/oracle/oradata/orcl/users01.dbf
USERS
/u01/app/oracle/oradata/orcl/sysaux01.dbf
SYSAUX
/u01/app/oracle/oradata/orcl/undotbs01.dbf
UNDOTBS1
FILE_NAME
--------------------------------------------------------------------------------
TABLESPACE_NAME
------------------------------
/u01/app/oracle/oradata/orcl/system01.dbf
SYSTEM
/u01/app/oracle/oradata/orcl/example01.dbf
EXAMPLE
/u01/app/oracle/oradata/orcl/test.dbf
TEST
6 rows selected.
SQL> host cp /u01/app/oracle/oradata/orcl/test.dbf /u01/app/oracle/test.bak
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 608174080 bytes
Fixed Size 1220820 bytes
Variable Size 243273516 bytes
Database Buffers 356515840 bytes
Redo Buffers 7163904 bytes
Database mounted.
ORA-01113: file 6 needs media recovery
ORA-01110: data file 6: '/u01/app/oracle/oradata/orcl/test.dbf'
SQL> startup force mount;
ORACLE instance started.
Total System Global Area 608174080 bytes
Fixed Size 1220820 bytes
Variable Size 243273516 bytes
Database Buffers 356515840 bytes
Redo Buffers 7163904 bytes
Database mounted.
SQL> desc v$backup
Name Null? Type
----------------------------------------- -------- ----------------------------
FILE# NUMBER
STATUS VARCHAR2(18)
CHANGE# NUMBER
TIME DATE
SQL> select status,change#,time from v$backup where file#=6;
STATUS CHANGE# TIME
------------------ ---------- ---------
ACTIVE 1060636 30-JUL-13 -----active说明此数据文件正在被备份
SQL> alter database datafile '/u01/app/oracle/oradata/orcl/test.dbf' end backup;
Database altered.
上面这条是关键,通过强制挂载数据库之后,可以使用alter database end backup,也可以使用上面的针对某个数据文件的结束;还有一种通过recover命令结束数据文件的备份:recover datafile 6;
SQL> alter database open;
Database altered.
好了,现在数据库可以正常启动了,再看一下现在对应的数据文件的状态:
SQL> select * from v$backup where file#=6;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- ---------
6 NOT ACTIVE 1060636 30-JUL-13
3、备份控制文件
当发生涉及数据库的配置改变,如增加减少表空间,数据文件,日志文件组或日志文件成员。当执行数据库一致性备份的时候,数据库的控制文件是不活动的,我们可以直接用操作系统命令来备份;当数据库处于open状态时,我们用alter database 命令既可以建立控制文件副本,也可以把控制文件备份到跟踪文件中。
演示alter database备份控制文件:
alter database backup controlfile to '/u01/app/oracle/ctl.bak'但是如果该目录下已经有控制文件了,我们可以用:alter database backup controlfile to '/u01/app/oracle/ctl.bak' reuse;
演示备份到跟踪文件中:
1)查看跟踪文件位置:show parameter user_dump_dest
2)确定跟踪文件名称,我们可以通过v$process,v$session确定当前的会话的的操作系统对应的pid,为什么需要操作系统的pid呢?这就要从跟踪文件的命名规则说起了,跟踪文件的命名规则如下:<SID>_ora_<SPID>.trc,其中SID代表数据的的sid,SPID对应的是此次会话的进程id所对应的操作系统进程号。好了,这就是为什么需要确定操作系统的pid的原因了。
SQL> select a.spid from v$process a,v$session b where a.addr=b.paddr and b.username='SYS';
3)执行控制文件备份命令:alter database bakcup controlfile to trace;'
4)跟踪文件时文本格式,去掉了其中的注释,就可以看到真正创建控制文件的语句了。在nomount的模式下,我们创建数据文件即可:
4、备份归档日志,参数文件,口令文件
————备份归档日志直接用操作系统命令;
————对于参数文件,如果是用的pfile,那直接可以用操作系统备份copy,但是如果是spfile,因为其是二进制文件,我们必须用下面的语句进行备份:
SQL>create pfile='/u01/app/oracle/pfile.bak' from spfile='$ORACLE_HOME/dbs/spfileorcl.ora'
————备份口令文件直接用操作系统命令。
5、用户管理的完全恢复