一、数据库恢复和备份。
1、数据库备份分物理备份和逻辑备份。
物理备份:主要分归档模式备份和非归档模式备份。
归档模式:数据库设置成归档模式对数据库进行的备份。
非归档模式:数据库设置成非归档模式对数据库进行的备份。
逻辑备份:主要是指数据的导出导入操作。(imp/exp 和impdp/expdp).
(1).归档模式
oracle数据库有联机重做日志,这个日志是记录对数据库所做的修改,比如插入,删除,更新数据等,对这些操作都会记录在联机重做日志里。一般数据库至少要有2个联机重做日志组。当一个联机重做日志组被写满的时候,就会发生日志切换,这时联机重做日志组2成为当前使用的日志,当联机重做日志组2写满的时候,又会发生日志切换,去写联机重做日志组1,就这样反复进行。
如果数据库处于非归档模式,联机日志在切换时就会丢弃. 而在归档模式下,当发生日志切换的时候,被切换的日志会进行归档。比如,当前在使用联机重做日志1,当1写满的时候,发生日志切换,开始写联机重做日志2,这时联机重做日志1的内容会被拷贝到另外一个指定的目录下。这个目录叫做归档目录,拷贝的文件叫归档重做日志。
数据库使用归档方式运行时才可以进行灾难性恢复。
归档日志模式和非归档日志模式的区别
非归档模式只能做冷备份,并且恢复时只能做完全备份.最近一次完全备份到系统出错期间的数据不能恢复.
归档模式可以做热备份,并且可以做增量备份,可以做部分恢复.
用ARCHIVE LOG LIST 可以查看期模式状态时归档模式还是非归档模式.
(2).非归档模式
相反非归档就是不保存旧事务日志
2、数据库恢复分完全恢复和不完全恢复。
完全恢复:恢复到数据库失败时的数据库状态。
数据库恢复也分物理恢复和逻辑恢复。
物理恢复:从数据库中备份的文件重新复制到原来的数据库中;
逻辑恢复:从数据库中导出的数据再导入原来的数据库。
二、物理备份和恢复数据库。
1.对数据库进行脱机备份。
脱机备份又称冷备份,shutdown数据库的服务后复制需要的文件,包括把数据文件和控制文件等相关的内容复制到其他的磁盘路径上。如果数据库出现问题,再把文件复制回来,实现数据库恢复。
数据库数据文件:select name from v$datafile;
数据库控制文件:select name from v$controlfile;
2.对数据库进行联机备份。
联机备份又称热备份。是在数据库归档模式下进行的备份。
(1)查看数据库中日志:archive log list
(2)切换日志模式为归档模式且自动存档为启用状态命令如下:
修改日志为归档模式:alter system set log_archive_start=true scope=spfile;
关闭数据库:shutdown immediate;
启动mount实例但不启动数据库:startup mount;
更改数据库为归档日志模式:alter database archivelog;
把数据库设置成归档模式后就可以进行数据库的备份和恢复操作了。
(3)举例备份表空间DCDB.
改变数据库的状态为open:alter database open;
开始备份表空间DCDB:alter tablespace DCDB begin backup;(把oradata里面的DCDB.dbf文件复制到其他磁盘或备份路径)
结束表空间DCDB的备份:alter tablespace DCDB end backup;
(4)举例恢复表空间中的数据文件
对当前日志进行归档:alter system archive log current;
切换日志文件:alter system switch logfile;
关闭数据库命令:shutdown immediate; -----shutdonwn abort
删除数据文件并重新启动数据库:startup;
将数据文件设置成脱机状态并删除:alter database datafile 8 offline drop;
把数据库的状态设置成open:alter database open;
恢复数据文件:recover datafile 8;(auto)
设置数据文件为联机状态:alter database datafile 8 online;
三、逻辑备份和恢复数据库。
1、exp导出方法。
导出表:exp username/password@实例名 file='C:\data.dmp' tables=table_name
导出表空间:exp username/password@实例名 file='C:\data.dmp' tablespaces=tablespace_name
2、expdp导出方法。
创建目录对象:create directory directory_name as 'file_name'
给使用目录的用户赋权限:grant read,write on directory directory_name to user_name;
expdp user_name/password directory=directory_name dumpfile=temp.dmp logfile=log.dmp tables=table_name;
查看已经创建的directory项:SELECT * FROM DBA_DIRECTORIES;
3、逻辑导入数据
imp导入方式:imp user_name/password file=backupfile.dmp tables=table_name
impdp导入方式:imp user_name/password directory=directory_name dumpfile=temp.dmp tables=table_nam
SQL>drop user lentim cascade;
SQL>CREATE USER lentim IDENTIFIED BY 123456 DEFAULT TABLESPACE LENTIM;
grant connect,resource to lentim;
grant unlimited tablespace to lentim;
grant create database link to lentim;
grant select any sequence,create materialized view to lentim;
grant dba to lentim;
几点报错说明:
问题1:
ORA-39002: 操作无效
ORA-39070: 无法打开日志文件。
ORA-29283: 文件操作无效
ORA-06512: 在 "SYS.UTL_FILE", line 536
ORA-29283: 文件操作无效
注意导出语句的路径必需是导出源主机的路径,且真实存在。
问题2:
ORA-31631: 需要权限
ORA-39109: 未授权用户不能对其他用户的方案进行操作
grant dba权限给目标用户。
问题3:
ORA-39001: 参数值无效
ORA-39000: 转储文件说明错误
ORA-31640: 无法打开要读取的转储文件 "/home/oracle/lentim1030.dmp;"
ORA-27037: 无法获得文件状态
linux-x86_64 Error: 2: No such file or directory
Additional information: 3
重点检查导入文件dmp文件名称大小写是否与linux里面的一致。
一 用impdp必须在服务端,不能在客户端
二 创建的目录必须是是有效的,并且要导入的dmp文件必须放在其中
三 要导入的dmp文件必须是expdp导出才行
四 服务器中的orale至少是10g,低的版本不支持数据泵
附简要备份过程文档(适合了解备份概念后的读者):
//逻辑备份恢复
export NLS_LANG="Simplified Chinese_china".ZHS16GBK
●oracle10G
exp lentim/123456@192.168.32.6:1521/orcl file=/home/oracle/lentim_backup.dmp log=/home/oracle/lentim.log owner=lentim
imp cp_dcdb/cp_dcdb@DCDB_TEST file=e:\dcdb.dmp fromuser=cp_dcdb touser=cp_dcdb
●oracle11G
expdp导出步骤:
sqlplus sys/123456@orcl as sysdba;
SQL>create directory dir as '/home/oracle'
SQL>grant read,write on directory dir to lentim;
expdp system/123456@orcl directory=dir dumpfile=lentim.dmp logfile=lentim_expdp.log schemas=lentim
expdp system/123456@orcl directory=dir dumpfile=lentim.dmp logfile=lentim_expdp.log full=y parallel=10
impdp导入步骤:
impdp system/123456@mac_linux directory=dir dumpfile=SYSTEM.DMP logfile=impdp.log
impdp system/123456@mac_linux directory=dir dumpfile=lentim.dmp logfile=impdp.log remap_schema=lentim:yemo
impdp \'/ as sysdba\' directory=dir full=y dumpfile=lentim.dmp logfile=impdp.log parallel=10 table_exists_action=replace
//物理备份恢复
●开启归档:
shutdown immediate;
start mount
alter database archivelog;
alter database open;
archive log list;
●禁用归档:
SQL> shutdown immediate;
SQL> startup mount; #重启数据库到mount模式
SQL> alter database noarchivelog; #修改为非归档模式
SQL> alter database open; #打数据文件
SQL> archive log list; #再次查看前归档模式
##SQL> alter system set log_archive_start=false scope=spfile; #禁用自归档 ##11G此参数无效,无需设置
●脱机备份(冷备份)
select name from v$datafile; ##数据库数据文件
select name from v$controlfile; ##数据库控制文件
●联机备份恢复(热备份)
示例备份表空间
需要先开启数据库归档模式
SQL>alter tablespace LENTIM begin backup;
把oradata里面的DCDB.dbf文件复制到其他磁盘或备份路径
SQL>alter tablespace LENTIM end backup;
●示例恢复表空间
SQL>alter system archive log current; ##对当前日志进行归档
SQL>alter system switch logfile; ##切换日志文件(一般切换三次)
SQL>shutdown immediate; ##关闭数据库命令
SQL>startup; ##删除数据文件并重新启动数据库
SQL>alter database datafile 8 offline ##将数据文件设置成脱机状态并恢复备份到原来路径
SQL>alter database open; ##把数据库的状态设置成open
SQL>recover datafile 8;(auto) ##恢复数据文件
SQL>alter database datafile 8 online; ##设置数据文件为联机状态
评论回复