日期:2014-05-16 浏览次数:20524 次
在oralce中,我们有时误删了某些数据或者删除了某些表;这时我们需要恢复这些数据。
?
第一,delete数据后恢复
?
delete某些数据后,可以使用下面语句找到,这个主要是使用Oracle的快照功能。查询到当前时间的前100minute的数据。
?
?
select * from skiller AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '100' MINUTE)
?这个时间由不同情况来定义。
?
也可以定义为秒、时等等
?
可以使用下面语句来查看哪些数据是在这个时间段内的区别。
?
select * from skiller AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '100' MINUTE) where skill_id not in (select skill_id from skiller)
?删选出了这些数据,我们就可以将这些数据插入到我们现有表中,示例见下面SQL
?
?
insert into skiller select * from skiller AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '100' MINUTE) where skill_id not in (select skill_id from skiller)?
第二,Drop数据后恢复
?
当我们drop一个表后,我们可以在我们的用户回收站内看到这些数据。比如:
?
select * from user_recyclebin;
?在这个结果集中我们可以看到我们删除对象的结果集。
这个只是查看,你可以从中找到你drop的表名以及其他信息。
?
找到你要恢复的对象名,比如表名。
?
使用下面语句就可以恢复你的对象了。
?
?
flashback table table_name to before drop;
?
第三,查询表字段信息
?
?
select * from user_tab_columns where table_name = 'WZ_CGCL'
利用上面的SQL,输入你的表名,就可以看到你表字段的相关信息,注意表名一定要大写。
?
?
select * from tab t where t.tabtype = 'TABLE';
利用上面的SQL,你可以查询表或者视图等相关信息。
??
???
第四,使用dbms_aq包,需要对AQ USER,AQ ADMIN用户进行授权
?
?
grant execute on dbms_alert to necer;
grant execute on DBMS_AQ to my_username; GRANT RESOURCE TO <UserName>; GRANT CONNECT TO <UserName>; GRANT EXECUTE ANY PROCEDURE TO <UserName>; GRANT aq_administrator_role TO <UserName>; GRANT aq_user_role TO <UserName>; GRANT EXECUTE ON dbms_aqadm TO <UserName>; GRANT EXECUTE ON dbms_aq TO <UserName>; GRANT EXECUTE ON dbms_aqin TO <UserName>;
利用上面的SQL,可以使用具有使用dbms_alert下面的函数。
?
第五,条件语句中in参数的个数限制
?
?
select * from table_1 t where t.a in (a1,a2,a3....a1000)
?在9i中个数不能超过256个,在10i中个数不能超过1000个。这个可以使用or语句来解决。
如下所示:
?
select * from table_1 t where t.a in (a1,a2,a3,....a500) or t.a in (a501,a502,....a1000)
?这样就避开了个数限制。
?
第六,函数Lpad与Rpad的格式以及用法
lpad(string,n,[pad_string]) ?向左填充函数
string为输入字符;
n表示填充的位数;
pad_string表示填充的字符---为可选参数,不填,默认填充空格。
如,lpad('xiva',8,'t')则返回ttttxiva.
?
?
select lpad('xiva',5,'0') into temp_mrn from dual;?
Rpad同理,区别在于此为向右填充函数。
?
第七,查看Oracle错误代码的含义
http://ora-01407.ora-code.com/code-1.html
?
第八,数据库导入导出
?
exp system/manager@TEST file=d:daochu.dmp owner=(system,sys)
?导出某些用户的数据。
?
?
?