当前位置:文档之家› ORACLE数据库操作手册

ORACLE数据库操作手册

ORACLE 数据库操作手册4.1中国通信集团公司安徽有限公司信息系统部2010年7月修改记录目录第一章数据库使用注意事项 (6)第一章数据库使用注意事项 (6)一、营业前台使用统一地址,后台业务严格区别业务区,不可随意访问 (6)二、不涉及当天业务的查询和统计在BCV库中操作 (6)三、前台营业时间禁止在生产环境进行大数据量的查询和统计操作 (6)四、关联表均很大的查询和统计尽量用BCV库 (6)五、按照业务规则进行DML操作,DML不要忘记执行COMMIT或ROLLBACK.. 7六、大批量更新数据的事务分次提交 (7)七、数据库DDL操作由数据库管理员根据业务规则进行 (7)八、数据库使用结束及时断开连接,但也不要频繁的连接和断开 (7)九、客户端配置与客户端第三方工具使用 (7)十、不要使用工具进行可视化数据修改操作 (7)十一、合理使用帐号,妥善保管密码 (7)十二、严禁在生产库进行业务开发、调试工作 (8)十三、单条SQL语句的长度最好不要超过1000字节 (8)十四、数据导出导入使用expdp/impdp,不要使用exp/imp (8)十五、PL/SQL程序应尽量符合第二章要求,注意事务的提交、回滚及异常情况处理 8十六、一定不能在循环体内部创建数据库的连接,包括通过JDBC连接数据库。

(8)十七、SQL语句在执行前需要对语句逻辑进行检查,避免形成隐式笛卡尔积,占用大量临时表空间和降低语句效率。

(8)第二章SQL编写注意事项 (9)一、查看表字段名或随机少量数据时,不要使用SELECT * FROM TABLENAME (9)二、SELECT 子句中避免使用* (9)三、查询总记录数时,尽量不要用COUNT(*),而要指定一个有索引的字段。

(9)四、对分区表进行查询时,尽量把分区键作为查询条件的第一个条件 (9)五、无条件删除表中数据时,用TRUNCATE代替DELETE (9)六、查询语句中尽量使用表的索引字段,避免做大表的全表扫描 (9)七、带通配符(%)的LIKE语句 (10)八、用EXISTS替代IN (10)九、用NOT EXISTS替代NOT IN (10)十、尽可能用UNION ALL替换UNION (11)十一、ORDER BY语句建议 (11)十二、避免使用NOT (11)十三、使用DECODE函数减少处理时间 (12)十四、删除重复记录 (12)十五、如果可以使用WHERE条件,尽量不要在HA VING中限制数据 (12)十六、尽量不要使数据排序 (12)十七、避免改变索引列类型 (13)十八、避免在索引列上使用计算 (13)十九、避免在索引列上使用IS NULL和IS NOT NULL (13)二十、子查询改写成表连接 (13)二十一、使用索引的第一个列 (14)二十二、减少对表的查询 (14)二十三、SQL语句中:用>=替代> (14)如果在ID列上建有索引,则语句SELECT * FROM EMPLOYEE WHERE ID >= 9 要比语句SELECT * FROM EMPLOYEE WHERE ID > 8高效。

这是由于前者DBMS将直接跳到第一个ID等于9的记录而后者将首先定位到8的记录并且向前扫描到第一个DEPT 大于9的记录。

(15)二十四、使用提示(hints) (15)二十五、大批量数据导入 (15)二十六、DBLINK使用 (15)二十七、绑定变量使用建议 (16)第三章跟踪SQL执行计划 (18)一、相关理论 (18)1、ORACLE优化器 (18)2、访问TABLE的方式 (18)3、索引访问方式 (18)二、SET TRACE跟踪SQL执行计划 (19)第一章数据库使用注意事项一、营业前台使用统一地址,后台业务严格区别业务区,不可随意访问营业网址需要通过4A系统统一使用http://10.153.176.6通过四层交换机访问,禁止访问指定的主机。

后台业务(包含后台脚本及维护人员业务操作)须严格按照业务区使用中间件及数据库实例,以避免影响数据库性能。

A1:合肥、淮北中间件:10.153.171.125 crmtux1/3(主)、10.153.171.126 crmtux1(备)10.153.171.125 bosstux1/3(主)、10.153.171.126 bosstux1(备)数据库:WCRMA1、WACCTA1、WRES1A2:阜阳、宿州、亳州、池州中间件:10.153.171.126 crmtux2/3(主)、10.153.171.125 crmtux2(备)10.153.171.126 bosstux2/3(主)、10.153.171.125 bosstux2(备)数据库:WCRMA2、WACCTA2、WRES2B1:蚌埠、马鞍山、安庆、黄山、滁州中间件:10.153.171.135 crmtux1/3(主)、10.153.171.136 crmtux1(备)10.153.171.135 bosstux1/3(主)、10.153.171.136 bosstux1(备)数据库:WCRMB1、WACCTB1、WRES1B2:芜湖、淮南、铜陵、六安、宣城中间件:10.153.171.136 crmtux2/3(主)、10.153.171.135 crmtux2(备)10.153.171.136 bosstux2/3(主)、10.153.171.135 bosstux2(备)数据库:WCRMB2、WACCTB2、WRES2二、不涉及当天业务的查询和统计在BCV库中操作BCV库每天0时同步一次(历时约1小时),数据、用户及密码与生产环境相同。

BCV 库是单节点数据库,共有WCRMABCV、WCRMBBCV、WACCTABCV、WACCTBBCV和WRESBCV等五个库。

BCV库的TBS_PERSON表空间是可写表空间。

三、前台营业时间禁止在生产环境进行大数据量的查询和统计操作前台营业时间一般为8:00-18:00(高峰时间8:30-10:30、15:00-16:30),在此期间不要在生产环境做大数据量的查询和统计,每个查询的执行时间控制在1分钟内。

四、关联表均很大的查询和统计尽量用BCV库大表关联查询操作一般会占用较大的临时表空间和较高CPU,对数据库影响较大,尤其是多个大表关联且涉及排序、分组等操作时。

五、按照业务规则进行DML操作,DML不要忘记执行COMMIT或ROLLBACK不要只执行语句,而不控制事务。

当执行一条DML语句时,数据库会分配相应锁、回滚段、REDO LOG BUFFER等资源。

语句执行后应尽快的提交或回滚释放分配的资源。

六、大批量更新数据的事务分次提交在营业忙时,大于10万的数据刷新需分次提交。

大于100万的数据刷新尽量在系统空闲时进行,并分次提交,以减少异常发生。

七、数据库DDL操作由数据库管理员根据业务规则进行DDL操作有可能涉及到存储分配、表分析、数据生命周期规划等,须数据库管理员执行,业务人员不能使用预设帐号执行DDL语句。

八、数据库使用结束及时断开连接,但也不要频繁的连接和断开数据库连接是数据库的宝贵资源,数据库支持的连接有限,不需要使用数据库时断开连接。

如果能正常退出,别用“结束任务”或kill -9。

如果正在执行SQL时发生终端异常,联系数据库管理员检查处理,以防止数据库一直占用该SQL相关资源。

九、客户端配置与客户端第三方工具使用Oracle客户端版本要求在10.2.0.4及以上,以尽量避免出现兼容性问题。

第三方工具PL/SQL Developer版本应在8.0及以上,Toad for Oracle版本应在10.0及以上,DBArtisan 版本应在8.5及以上。

十、不要使用工具进行可视化数据修改操作使用工具可视化修改数据时可能会加长数据库锁时间、增加误操作风险,因此数据修改操作须直接用SQL语句进行。

十一、合理使用帐号,妥善保管密码个人帐号能进行的操作不要使用应用帐号执行,少量数据修改的操作应通过问题知识库对个人帐号授权后进行。

帐号密码应妥善保管,不得借给他人使用,每三个月需修改一次个人帐号密码,密码应不低于8位,并含有字母、数字和特殊字符,且不能同于前五次密码。

不要非法获取未经授权的系统预设(应用)帐号密码。

不要使用未经授权的帐号登陆数据库。

帐号被锁定时联系数据库管理员解决。

十二、严禁在生产库进行业务开发、调试工作十三、单条SQL语句的长度最好不要超过1000字节1000字节对应1000个英文字符或500个中文字符,需要更长语句的操作考虑使用语句段、存储过程或临时表解决。

十四、数据导出导入使用expdp/impdp,不要使用exp/imp十五、PL/SQL程序应尽量符合第二章要求,注意事务的提交、回滚及异常情况处理十六、一定不能在循环体内部创建数据库的连接,包括通过JDBC连接数据库。

十七、SQL语句在执行前需要对语句逻辑进行检查,避免形成隐式笛卡尔积,占用大量临时表空间和降低语句效率。

第二章SQL编写注意事项一、查看表字段名或随机少量数据时,不要使用SELECT * FROM TABLENAME用DESC TABLENAME或SELECT * FROM TABLENAME WHERE 1 = 2、SELECT * FROM TABLENAME WHERE ROWNUM < 1等命令查看表结构信息,尽量不要直接执行SELECT * FROM TABLENAME,然后kill会话。

二、SELECT 子句中避免使用*在SELECT子句中列出所有的列时,使用*很方便,但是效率低。

因为ORACLE在解析过程中会查询数据字典,将*依次转换成所有的列名。

所以,直接在SELECT子句中写出想要显示的列。

三、查询总记录数时,尽量不要用COUNT(*),而要指定一个有索引的字段。

例如主键列为INDEX,使用COUNT(INDEX)能利用索引。

四、对分区表进行查询时,尽量把分区键作为查询条件的第一个条件五、无条件删除表中数据时,用TRUNCATE代替DELETE使用DELETE删除表中记录未提交时,系统会用回滚段存放被删除信息。

而TRUNCATE 命令不使用回滚段,当命令执行后,数据不能被恢复,因此很少的资源被调用,执行时间也会更短。

六、查询语句中尽量使用表的索引字段,避免做大表的全表扫描例如:WHERE子句中有联接的列,即使最后的联接值为一个静态值,也不会使用索引。

SELECT *FROM EMPLOYEEWHERE FIRST_NAME || '' || LAST_NAME = 'Beill Cliton';这条语句没有使用基于LAST_NAME创建的索引。

相关主题