1)oracle备份数据某用户
(不是在sqlplus,而是在操作系统执行,cmd等,需要dba权限)
expdp tempuser/oracle DUMPFILE=suncrs20170105.DMP DIRECTORY=EXPDP_DIR1 SCHEMAS=suncrs logfile=suncrs20170105.dmp.log REUSE_DUMPFILES=Y
注意不用加实例名,加实例名是报错的:且linux需要在oracle安装用户下执行
2)恢复表数据
闪回(闪回查询需要回滚段支持,能查询到数据的前镜像。但是回滚段大小不够时,老的数据会被覆盖,因此能闪回的是有个时间范围,不可能做到任意时间)
a)如果开启闪回可以使用闪回表。
select log_mode,flashback_on from v$database;
如果是下面结果则开了闪回
LOG_MODE FLASHBACK_ON
alter table 表名 enable row movement; --开启表行移动
flashback table 表名 to timestamp to_timestamp(‘20130813 14:00:00’,‘yyyymmdd hh24:mi:ss’);
b)闪回查询:
select *
from test_tmp as of timestamp to_timestamp(‘2014-05-28 11:00:00’,‘yyyy-mm-dd hh24:mi:ss’);恢复到2014年05月28日11点
c)误删数据表,利用回收站恢复
SELECT * FROM user_recyclebin WHERE original_name=‘drop_test’;
FLASHBACK TABLE drop_test TO BEFORE DROP;
–从回收站恢复时重命名表(把表A重新恢复命名为表B
flashback table 表A to before drop rename to 表B;)
purge table 表名;–删除回收站指定的表
purge recyclebin;–清空你的回收站。注意操作,不要轻易清空
drop table 表名 purge;–删除你的表且不再回收站中留下任何痕迹
3)删除重复数据:利用rowid实现
eg: delete FROM hdm.dtmg_data_exrt a
WHERE ROWID NOT IN (SELECT MAX(b.rowid)
FROM hdm.dtmg_data_exrt b
WHERE a.crcycd = b.crcycd
AND a.torycd = b.torycd
AND a.etl_dt = b.etl_dt);
4)查询记录一条变多条显示,利用rownum实现(重复显示)
SELECT t.* FROM ca_bat_task t, (SELECT rownum FROM ca_bat_task where rownum between 1 and 2) t2
where t.shortname=‘BDSS’ ORDER BY TASK_CODE ASC;
5)查看被锁的session(需要sys权限)
查看被锁的session,
SELECT OBJECT_NAME,MACHINE,S.SID,S.SERIAL# FROM V
L
O
C
K
E
D
O
B
J
E
C
T
L
,
D
B
A
O
B
J
E
C
T
S
O
,
V
LOCKED_OBJECT L,DBA_OBJECTS O, V
LOCKEDOBJECTL,DBAOBJECTSO,VSESSION S WHERE L.OBJECT_ID=O.OBJECT_ID AND L.SESSION_ID=S.SID;
杀死session;
ALTER SYSTEM KILL SESSION ‘100,17235’;
ALTER SYSTEM disconnect SESSION ‘1264,32387’ immediate;
6)参看失败的索引,并重建(DROP PARTITION后索引会无效)
SELECT INDEX_NAME,STATUS FROM USER_INDEXES WHERE STATUS=‘UNUSABLE’;
ALTER INDEX INDEX_NAME REBUILD;