Oracle 删除重复数据只留一条

  1. 查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断
select * from 表 where Id in (select Id from 表 group byId having count(Id) >1
  1. 删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录
DELETE from 表 WHERE (id) IN ( SELECT id FROM 表 GROUP BY id HAVING COUNT(id) > 1) AND ROWID NOT IN (SELECT MIN(ROWID) FROM 表 GROUP BY id HAVING COUNT(*) > 1);
  1. 查找表中多余的重复记录(多个字段)
select * from 表 a where (a.Id,a.seq) in(select Id,seq from 表 group by Id,seq having count(*) > 1)
  1. 删除表中多余的重复记录(多个字段),只留有rowid最小的记录
delete from 表 a where (a.Id,a.seq) in (select Id,seq from 表 group by Id,seq having count(*) > 1) and rowid not in (select min(rowid) from 表 group by Id,seq having count(*)>1)
  1. 查找表中多余的重复记录(多个字段),不包含rowid最小的记录
select * from 表 a where (a.Id,a.seq) in (select Id,seq from 表 group by Id,seq having count(*) > 1) and rowid not in (select min(rowid) from 表 group by Id,seq having count(*)>1)

例子

delete 
--select *
from cell  where   cgi in (select cgi  from cell group by cgi      having count(cgi) > 1)
and   time_stamp not in (select min(time_stamp) from cell group by cgi     having count(cgi)>1) 

查看UNDO空间的快照

select s.username, u.name from v$transaction t,v$rollstat r, v$rollname u,v$session s
       where s.taddr=t.addr and t.xidusn=r.usn and r.usn=u.usn order by s.username;

查看正在进行的会话

           SELECT b.sid oracleID,  b.username 登录Oracle用户名,  b.serial#,  spid 操作系统ID,  paddr,  sql_text 正在执行的SQL,  b.machine 计算机名 
       FROM v$process a, v$session b, v$sqlarea c  WHERE a.addr = b.paddr  AND b.sql_hash_value = c.hash_value  

锁表和删除会话

select p.spid, a.serial#, c.object_name, b.session_id, b.oracle_username, b.os_user_name  from v$process p, v$session a, v$locked_object b, all_objects c  where p.addr = a.paddr and a.process = b.process  and c.object_id = b.object_id ;
      select l.session_id,o.owner,o.object_name from v$locked_object l,dba_objects o where l.object_id=o.object_id;
      select t2.username,t2.sid,t2.serial#,t2.logon_time from v$locked_object t1,v$session t
      where t1.session_id=t2.sid order by t2.logon_time;
       alter   system     kill   session   '89,22763';session_id,serial#

索引失效

select index_name ,status  from user_indexes where Status = 'UNUSABLE'
select 'alter index ' || index_name || ' rebuild;' from user_indexes where Status = 'UNUSABLE'
select  owner, index_name,table_name from dba_indexes where status = 'UNUSABLE'
select index_owner,index_Name,partition_name  from dba_ind_partitions  where status = 'UNUSABLE'; 

新建用户

  select * from dba_users
  create user fast_nokia identified by fast_nokia
  grant select any dictionary to fast_nokia
  grant connect,select any table to fast_nokia

Oracle表空间增加数据文件

  1. 查看每个表空间当前数据文件剩余块
select * from dba_data_files where tablespace_name='TPADBS06'
select * from dba_temp_files
  1. 给表空间增加数据文件
ALTER TABLESPACE USERS ADD DATAFILe '+DGSTATIC/jxwydb/datafile/users21.dbf' SIZE 50M  AUTOEXTEND ON NEXT 100M MAXSIZE 31G;
ALTER TABLESPACE TPADBS05 ADD DATAFILe '+DGWARE/jxwydb/datafile/tpadbs05_24.dbf'  SIZE 50M  AUTOEXTEND ON NEXT 100M MAXSIZE 31G;

Oracle自动摘除分片维护

  • 分片维护表
select * from tab_partition_drop 
  • 作业调度时间(目前是5点运行)
select job,what,last_date,next_date,failures,broken from dba_jobs Where schema_user='CAIKE';
select * from user_jobs where what='PROC_DROP_PATITION_SCRIPT;

表空间查询

  • 查看单个表空间使用情况
SELECT TABLESPACE_NAME,SEGMENT_NAME,TO_CHAR(SUM(BYTES)/(1024*1024),'999G999D999')   CNT_MB  
FROM DBA_EXTENTS  
WHERE OWNER='NIOSDB'  
AND SEGMENT_TYPE   LIKE   'TABLE%'  
and TABLESPACE_NAME='NIOSDBS'
GROUP BY TABLESPACE_NAME,SEGMENT_NAME;

*查看所有表空间使用情况

SELECT TABLESPACE_NAME,MAX_M,COUNT_BLOCKS FREE_BLK_CNT,SUM_FREE_M,TO_CHAR(100 * SUM_FREE_M/SUM_M, '99.99')||'%' AS PCT_FREE
FROM (SELECT TABLESPACE_NAME,SUM(BYTES)/1024/1024 AS SUM_M
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME),
(SELECT TABLESPACE_NAME AS FS_TS_NAME,MAX(BYTES)/1024/1024 AS MAX_M,COUNT(BLOCKS) AS COUNT_BLOCKS,SUM(BYTES/1024/1024) AS SUM_FREE_M
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME)
WHERE TABLESPACE_NAME = FS_TS_NAME
ORDER BY PCT_FREE

恢复表数据修改内容

 create table backup_table  as 
select * from source_table as of timestamp sysdate - 1/48 where title like '%测试%'; 

sysdate - 1/48 半个小时以内操作的 sysdate - 1/24 一个小时内操作的