用的是exp和imp命令,详细的命令格式网上有很多,在这里就不罗列了。一般来讲,需要备份(特定用户下的)所有对象(表)或指定对象(表)。可以用类似于下面这样的命令
[-dlbond@-]$exp username/userpasswd file=dmp_file_name.dmp tables=table_name
[-dlbond@-]$imp username/userpasswd file=dmp_file_name.dmp full=y
特别地,在imp命令中有一个full选项,如果想将备份文件的所有信息导入数据库,则可以用full=y,如果只想导入指定的对象(表),可以使用tables=table_name
以上就是关于数据的备份与恢复的简单内容,随时做好备份是一个特别好的习惯,就像rpg游戏当中的存档,如果你不随时在重要节点存档的话,出现“胜败乃兵家常事,大侠请重新来过”,那就只能是痛哭流涕了。
如果有时想恢复一些小动作的话,比如仅仅是误删了一条数据,或是一个表格,可能对于exp和imp来说,就有些大材小用了。如果你用的是oracle的话,可以考虑用flashback(闪回)功能。flashback分为:1.flashback query 2.flashback table 3.flashback database。就个人理解来看,前两个比较常用,而第三个相对来说使用率不高。
flashback query
就名称来看,是“闪回查询”,即只能查询到操作(例如删了某条记录)之前的内容,但不对表格实际内容做修改。有两种检索方式,一种是按时间查询,一种是按scn查询。
按时间查询比较好理解,比如说五分钟之前我删除了一条记录,但是我现在又想看一下被我删除的那条记录,就可以查询五分钟之前的表格数据,类似于
select * from table_name as of timestamp systimestamp - interval '5' minute;
如果想查询指定时间的数据,则可以用类似下面这样的语句
select * from table_name as of timestamp to_timestamp('2015-04-30 08:00:01','yyyy-mm-dd hh24:mi:ss')
对于scn,则是oracle的一种机制,每条执行语句都对应一个scn号码。可以用下面的语句来查询当前scn
select dbms_flashback.get_system_change_number from dual;
而scn号是递增的,如要退回之前scn的数据,可以用类似下面的语句
select * from table_name as of scn dbms_flashback.get_system_change_number-1000;
具体后面的数字可以自己尝试。
flashback table
可以闪回操作前的数据,即修改了表的内容。同样支持timestamp和scn两种方式
flashback table table_name to timestamp systimestamp - interval '5' minute;
flashback table table_name to scn dbms_flashback.get_system_change_number-1000;
另外,flashback table还支持类似下面的语句
flashback table table_name to before drop;
如要使上面的语句生效,需要满足几个条件。以下为简单的说明。
说明:oracle有一个类似于垃圾箱的一个东西recyclebin,一般情况下是开启的。可用下面的命令查询
SQL> show parameter recyclebin
如果当前状态为off,则可以使用下面的命令开启
SQL>alter system set recyclebin=on;
另外,如果数据库空间不足,会默认冲洗掉recyclebin中最早的数据,如果冲洗掉了想要恢复的数据,则无法恢复。