Oracle数据库重复数据删除的几种方法

Oracle数据库重复数据删除的几种方法,第1张

重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完全一样。Oracle数据库重复数据删除技术有如下优势:更大的备份容量、数据能得到持续验证、有更高的数据恢复服务水平、方便实现备份数据的容灾。

一、删除部分字段重复数据先来谈谈如何查询重复的数据吧。

下面语句可以查询出那些数据是重复的:

select

字段1,字段2,count()

from

表名

group

by

字段1,字段2

having

count()

>

1

将上面的>号改为=号就可以查询出没有重复的数据了。

想要删除这些重复的数据,可以使用下面语句进行删除

delete

from

表名

a

where

字段1,字段2

in

(select

字段1,字段2,count()

from

表名

group

by

字段1,字段2

having

count()

>

1)

上面的语句非常简单,就是将查询到的数据删除掉。不过这种删除执行的效率非常低,对于大数据量来说,可能会将数据库吊死。所以我建议先将查询到的重复的数据插入到一个临时表中,然后对进行删除,这样,执行删除的时候就不用再进行一次查询了。如下:

CREATE

TABLE

临时表

AS

(select

字段1,字段2,count()

from

表名

group

by

字段1,字段2

having

count()

>

1)

上面这句话就是建立了临时表,并将查询到的数据插入其中。

下面就可以进行这样的删除 *** 作了:

delete

from

表名

a

where

字段1,字段2

in

(select

字段1,字段2

from

临时表);

这种先建临时表再进行删除的 *** 作要比直接用一条语句进行删除要高效得多。

这个时候,大家可能会跳出来说,什么你叫我

1关闭oracle所有的服务。可以在windows的服务管理器中关闭;

2打开注册表:regedit 打开路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\

删除该路径下的所有以oracle开始的服务名称,这个键是标识Oracle在windows下注册的各种服务!

3打开注册表,找到路径: HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE

删除该oracle目录,该目录下注册着Oracle数据库的软件安装信息。

4删除注册的oracle事件日志,打开注册表

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application

删除注册表的以oracle开头的所有项目。

5删除环境变量path中关于oracle的内容。

鼠标右键右单击“我的电脑属性高级环境变量PATH 变量。

删除Oracle在该值中的内容。注意:path中记录着一堆 *** 作系统的目录,在windows中各个目录之间使用分号(; )隔开的,删除时注意。

建议:删除PATH环境变量中关于Oracle的值时,将该值全部拷贝到文本器中,找到对应的Oracle的值,删除后,再拷贝修改的串,粘贴到PATH环境变量中,这样相对而言比较安全。

6重新启动 *** 作系统。

以上1~5个步骤 *** 作完毕后,重新启动 *** 作系统。

7重启 *** 作系统后各种Oracle相关的进程都不会加载了。

这时删除Oracle_Home下的所有数据。(Oracle_Home指Oracle程序的安装目录)

8删除C:\Program Files下oracle目录。 (该目录视Oracle安装所在路径而定)

9删除开始菜单下oracle项,

如: C:\Documents and Settings\All Users\「开始」菜单\程序\Oracle - Ora10g

1、先关掉oralce,net stop OracleServiceORCL(ORCL是我的实例名字,换成你的),或者去我的电脑服务中关闭

2、开始->程序->Oracle - oracle的版本号,我的是10ghome->Oracle Installation Products-> Universal Installer 卸载oracle

3、进注册表,regedit,删除选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE下所有的key。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application这个里面所有有oracle这个字眼的,删除

4、删除c盘\Program Files\Oracle目录的东西以及oracle安装目录下所有的文件以及文件夹

5、环境变量中删除有关oracle的classpath和path

基本就这把,有事继续追问

在命令行下,输入:sqlplus / as sysdba,连接上数据库。

然后输入:DROP 要删除的数据库 EQM INCLUDING CONTENTS AND DATAFILES,将指定的数据库删除。

导入方法:示例,将d:\daochudmp中的表table1导入。

impsystem/manager@TESTfile=d:\daochudmptables=(table1)

注意事项:导出dmp数据时需要有导出表的权限的用户,否则不能导出。

这个问题就是要删除表中重复的记录,查询的sql语句如下:\x0d\select id,name from (\x0d\select id,name,row_numer() over(partition by id,name order by id,name) rn from tableA)\x0d\where rn>1;\x0d\删除的sql语句如下:\x0d\DELETE tableA WHERE ROWNUM = (SELECT ROWNUM\x0d\ FROM (SELECT id,name,\x0d\ ROW_NUMBER() OVER(PARTITION BY id,name ORDER BY id,name) RN\x0d\ FROM tableA )\x0d\ WHERE RN > 1);

1、先查询本库所有表,本文以TEST开头表为例,select from user_tables t where table_name like 'TEST%';

2、查询表的数量,select count() from user_tables t where table_name like 'TEST%';

3、编写删除表的sql脚本,

declare

v_sql varchar2(200);

v_cnt number(10);

begin

for v_tab in (select table_name from user_tables t where table_name like 'TEST%') loop

  v_sql := 'drop table '|| v_tabtable_name;

  execute immediate v_sql ;

end loop;

end;

4、再次查看TEST开头的表,select from user_tables t where table_name like 'TEST%',已无记录,

一、使用offline数据文件的方法

非归档模式使用:alter database datafile '' offline drop;

归档模式使用: alter database datafile '' offline;

说明:

1) 以上命令只是将该数据文件OFFLINE,而不是在数据库中删除数据文件。该数据文件的信息在控制文件种仍存在。查询v$datafile,仍显示该文件。

2) 归档模式下offline和offline drop效果是一样的

3) offline后,存在此datafile上的对象将不能访问

4) noarchivelog模式下,只要online redo日志没有被重写,可以对这个文件recover后进行online *** 作

实际使用案例:

直接删除数据文件后无法进入系统的解决方案

正常情况下,删除表空间的正确方法为:

DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;

如果没有通过以上命令删除而直接删除了数据文件,将导致数据库无法打开。

如果直接删除了数据文件

普通用户登录时,则报错:

ORA-01033: ORACLE initialization or shutdown in progress

sys用户可以正常登录

但进行 *** 作时(SELECT count(1) FROM user_tables),则会报错:

ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询

如果执行命令alter database open以打开数据库时,又报如下错:

ORA-01157: 无法标识/锁定数据文件 12 - 请参阅 DBWR 跟踪文件

ORA-01110: 数据文件 12: 'E:/ORACLE/PRODUCT/1020/ORADATA/ORCL/TSTEST001DBF'

说明数据库没找到这个数据文件

因为数据文件在没有被offline的情况下物理删除了,导致oracle的数据不一致,因此启动失败

通过以下方法即可解决

解决方法:

sqlplus sys/orcl@orcl as sysdba;

SQL> alter database datafile 'E:/ORACLE/PRODUCT/1020/ORADATA/ORCL/TSTEST001DBF' offline drop;

SQL> alter database open;

SQL> drop tablespace CTBASEDATA;

二、Oracle 10G R2开始,可以采用:Alter tablespace tablespace_name drop datafile file_name;来删除一个空数据文件,并且相应的数据字典信息也会清除:

sys@ORCL>select file_id,file_name,tablespace_name from dba_data_files

2 where tablespace_name='USERS';

FILE_ID FILE_NAME TABLESPACE_NAME

------- -------------------------------------------- ------------------

4 /u01/app/oracle/oradata/orcl/users01dbf USERS

sys@ORCL>alter tablespace users add datafile

2 '/u01/app/oracle/oradata/orcl/users02dbf' size 5M autoextend off;

Tablespace altered

sys@ORCL>select file_id,file_name,tablespace_name from dba_data_files

2 where tablespace_name='USERS';

FILE_ID FILE_NAME TABLESPACE_NAME

------- -------------------------------------------- -------------------

4 /u01/app/oracle/oradata/orcl/users01dbf USERS

9 /u01/app/oracle/oradata/orcl/users02dbf USERS

sys@ORCL>drop table test;

Table dropped

sys@ORCL>create table test tablespace users

2 as

3 select from dba_objects;

Table created

sys@ORCL>select SEGMENT_NAME,FILE_ID,BLOCKS from dba_extents

2 where file_id=9;

SEGMENT_NAME FILE_ID BLOCKS

------------------------------ ---------- ----------

TEST 9 8

TEST 9 8

TEST 9 8

TEST 9 8

TEST 9 8

TEST 9 8

TEST 9 8

TEST 9 8

TEST 9 8

TEST 9 8

TEST 9 8

TEST 9 8

TEST 9 8

TEST 9 8

TEST 9 8

TEST 9 128

TEST 9 128

17 rows selected

sys@ORCL>alter table test move tablespace PERFSTAT; --把表移动到其它表空间

Table altered

sys@ORCL>select SEGMENT_NAME,FILE_ID,BLOCKS from dba_extents

2 where file_id=9;

no rows selected

sys@ORCL>alter tablespace users drop datafile

2 '/u01/app/oracle/oradata/orcl/users02dbf';

Tablespace altered

sys@ORCL>select file_id,file_name,tablespace_name from dba_data_files

2 where tablespace_name='USERS';

FILE_ID FILE_NAME TABLESPACE_NAME

------- -------------------------------------------- ---------------------

4 /u01/app/oracle/oradata/orcl/users01dbf USERS

三、oracle 10g可以删除临时表空间的文件

alter database tempfile '/home/oracle/temp01dbf' drop including datafiles;

删除表中的数据:

delete from 表名;truncate table 表名;

删除表:

drop table 表名;

删除数据库:

drop database 数据库名;

甲骨文股份有限公司(NASDAQ:ORCL,Oracle)是全球大型数据库软件公司。总部位于美国加州红木城的红木岸(Redwood Shores),现时首席执行官为公司创办人劳伦斯·埃里森(Lawrence J Ellison)。

以上就是关于Oracle数据库重复数据删除的几种方法全部的内容,包括:Oracle数据库重复数据删除的几种方法、如何删除oracle数据库、如何彻底删除ORACLE数据库数据 高手进等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9866489.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存