在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)
导出某些用户的数据。
第九,创建DBLINK
create shared public database link paradise_db_link
connect to scpdb36 identified by scpdb36 authenticated by scpdb36 identified by scpdb36
using '(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.42.111) (PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl)))'