Oracle数据库的系统中6个经验原则 (oracle数据库)

教程大全 2025-07-09 08:23:47 浏览

以下的文章主要是对Oracle数据库的系统中经常使用的相关经验原则,本文对其分成六部分介绍,其中包括having 子句的具体用法 ,外部联接”+”的实际应用,还有如何删除表内重复记录的实际操作方法 。

1.having 子句的用法

having 子句对 group by 子句所确定的行组进行控制,having 子句条件中只允许涉及常量,聚组函数或group by 子句中的列.

oracle数据库

2.外部联接”+”的用法

外部联接”+”按其在”=”的左边或右边分左联接和右联接.若不带”+”运算符的表中的一个行不直接匹配于带”+”预算符的表中的任何行,则前者的行与后者中的一个空行相匹配并被返回.若二者均不带’+’,则二者中无法匹配的均被返回.利用外部联接”+”,可以替代效率十分低下的 not in 运算,大大提高运行速度.例如,下面这条命令执行起来很慢

倘若利用外部联接,改写命令如下:

可以发现,运行速度明显提高.

3.删除表内重复记录的方法

可以利用这样的命令来删除表内重复记录:

不过,当表比较大(例如50万条以上)时,这个方法的效率之差令人无法忍受,需要另想办法(可参看拙文《电信计费中长途重复话单的技术处理》,《计算机与通信》,1999-07).

4.set transaction 命令的用法

在执行大事务时,有时oracle会报出如下的错误:

这说明oracle给此事务随机分配的回滚段太小了,这时可以为它指定一个足够大的回滚段,以确保这个事务的成功执行.例如

回滚段roll_abc被指定给这个delete事务,commit命令则在事务结束之后取消了回滚段的指定.

5.使用索引的注意事项

select,Update,delete 语句中的子查询应当有规律地查找少于20%的表行.如果一个语句查找的行数超过总行数的20%,它将不能通过Oracle数据库系统使用索引获得性能上的提高.

索引可能产生碎片,因为记录从表中删除时,相应也从表的索引中删除.表释放的空间可以再用,而索引释放的空间却不能再用.频繁进行删除操作的被索引的表,应当阶段性地重建索引,以避免在索引中造成空间碎片,影响性能.在许可的条件下,也可以阶段性地truncate表,truncate命令删除表中所有记录,也删除索引碎片.

6.数据库重建应注意的问题

在利用import进行Oracle数据库重建过程中,有些视图可能会带来问题,因为结构输入的顺序可能造成视图的输入先于它低层次表的输入,这样建立视图就会失败.要解决这一问题,可采取分两步走的方法:首先输入结构,然后输入数据.命令举例如下 (uesrname:jfcl,password:hfjf,host sting:ora1,数据文件:expdata.dmp):

第一条命令输入所有Oracle数据库结构,但无记录.第二次输入结构和数据,64000字节提交一次.ignore=Y选项保证第二次输入既使对象存在的情况下也能成功.

文章出自:

【编辑推荐】


oracle 启动必须开启什么进程

2、startup mount dbname安装启动,这种方式启动下可执行:数据库日志归档、数据库介质恢复、使数据文件联机或脱机,重新定位数据文件、重做日志文件。 执行“nomount”,然后打开控制文件,确认数据文件和联机日志文件的位置,但此时不对数据文件和日志文件进行校验检查。 3、startup open dbname先执行“nomount”,然后执行“mount”,再打开包括Redo log文件在内的所有数据库文件,这种方式下可访问数据库中的数据。 4、startup,等于以下三个命令startup nomountalter database mountalter database open5、startup restrict约束方式启动这种方式能够启动数据库,但只允许具有一定特权的用户访问非特权用户访问时,会出现以下提示:ERROR:ORA-: ORACLE 只允许具有 RESTRICTED SESSION 权限的用户使用6、startup force强制启动方式,当不能关闭数据库时,可以用startup force来完成数据库的关闭,先关闭数据库,再执行正常启动数据库命令7、startup pfile=参数文件名带初始化参数文件的启动方式先读取参数文件,再按参数文件中的设置启动数据库

oracle数据库中有哪些字符集,字符集之间的子集和超集关系是怎么样的?

oracle数据库的字符集有很多的,具体的也不能一一详细地列举出来了,但是,建库的时候,会有选择字符集的界面,点开下拉条,将会列出oracle所支持的所有字符集(10/12)。 超集与子集是包含和被包含的关系,超集兼容子集。

sql*loader是个什么东西

sql*loader是一个程序,用来把文本文件里面的数据, 导入到 Oracle 数据库里面。 下面是一个简单的例子:SQL*Loader首先需要一个 控制文件test_,内容如下:LOAD DATAINFILE *INTO TABLE test_mainFIELDS TERMINATED BY ,(ID, VALUE)BEGINDATA1,Test其中,第一行LOAD DATA意思是告诉SQL*Loader,要干啥? 这里是加载数据。 第二行INFILE *意思是数据从哪里来? 这里是包含在控制文件中。 第三行INTO TABLE 意思是数据要导到哪里? 这里是要到 test_main 表。 第四行FIELDS TERMINATED BY意思是数据之间用什么符号分隔? 这里是用 逗号 分隔。 第五行是数据要按什么顺序写到列里面第六行BEGINDATA是告诉SQL*Loader,后面的都是数据了。 然后开始运行 sqlldr 程序D:\temp>sqlldr userid=test/test123 control=test_*Loader: Release 10.2.0.1.0 - Production on 星期日 3月 13 14:58:22 2011Copyright (c) 1982, 2005, rights *Loader-601:对于 INSERT 选项, 表必须为空。 表 TEST_MAIN 上出错在 SQL Plus 中,SQL> truncate table test_main;表被截断。 以后,再次测试执行D:\temp>sqlldr userid=test/test123 control=test_*Loader: Release 10.2.0.1.0 - Production on 星期日 3月 13 14:58:56 2011Copyright (c) 1982, 2005, rights reserved.达到提交点 - 逻辑记录计数 1

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐