备份恢复
(项目中一般是冷备+热备结合)
一、物理备份:
将系统中的文件从一个地方拷到另外的地方
1.冷备:将数据库关闭,将文件从一个地方拷到另一个地方,一般情况不使用,只能恢复到时间点的状态去(系统级别的备份)
2.热备:数据库运行中,将文件从一个地方拷到另一个地方,必须在archived mode,支持表空间级的备份,还可以按用户分配,冻结表空间的SCN号不管用户在做什么操作,不能有一点错,有一点错备份就无效,项目中很少用(系统级别的备份)windows系统中会用到,或数据库中的数据不是特别重要时可以用
1)表空间级别
alter tablespace <> begin backup; //冻结scn号
cp ... //将文件从一个地方拷到另一个地方
alter tablespace <> end backup ; //解冻SCN号
2)拷贝成脚本文件
alter database backup controlfile to trace as '/';
alter database backup controlfile to '/' ;
archivelog cp ../ ....../
3)数据文件级别
alter database beging backup;
cp .../.../ //拷贝数据文件,密码文件参数文件.......
alter database end backup
>>> select checkpoint_change from v$database ; //查看SCN号
>>>select online_change ,offline_change from v$datafile;//查看SCN号
3.rman(recover manager管理恢复目录):备份用户使用过的数据块,属于热备
1>.备份的原理
备份---------还原-------恢复
backup restore recover
2>.备份信息的存放
rman工具存放的地方
$ORACLE_HOME/bin/rman
/opt/u01/oracle/11g/bin/rman ----
$rman //只是用rman登录了,并未连接数据库
$rman target / ; //给出一个连接的目标 / 等价于sys/oracle 只有sys用户能够调用rman
>>>select dbaid from v$database
1)、使用管理恢复目录
rman / nolog catalog -----使用一个管理恢复库,使用一个数据库来存放rman数据库备份的信息,备份文件是集中存放的
2).不使用管理恢复目录
rman / nolog nocatalog ----所有的备份信息写入到当前的控制文件当中,备份文件是分散存放的
RMAN>
RMAN> show all;
RMAN configuration parameters for database with db_unique_name MAXDB are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default //表示有效的备份,数字1表示有1个,一般项目中是两个,照着命令敲一次,然后就可以修改我们的备份的有效数
CONFIGURE BACKUP OPTIMIZATION OFF; # default //如果有表空间或数据文件是离线的,是否需要跳过他
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default //备份好的放到磁盘,如果放到磁带机中,将disk进行修改
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default //自动备份控制文件
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default //自动备份控制文件,并指定路径
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default //用户在进行备份时,需要多少个进程来服务,工作中一般会多开几个进程
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default //数据文件备份片的个数
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default //归档的备份放到几个数据片中
CONFIGURE MAXSETSIZE TO UNLIMITED; # default //备份文件的大小
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default // 备份出来的文件是否需要加密
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default //如果要加密,加密的方式
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZ E FOR LOAD TRUE ; # default //
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default //不删除备份
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/opt/u01/oracle/11g/dbs/snapcf_maxdb.f'; # default //文件快照的地方
3>.rman备份
1)完全备份 (不能备份联机日志,不能备份pfile)
database 备份整个数据库
tablespace
datafile
users
spfile
controlfile
archivelog
backup database (数据文件,控制文件,spfile)
backup tablespace <>,<>;
backup datafile <>,<>....;
backup user<>;
backup spfile;
backup current controfile; //备份当前控制文件
backup archivelog ; //备份归档日志
backup archivelog all ;//备份所有的归档
backup database plus archivelog all; //(数据文件,控制文件,参数文件,归档日志)
//所有的备份都放到默认路径中-闪回区中,如果要跟路径,就在命令后加上fomat ‘路径’ ;
RMAN> backup spfile format '/tmp/spfile.bkp' ;
Starting backup at 01-JAN-12
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=141 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 01-JAN-12
channel ORA_DISK_1: finished piece 1 at 01-JAN-12
piece handle=/tmp/spfile.bkp tag=TAG20120101T104504 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 01-JAN-
show parameter db_racovery_area ; //备份文件放到闪回区中 (**nnn****表示备份的数据文件,**ncs****c表示备份里有控制文件,s表示备份里面有spfile文件)
备份片:rman中的动态性能视图能查看到 .dbf
备份集:备份片的集合 .bkp
2)增量备份 (必须在完全备份基础上)
backup level 0 database ; //全备
backup imcremental level 0 database ; //0级的增量备份
a.差异增量备份:自上次备份以来修改过的数据
b.累积增量备份:自上次全备以后修改过的数据
11g以前: 0,1,2 ,3,4,5
11g :0级全备,1,2级增量备份
一周的备份策略
日 一 二 三 四 五 六
0全备 差异 差异 差异 累积 差异 差异
0 l1 l1 l1 l2c l1 l1
backup cumulatice incremental level 1 database ;
c.压缩备份:用在数据量很大的数据文件
backup as compressed backupset database ;//支持数据文件,表空间..的压缩
backup as compressed backupset datatable
list backup ;//查看备份信息
RMAN> list backup;
List of Backup Sets
===================
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
1 Full 80.00K DISK 00:00:00 01-JAN-12 //full全量备份,INC表示增量备份,lv表示增量的级别
BP Key: 1 Status: AVAILABLE Compressed: NO Tag: //status 一定要是available 表示可用的,其他状态都是不正常的状态
TAG20120101T104504
Piece Name: /tmp/spfile.bkp
SPFILE Included: Modification time: 01-JAN-12
SPFILE db_unique_name: MAXDB
list backup of spfile; //查看备份的所有的数据文件
list backup of datafile;
list backup of archivelog all;
list backup of controlfile ;
report need backup; //查看哪些需要做数据备份
delete backupset 21 ;//表示删除某一个备份21为备份片
delete backup ;// 表示删除所有的备份文件
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1.rm -rf //不能够去删掉磁盘文件的备份文件
2.数据恢复前,检查备份文件是否有效 crosscheck backup
3. 删除无用的备份文件 delete expried backup
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
rman备份工作的两种模式
1.mount ---
2.open---- (必须是归档模式,如没有归档,可以手动归档)
4).rman 数据库的恢复
5).rman数据库的克隆
二、逻辑备份
使用SQL语句进行数据备份
1.exp/imp:(导出/导入)
exp:
$>>exp help=y //查看帮助
table
exp scott/tiger file=/tmp/emp.dmp tables=emp,dept ;
导表前要检查临时表,临时表空间一定要有数据表,状态一定要正常
SQL> select tablespace_name ,status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
SYSAUX ONLINE
TEMP ONLINE
USERS ONLINE
UNDOTBS2 ONLINE
EXAMPLE ONLINE
CARLA ONLINE
7 rows selected.
SQL> select file_name from dba_temp_files;
FILE_NAME
--------------------------------------------------------------------------------
/opt/u01/oracle/oradata/maxdb/temp01.dbf
$>> exp scott/tiger file=/tmp/emp.dmp tables=emp query=“where....” //按查询条件导出表
$>>exp scott/tiger file=/tmp/emp.dmp tables=emp indexes=n; //不导出索引
$>> exp scott/tiger file=/tmp/emp.dmp tables=emp rows=y;// 异库的迁移,只导数据,不导结构
user
exp \ ‘sys/oracle as sysdba\ ’ file=/tmp/scott.dmp owner=要导出的用户名 grant=n log=/tmp/scott.log //导出用户所有信息不导出索引,项目中需要加入log参数,表示将屏幕上的日志输出存放到文件中
database
exp \' / as sysdba \' file=/tmp/full.dmp full=y ; //表示导出整个数据库,包括所有的对象和权限
tablespace
exp \'/ as sysdba \' file=/tmp/users.dmp tablespace=users; //导出users表空间下的所有信息
注意:1@导出时客户端的字符集,客户端的字符集必须和要导入的数据库的字符集一致
export NLS_LANG=' simplified chinese_chain.zh16gbk' //导前可将字符集修改为一致
2@exp导出数据时,可以在客户端导出,也可以在服务端导出
imp
----导入 ,导入的数据库中不能存在名字相同的表,用户,表空间
table
$>>imp scott/tiger file=/tmp/emp.dmp to tables=emp ; //只导入数据
$>>imp scott/tiger file=/tmp/emp.dmp to tables=emp data_only=y ; //不导入数据结构,只导入数据
user
$>>imp \' / as sysdba /' file=/tmp/emp.dmp to tables=emp fromuser=scott touser=sarah; //把scott用户下的表导入到sarah用户下
$>>imp \' / as sysdba /' file=/tmp/scott.dmp fromuser=scott touser=sarah;
database
imp \'/as sysdba\' file='/' full=y
tablespace
imp \ '/ as sysdba \' file='/' tablespaces=users
传输表空间的导入导出方式,只导出表空间下面所有对象的结构,不拷数据(数据以cp的方式拷贝),使用这种方式,表空间必须是只读方式,导入的库不能存在相同的表空间
1.创建一个表空间,test
2.创建一个用户让其默认表空间为test
3.将test表空间置为只读
>>alter tablespace test read only
4.使用传输表空间技术导出test表空间
>>exp \ ' / as sysdba \' file=/tmp/test.dmp transport_tablespace=y tablespaces=test;
将test 表空间导入到另外的数据库
1.拷贝导出的文件与test表空间的数据文件
>>cp test.dbf .....
>>cp /tmp/test.dmp ..../
2.使用传输表空间技术导入
>>imp \ '/as sysdba \' file=/tmp/test.dmp tarnsport _tablespace=y tablespaces=test datafile=../test.dbf/
3.将test 表空间置为read write
alter tablespace test read write;
2. expdp/impdp:数据泵导出/导入 10g引入的新功能 服务器端,不能在客户端使用(大部分时间是用来导出的,很少用到导入)
expdp/impdp 和exp/imp 的区别
1.exp/imp 使用在客户端,而expdp/impdp只能在服务端不能在客户端
2.exp/imp 不可以做表对表的传输,而expdp/impdp可以
3.exp/imp 随便定制导入导出目录,而expdp/impdp的目录必须在数据库中创建才可以
4.exp/imp 导入的时候必须使用sys用户,而expdp/impdp只要有读写全校就可以不限制用户
$>> expdp help=y //查看帮助
expdp:
---导出
1. create directory <ext> as '/'
grant read ,write on directory <ext> to scott;
table:
$>> expdp scott/tiger directory=ext dumpfile=emp.dump tables=emp [indexes=n content=data_only reuse_dumpfiles=y query="'deptno=30'"] ;
user:
$>> expdp scott/tiger directory=ext dumpfile=emp.dump schma=scott logfile=log.dmp1 //logfile不要跟路径
database:
$>> exp \ '/ as sysdba \' directory=ext dumfile=emp.dump full=y
tablespace:
$>> expdp scott/tiger directory=ext dumpfile=emp.dump tablespace=users
$>> expdp scott/tiger directory=ext dumpfile=emp.dump tablespace=users transport_tablespace=y tablespaces=users //使用传输表空间方式
impdp
---导入
$>> impdp scott/tiger directory=ext dumpfile=scott.dmp remap_schema=scott:sarah schemas=scott
$>> impdp scott/tiger directory=ext dumpfile=scott.dmp remap_table=emp:emp1 table=emp
$>> impdp scott/tiger directory=ext dumpfile=users.dmp remap_schema= users:sarah tablespaces=sarah //将一个表空间导入到另一个表空间