版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Oracle快速删除重复的记录做项目的时候,一位同事导数据的时候,不小心把一个表中的数据全都搞重了,也确实是讲,那个表里所有的记录都有一条重复的。那个表的数据是千万级的,而且是生产系统。也确实是讲,不能把所有的记录都删除,而且必须快速的把重复记录删掉。对此,总结了一下删除重复记录的方法,以及每种方法的优缺点。为了陈诉方便,假设表名为Tbl,表中有三列col1,col2,col3,其中col1,col2是主键,同时,col1,col2上加了索引。1、通过创建临时表能够把数据先导入到一个临时表中,然后删除原表的数据,再把数据导回原表,SQL语句如下:create table tbl_tmp (se
2、lect distinct * from tbl);truncate table tbl;/清空表记录insert into tbl select * from tbl_tmp;/将临时表中的数据插回来。这种方法能够实现需求,然而专门明显,关于一个千万级记录的表,这种方法专门慢,在生产系统中,这会给系统带来专门大的开销,不可行。2、利用rowid在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是Oracle中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid可不能相同。SQL语句如下:delete from
3、 tbl where rowid in (select a.rowid from tbl a, tbl b where a.rowidb.rowid and a.col1=b.col1 and a.col2 = b.col2)假如差不多明白每条记录只有一条重复的,那个sql语句适用。然而假如每条记录的重复记录有N条,那个N是未知的,就要考虑适用下面这种方法了。3、利用max或min函数那个地点也要使用rowid,与上面不同的是结合max或min函数来实现。SQL语句如下delete from tbl awhere rowid not in (select max(b.rowid) from t
4、bl b where a.col1=b.col1 and a.col2 = b.col2);/那个地点max使用min也能够或者用下面的语句delete from tbl awhere rowid(select max(b.rowid) from tbl b where a.col1=b.col1 and a.col2 = b.col2);/那个地点假如把max换成min的话,前面的where子句中需要把跟上面的方法思路差不多是一样的,只是使用了group by,减少了显性的比较条件,提高效率。SQL语句如下:deletefrom tbl where rowid not in (select
5、max(rowid) from tbl tgroup by t.col1, t.col2);delete from tbl where (col1, col2) in (select col1,col2 from tblgroup bycol1,col2havingcount(*) 1)and rowidnotin(selectmin(rowid)fromtblgroup bycol1,col2havingcount(*) 1)还有一种方法,关于表中有重复记录的记录比较少的,同时有索引的情况,比较适用。假定col1,col2上有索引,同时tbl表中有重复记录的记录比较少,SQL语句如下4、利用
6、group by,提高效率Oracle物理结构故障的处理方法:Oracle物理结构故障是指构成数据库的各个物理文件损坏而导致的各种数据库故障。这些故障可能是由于硬件故障造成的,也可能是人为误操作而引起。因此我们首先要推断问题的起因,假如是硬件故障则首先要解决硬件问题。在无硬件问题的前提下我们才能按照下面的处理方发来进一步处理。操纵文件损坏:操纵文件记录了关于Oracle的重要配置信息,如数据库名、字符集名字、各个数据文件、日志文件的位置等等信息。操纵文件的损坏,会导致数据库异常关闭。一旦缺少操纵文件,数据库也无法启动,这是一种比较严峻的错误。能够通过查询数据库的日志文件来定位损坏了的操纵文件。
7、日志文件位于$ORACLE_BASE/admin/bdump/alert_ORCL.ora.损坏单个操纵文件:1. 确保数据库差不多关闭,假如没有用下面的命令来关闭数据库:svrmgrlshutdown immediate;2. 查看初始化文件$ORACLE_BASE/admin/pfile/initORCL.ora,确定所有操纵文件的路径。3. 用操作系统命令将其它正确的操纵文件覆盖错误的操纵文件。4. 用下面的命令重新启动数据库svrmgrlstartup;5. 用适当的方法进行数据库全备份。损坏所有的操纵文件:1. 确保数据库差不多关闭,假如没有用下面的命令来关闭数据库:svrmgrls
8、hutdown immediate;2. 从相应的备份结果集中恢复最近的操纵文件。关于没有采纳带库备份的点能够直接从磁带上将最近的操纵文件备份恢复到相应目录;关于采纳带库备份的点用相应的rman脚本来恢复最近的操纵文件。3. 用下面的命令来创建产生数据库操纵文件的脚本:svrmgrlstartup mount;svrmgrlalter database backup controlfile to trace noresetlogs;4. 修改第三步产生的trace文件,将其中关于创建操纵文件的一部分语句拷贝出来并做些修改,使得它能够体现最新的数据库结构。假设产生的sql文件名字为createc
9、ontrol.sql.注意:Trace文件的具体路径能够在执行完第3)步操作后查看$ORACLE_BASE/admin/bdump/alert_ORCL.ora文件来确定。5. 用下面命令重新创建操纵文件:svrmgrlshutdown abort;svrmgrlstartup nomount;svrmgrlcreatecontrol.sql;6. 用适当的方法进行数据库全备份。重做日志文件损坏:数据库的所有增、删、改都会记录入重做日志。假如当前激活的重做日志文件损坏,会导致数据库异常关闭。非激活的重做日志最终也会因为日志切换变为激活的重做日志,因此损坏的非激活的重做日志最终也会导致数据库的异
10、常终止。在ipas/mSwitch中每组重做日志只有一个成员,因此在下面的分析中只考虑重做日志组损坏的情况,而不考虑单个重做日志成员损坏的情况。确定损坏的重做日志的位置及其状态:1. 假如数据库处于可用状态:select * from v$logfile;svrmgrlselect * from v$log;2. 假如数据库处于差不多异常终止:svrmlgrstartup mount;svrmgrlselect * from v$logfile;svrmgrlselect * from v$log;其中,logfile的状态为INVALID表示这组日志文件出现差不多损坏;log状态为Inact
11、ive:表示重做日志文件处于非激活状态;Active: 表示重做日志文件处于激活状态;Current:表示是重做日志为当前正在使用的日志文件。损坏的日志文件处于非激活状态:1. 删除相应的日志组:svrmgrlalter database drop logfile group group_number;2. 重新创建相应的日志组:svrmgrlalter database add log file group group_number (log_file_descritpion,) size log_file_size;损坏的日志文件处于激活状态且为非当前日志:1. 清除相应的日志组:svrm
12、grlalter database clear unarchived logfile group group_number;损坏的日志文件为当前活动日志文件:用命令清除相应的日志组:svrmgrlalter database clear unarchived logfile group group_number;假如清除失败,则只能做基于时刻点的不完全恢复。打开数据库同时用适当的方法进行数据库全备份:svrmgrlalter database open;部分数据文件损坏:若损坏的数据文件属于非system表空间,则数据库仍然能够处于打开状态能够进行操作,只是损坏的数据文件不能访问。这时在数据库
13、打开状态下能够单独对损坏的数据文件进行恢复。若是system表空间的数据文件损坏则数据库系统会异常终止。这时数据库只能以Mount方式打开,然后再对数据文件进行恢复。能够通过查看数据库日志文件来推断当前损坏的数据文件到底是否属于system表空间。非system表空间的数据文件损坏1. 确定损坏的文件名字:svrmgrlselect name from v$datafile where status=INVALID;2. 将损坏的数据文件处于offline状态:svrmgrlalter database datafile datafile_name offline;3. 从相应的备份结果集中恢
14、复关于那个数据文件的最近的备份。关于没有采纳带库备份的点能够直接从磁带上恢复;关于用带库备份的点用相应的rman脚本来恢复。4. 恢复数据文件:svrmgrlalter database recover datafile file_name;5. 使数据库文件online:svrmgrlalter database datafile datafile_name online;6. 用适当的方法进行数据库全备份。system表空间的数据文件损坏:1. 以mount方式启动数据库svrmgrlstartup mount;2. 从相应的备份结果集中恢复关于那个数据文件的最近的备份。关于没有采纳带库备
15、份的点能够直接从磁带上恢复;关于用带库备份的点用相应的rman脚本来恢复。3. 恢复system表空间:svrmgrlalter database recover datafile datafile_name;4. 打开数据库:svrmgrlalter database open;5. 用适当的方法进行数据库全备份。表空间损坏:若非system表空间差不多损坏,则数据库仍然能够处于打开状态能够进行操作,只是损坏的表空间不能访问。如此在数据库打开状态下能够单独对损坏的表空间进行恢复。若是system表空间损坏则数据库系统会异常终止。这时数据库只能以Mount方式打开,然后再对表空间进行恢复。能够
16、通过查看数据库日志文件来推断当前损坏的表空间是否是system表空间.非system表空间损坏:1. 将损坏的表空间处于offline状态:svrmgrlalter tablespace tablespace_name offline;2. 从相应的备份结果集中恢复关于那个表空间最近的备份。关于没有采纳带库备份的点能够直接从磁带上恢复;关于用带库备份的点用相应的rman脚本来恢复。3. 恢复表空间:svrmgrlalter database recover tablespace tablespace_name;4. 使表空间online:svrmgrlalter tablespace tabl
17、espace_name online;5. 用适当的方法进行数据库全备份.system表空间损坏:1. 以mount方式启动数据库svrmgrlstartup mount;2. 从相应的备份结果集中恢复system表空间最近的备份。关于没有采纳带库备份的点能够直接从磁带上恢复;关于用带库备份的点用相应的rman脚本来恢复。3. 恢复system表空间:svrmgrlalter database recover tablespace system;4. 打开数据库:svrmgrlalter database open;5. 用适当的方法进行数据库全备份。整个数据库的所有文件损坏:整个数据库所有文
18、件的损坏一般是在共享磁盘阵列发生无法恢复的灾难时才发生,这种情况下只能对数据库进行恢复。若数据库的归档目录也差不多丢失,则数据库不可能做完全恢复,会有用户数据的丢失。没采纳带库备份的现场:1. 将最近的备份从磁带上把各个文件解包到相应的目录下。2. 以mount方式打开数据库:svrmgrlstartup mount;3. 恢复数据库:svrmgrlrecover database until cancel;4. 打开数据库:svrmgrlalter database open resetlogs;5. 用适当的方法进行数据库全备份。采纳带库备份的现场:1. 以nomount方式打开数据库:s
19、vrmgrlstartup nomount;2. 通过相应的rman脚本进行数据库软恢复。$rman cmdfile=hot_database_restore.rcv3. 打开数据库:svrmgrlalter database open resetlogs;4. 用适当的方法进行数据库全备份。存在最近的数据库完整冷备份前提下的一些经典紧急情况的处理:数据文件,归档重作日志和操纵文件同时丢失或损坏:无新增archives 时的状况:条件和假设:自上次镜像备份以来尚未生成新的archive log(s); Archivelog Mode; 有同步的datafile(s) 和control file
20、(s) 的镜像(冷)拷贝恢复步骤:1. 将镜像拷贝的datafile(s) 和control file(s) 抄送回原始地点:$ cp /backup/good_one.dbf /orig_loc/bad_one.dbf$ cp /backup/control1.ctl /disk1/control1.ctl2. 以mount 选项启动数据库:$ svrmgrlsvrmgrl connect internalsvrmgrl startup mount3. 以旧的control file 来恢复数据库:svrmgrl recover database usingbackup controlfil
21、euntil cancel;* 介质恢复完成(必须立即cancel )4. Reset the logfiles (对启动而言不可省略):svrmgrl alter database open resetlogs;5. 关闭数据库并做一次全库冷备份。新增archives 时的状况:条件和假设:自上次镜像备份以来差不多生成新的archive log(s); Archivelog Mode; 有同步的datafile(s) 和control file(s) 的镜像(冷)拷贝;archive log(s) 可用。恢复步骤:1. 假如数据库尚未关闭,则首先把它关闭:$ svrmgrlsvrmgrl c
22、onnect internalsvrmgrl shutdown abort2. 将备份文件抄送回原始地点:所有Database Files所有Control Files(没有archive(s) 或redo(s) 的情况下,control files 的更新无任何意义)所有On-Line Redo Logs (Not archives)init.ora file(选项)3. 启动数据库:$ svrmgrlsvrmgrl connect internalsvrmgrl startup数据文件, 重作日志和操纵文件同时丢失或损坏:条件和假设:Archivelog Mode; 有同步的所有所失文件的
23、镜像(冷)拷贝;archive log(s) 可用恢复步骤(必须采纳不完全恢复的手法):1. 假如数据库尚未关闭,则首先把它关闭:$ svrmgrlsvrmgrl connect internalsvrmgrl shutdown abort2. 将备份文件抄送回原始地点:所有Database Files所有Control Files所有On-Line Redo Logs(Not archives)init.ora file(选项)3. 启动数据库然而并不打开:svrmgrlstartup mount4. 做不完全数据库恢复,应用所有从上次镜像(冷)备份始积存起来的archives:svrmgr
24、l recover database until cancel using backup controlfile;cancel5. Reset the logfiles (对启动而言不可省略):svrmgrl alter database open resetlogs;6. 关闭数据库并做一次全库冷备份。数据文件和操纵文件同时丢失或损坏:条件和假设:Archivelog Mode; 有同步的datafile(s) 和control file(s) 的冷拷贝;archive log(s) 可用恢复步骤:1. 将冷拷贝的datafiles(s) 和control file(s) 抄送回原始地点:$
25、 cp /backup/good_one.dbf /orig_loc/bad_one.dbf$ cp /backup/control1.ctl /disk1/control1.ctl2. 以mount 选项启动数据库:$ svrmgrlsvrmgrl connect internalsvrmgrl startup mount3. 以旧的control file 来恢复数据库:svrmgrl recover database until cancel using backup controlfile;* 介质恢复完成(须在应用完最后一个archive log 后cancel )4. Reset
26、the logfiles (对启动而言不可省略):svrmgrl alter database open resetlogs;重作日志和操纵文件同时丢失或损坏时:条件和假设:Control Files 全部丢失或损坏;Archivelog Mode; 有Control Files 的镜像(冷)拷贝恢复步骤:1. 假如数据库尚未关闭,则首先把它关闭:$ svrmgrlsvrmgrl connect internalsvrmgrl shutdown abortsvrmgrlexit2. 以Control File 的镜像(冷)拷贝覆盖损坏了的Control File:$ cp /backup/co
27、ntrol1.ctl /disk1/control1.ctl3. 启动数据库然而并不打开:$ svrmgrlsvrmgrl connect internalsvrmgrl startup mount4. Drop 坏掉的redo log (排除硬件故障):svrmgrl alter database drop logfile group 2;5. 重新创建redo log:svrmgrl alter database add logfile group 2 /orig_loc/log2.dbf size 10M;6. 以旧的control file 来恢复数据库:svrmgrl recover
28、 database until cancel using backup controlfile;(必须立即cancel )7. Reset the logfiles (对启动而言不可省略):svrmgrl alter database open resetlogs;8. 关闭数据库并做一次全库冷备份只发生归档重作日志丢失或损坏时:依照不同环境和情况,选择下述手段之一:a. 立即backup 全部datafiles (假如系统采纳一般热备份或RMAN 热备份)b. 立即正常关闭数据库并进行冷备份(假如系统采纳冷备份)c. 冒险前进!不做备份而让数据库接着跑,直等到下一个备份周期再做备份。这是在赌
29、数据库在下一个备份周期到来之前可不能有需要恢复的错误发生。注意:冒险前进的选择:假如发生错误而需要数据库恢复,则最多只能恢复到出问题archive log 之前的操作现场。从另一个角度讲,archive log(s) 出现问题时,数据库若不需要恢复则其本身并没有任何问题。Oracle逻辑结构故障的处理方法:逻辑结构的故障一般指由于人为的误操作而导致重要数据丢失的情况。在这种情况下数据库物理结构是完整的也是一致的。关于这种情况采取对原来数据库的全恢复是不合适的,我们一般采纳三种方法来恢复用户数据。采纳exp/imp工具来恢复用户数据:假如丢失的数据存在一个往常用exp命令的备份,则能够才用这种方
30、式。1. 在数据库内创建一个临时用户:svrmgrlcreate user test_user identified by test;svrmgrlgrant connect,resource to test_user;2. 从往常exp命令备份的文件中把丢失数据的表按照用户方式倒入测试用户:$imp system/manager file=export_file_name tables=(lost_data_table_name) fromuser=lost_data_table_owner touser=test_user constraint=n;3. 用相应的DML语句将丢失的数据从测
31、试用户恢复到原用户。4. 将测试用户删除:svrmgrldrop user test_user cascede;采纳logminer来恢复用户数据:Logminer是Oracle提供的一个日志分析工具。它能够依照数据字典对在线联机日志、归档日志进行分析,从而能够获得数据库的各种DML操作的历史记录以及各种DML操作的回退信息。依照这些用户就能够将由于误操作而丢失的数据重新加入数据库内。1. 确认数据库的utl_file_dir参数差不多设置,假如没有则需要把那个参数加入Oracle的初始化参数文件,然后重新启动数据库。下面例子中假设utl_file_dir=/opt/Oracle/db01;2
32、. 创建logminer所需要的数据字典信息,假设生成的数据字典文本文件为dict.ora:svrmgrlexecute dbms_logmnr_d.build(dictionary_filename=dict.ora, dictionary_location=/opt/Oracle/db01);3. 确定所需要分析的日志或者归档日志的范围。这能够依照用户误操作的时刻来确定大概的日志范围。假设用户误操作时可能的日志文件为/opt/Oracle/db02/oradata/ORCL/redo3.log和归档日志/opt/Oracle/arch/orcl/orclarc_1_113.ora。4. 创
33、建要分析的日志文件列表,按日志文件的先后顺序依次加入:svrmgrlexecute dbms_logmnr.add_logfile(logfilename=/opt/Oracle/arch/orcl/orclarc_1_113.ora,options=dbms_logmnr.NEW);svrmgrl execute dbms_logmnr.add_logfile(logfilename= /opt/Oracle/db02/oradata/ORCL/redo3.log,options=dbms_logmnr.ADDFILE);5. 开始日志分析,假设需要分析的时刻在2003-06-28 12:0
34、0:00和2003-06-28 13:00:00之间:svrmgrlexecute dbms_logmnr.start_logmnr(dictfilename= /opt/Oracle/db01/dict.ora,starttime=to_date( 2003-06-28 12:00:00,YYYY-MM-DD HH:MI:SS),endtime=to_date(to_date(2003-06-28 13:00:00,YYYY-MM-DD HH:MI:SS);6. 猎取分析结果:svrmgrlselect operation,sql_redo,sql_undo from v$logmnr_co
35、ntents;7. 依照分析结果修复数据。8.结束logmnr:svrmgrldbms_logmnr.end_logmnr;9. 用适当的方法对原数据库进行数据库全备份。利用备份恢复用户数据:采纳这种方法时并不是在原数据库进行恢复,而是利用数据库备份在新的机器上重新建立一个新的数据库。通过备份恢复在新机器上将数据库恢复到用户误操作前,如此就能够获得丢失的数据将其恢复到原数据库。1. 在新的机器上安装数据库软件。2. 关于采纳带库备份的现场,需要在新的数据库服务器上安装调试相应的备份管软件。3. 依照用户误操作的时刻点进行基于时刻点的数据库恢复操作。关于没有采纳带库备份的现场,能够选取用户误操作
36、前最近的备份磁带进行恢复;关于才用带库备份的点能够通过基于时刻恢复点恢复的rman脚本来进行恢复。4.重新打开数据库:svrmgrlalter database open resetlogs;5. 从新的数据库中猎取丢失的用户数据,通过DML操作将其恢复到原数据库中。6. 用适当的方法对原数据库进行数据库全备份。用ORACLE8i修复数据库坏块的三种方法在进行SUN CLUSTER双机切换、意外断电或其它情况下,有时会发生共享盘MOUNT不上的情况,需要使用FSCK对共享盘进行修复。修复完成后,在数据库启动过程中,却又出现数据块损坏,无法启动数据库的现象,现在,能够依照不同的数据块损坏类型,检
37、测并修复错误。在此介绍三种使用Oracle8i修复损坏数据块的方法。 一、数据块损坏,错误代码为ORA-01578 ORA-1115 I/O ERROR READING BLOCK 通常后跟ORA-737X错误与操作系统错误(如UNIX中的错误号5) 产生缘故: 1 硬件问题(磁盘操纵器问题或磁盘问题) 2 物理级的数据块损坏(通常由前一缘故造成) 3 处理巨型文件时,后跟错误代码ORA-7371 确定故障缘故与恢复的方法: 1 查看alert.log文件中其它ORA-1115错误的发生情况: 1) 假如指向不同磁盘的文件,则是磁盘操纵器的问题,查看V$DATAFILE,有哪些文件位于该操纵器
38、下,转到第二步。 2) 假如指向相同磁盘的不同文件,则是磁盘的问题,转到第二步。 3) 假如指向同一个文件,执行以下语句查找文件名: SELECT SEGMENT_NAME,SEGMENT_TYPE FROM DBA_EXTENTS WHERE FILE_ID= AND BETWEEN BLOCK_ID AND BLOCK_ID+BLOCKS-1;其中,文件号与块号是ORA-1115中指出的,假如该查询持续指向某表或索引,则重建它们即可。 2 假如文件是SYSTEM表空间,或处于NOARCHIVELOG模式,关闭数据库,转到第四步。 3 假如数据库处于ARCHIVELOG模式,仍应关闭数据库,
39、假如不能关闭数据库,则将相应的数据文件脱机:ALTER DATABASE DATAFILE 文件名 OFFLINE; 4 试着将数据文件拷贝到不的磁盘。 5 假如拷贝失败,则文件将丢失。 6 STARTUP MOUNT; 7 将数据文件重命名为成功拷贝到不的磁盘的文件名: ALTER DATABASE RENAME FILE 老路径文件名 TO 新路径文件名; 8 ALTER DATABASE OPEN;9 RECOVER DATAFILE 文件名; ALTER DATABASE DATAFILE 文件名 ONLINE; 二、回滚段需要恢复假如回滚段处于NEED RECOVERY状态,需要执行
40、以下步骤进行恢复: 1 查看所有联机的表空间与数据文件 2 在init.ora文件中加入event = 10015 trace name context forever,level 10,这将生成一个追踪文件,其中含有事务与回滚的信息。 3 关闭并重新打开数据库。 4 查看TRACE文件,应有error recovery tx(#,#) object #.TX(#,#),指出事务信息,其中object #与sys.dba_objects中的object_id相同。 5 使用以下查询找出正在进行恢复的对象: SELECT owner,object_name,object_type,status
41、FROM dba_objects WHERE object_id=; 6 必须删除该对象以释放回滚块。 三、检测与修复损坏块的常用方法:(一)使用初始化参数DB_BLOCK_CHECKING与DB_BLOCK_CHECKSUM。 当块改变时,DB_BLOCK_CHECKING对块进行逻辑校验。将防止发生10210 与10211错误。 (二)使用DBMS_REPAIR包,由dbmsrpr.sql与prvtrpr.plb生成该包在特定表中生成损坏块的信息。 1DBMS_REPAIR.ADMIN_TABLES用于创建与删除存储损坏块的表。其中TABLE_TYPE为:REPAIR_TABLE(表),O
42、RPHAN_TABLE(索引);ACTION为:CREATE_ACTION(创建表),PURGE_ACTION(删除无关数据),DROP_ACTION(删除表)。例: dbms_repair.admin_tables(REPAIR_TABLE,DBMS_REPAIR.REPAIR_TABLE,DBMS_REPAIR.CREATE_ACTION,temp_data); 2DBMS_REPAIR.CHECK_OBJECT检查表、索引、分区中的块损坏。其中OBJECT_TYPE为:TABLE_OBJECT(表),INDEX_OBJECT(索引), REPAIR_TABLE_NAME(用于存储损坏块信
43、息的表)。例: dbms_repair.check_object(ORATRAIN,LOCATIONS,corrupt_count=:cc); 3使用以下语句查询块损坏信息: SELECT object_name, relative_file_no, block_id, marked_corrupt, corrupt_description, repair_description FROM repair_table; 4将块标志为损坏的:dbms_repair.fix_corrupt_blocks(ORATRAIN,LOCATIONS,fix_count=:fc); 5跃过损坏块:dbms_r
44、epair.skip_corrupt_blocks(ORATRAIN, LOCATIONS); 其中OBJECT_TYPE为 :TABLE_OBJECT(表),CLUSTER_OBJECT(索引)。 6使用REBUILD_FREELISTS重建损坏的空闲列表:DBMS_REPAIR.rebuild_freelists 7使用以下方法查找指向损坏块的索引: (1) 创建存放指向坏块索引的表 (2) dbms_repair.dump_orphan_keys(ORATRAIN,LOC_PK, orphan_table_name=ORPHAN_TAB1,key_count=:kc); (3) SELE
45、CT index_name, count(*) FROM orphan_key_table WHERE table_name = CLASSES GROUP BY index_name; (4) 重建具有orphan keys的索引 限制:不能分析Index-organized tables 与 LOB indexes,DUMP_ORPHAN_KEYS不能对bitmap与 function-based indexes操作。 (三)使用SQL命令ANALYZE TABLE|INDEX VALIDATE STRUCTURE utlvalid.sql.创建含有损坏块信息的INVALID_ROWS表,
46、ANALYZE TABLE VALIDATE STRUCTURE CASCADE同时校验表与索引。 (四)使用DBVERIFY DBVERIFY是一个外部工具,因此对数据库阻碍专门小。可用于在将备份文件拷贝回原位置前检验备份文件的完好性,并定位数据块损坏。命令如下: dbv /opt/Oracle/db02/oradata/data01.dbf start=1 end=500 logfile=dbv.log Oracle数据库应用中实现汉字“同音”查询接下来我们要编写一个函数来实现猎取汉字拼音编码。在编写那个函数的过程中我发觉了Oracle处理中英文混合字符串的bug,因此函数中采纳在任何字符
47、串前添加一个号来强制Oracle把此字符串当作双字节来处理。代码如下:create or replace function GetPinYin(Keyword in varchar2) return varchar2 isbeginDECLARE i int; j int; PinYin varchar2(500); Temp varchar2(10); TempStr varchar2(2);begin i:=1; j:=Length(|Keyword); PinYin:=; While i=j LOOP TempStr:=substr(|KeyWord,i,1); select HZPY
48、INTO Temp from BJXKS.t_Pinyin Where Num=(select max(num) from BJXKS.t_Pinyin Where Num=ASCII(TempStr); Temp:=Replace(Temp,*,TempStr); Temp:=Replace(Temp,); PinYin:=PinYin|Temp; i:=i+1; End loop; return(PinYin);end;end GetPinYin;好了,现在能够用那个函数来实现汉字的同音查询了。如查询表table1中字段A中读音和“啊”一样的记录,SQL语句能够如此写:select * from table1 where getpi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东省青州市吴井初级中学2025-2026学年初三第一次摸底考试数学试题理试题含解析
- 电力系统运行维护技术规范指南
- 建筑工程施工安全预案与紧急处理指南
- 企业预算制定与实施执行模板
- 公司员工培训规划及课程安排模板
- 企业资金运作及风险管理工具
- 项目施工进度和质量保障承诺书(3篇)
- 企业内审流程及问题反馈工具
- 跨部门项目协调单工具实时跟进和反馈模块整合版
- 文明气象传递承诺书9篇
- 初中英语语法填空专项练习含答案解析
- 2026年人教版三年级下册数学全册教学设计(春改版教材)
- 华为班组长培训课件
- 工程项目竣工资料归档与移交规范
- 电力线路巡检报告模板
- 劳务合同2026年合同协议
- 高中数学资优生导师培养模式与教学资源整合研究教学研究课题报告
- 商业综合体弱电系统施工方案
- 鼾症科普宣传课件
- 有趣的汉字小故事
- 中国特发性颅内压增高诊断与治疗专家共识(新版)课件
评论
0/150
提交评论