日期:2014-05-16  浏览次数:20489 次

Oracle数据库小知识

在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)

?导出某些用户的数据。

?

?

?