首页  |  知识库  |  资源下载  |  在线工具  |  A-Z  •  JAR  •  名词查         

对于在使用Oracle数据库进行系统开发设计时对象命名、设计、开发评审及变更常用的规范四

标签:脚本命名,文件编码格式,评审规则项,数据库规范     发布时间:2017-06-26   

上一页

六、数据库评审规范

1 脚本评审

1.1 脚本命名

规范1: 脚本目录应小写,命名如:工程组件目录/工程简称+”_”+模块简称+”_”+sql

例如:BROP-UOP1.0.0/brop_uop_sql/

规范2: 脚本文件应小写,命名如:

序号_数据用户名_操作类型_操作类别_操作方式_对象名_UM帐号.sql

操作类型:ddl,dml

操作类别:tab,syn,grt,create,insert,alter

 

例如:001_tppdata_ddl_create_brop_tpp_bank_info_wanghuajie949.sql

1.2 文件编码格式

规范3:  SQL脚本的编码格式,要统一使用UTF-8 WITHOUT BOM 格式,否则会在文件头部增加BOM CODE产生乱码,影响脚本执行

1.3 评审规则项

序号

规则

说明

1

表和字段必须有comment中文注释


COMMENT ON  TABLE BCESDATA.IBP_BIND_ACCOUNT IS '一类户绑卡关系表';

COMMENT ON  COLUMN BCESDATA.IBP_BIND_ACCOUNT.ID IS '主键ID';

2

创建或删除table时必须带上属主的名字


CREATE TABLE BCESDATA.IBP_BIND_ACCOUNT

DROP TABLE BCESDATA.IBP_BIND_ACCOUNT

3

创建或删除索引时必须带上属主的名字


create INDEX BCESDATA.IDX_IBP_BIND_ACCOUNT_CARD_NO

drop INDEX BCESDATA.IDX_IBP_BIND_ACCOUNT_CARD_NO

4

对于9i库新建表必须加上monitoring参数,10g与11g忽略


CREATE  TABLE OWNER.TABLE_NAME(COL NUMBER) MONITORING;

5

建表语句必须显式指定INITRANS  6


CREATE  TABLE BCESDATA.IBP_BIND_ACCOUNT(...) INITRANS 6;

6

创建索引(全局临时表创建索引排除)必须加上初始化事务槽,并设置为16。


CREATE  INDEX OWNER.IDX_NAME ON OWNER.TABLE(ID) INITRANS 16;

7

所有可以被引用的对象都应该建同义词


CREATE PUBLIC SYNONYM XXX FOR BCESDATA.XXX;

8

创建同义词时禁止使用OR REPLACE关键字


CREATE OR REPLACE PUBLIC SYNONYM ...

9

创建主键时必须先创建索引,再创建主键


CREATE  UNIQUE INDEX BCESDATA.IDX_IBP_BIND_ID  ON  BCESDATA.IBP_BIND_ACCOUNT (ID) INITRANS 16;

ALTER TABLE  BCESDATA.IBP_BIND_ACCOUNT ADD CONSTRAINT PK_IDX_IBP_BIND_ID

PRIMARY  KEY (ID) USING INDEX BCESDATA.IDX_IBP_BIND_ID;

10

唯一键的创建方式,与主键相同,即先建索引


CREATE  UNIQUE INDEX BCESDATA.IDX_IBP_BIND_ID2

ON  BCESDATA.IBP_BIND_ACCOUNT_TAB (ID2) INITRANS 16;

ALTER  TABLE BCESDATA.IBP_BIND_ACCOUNT_TAB ADD

CONSTRAINT  UK_IDX_IBP_BIND_ID2

UNIQUE  (ID2) USING INDEX BCESDATA.IDX_IBP_BIND_ID2;

11

Date 类型的字段, 需要以”DATE_”做为前缀。

Boolean类型的字段,需要以”IS_”作为前缀。


12

主键字段的命名不能包含任何业务含义。命名规则为:”ID_”+表名


13

要求所有的sequence都使用cache选项,cache值最低为40。


CREATE  SEQUENCE BCESDATA.SEQ_CHANNEL_ORDER_NO INCREMENT BY 1 START WITH  100000000000001 NOMAXVALUE NOCYCLE CACHE 100

14

创建sequence时,必须指定minvalue、maxvalue、start  with、increment by、cache的值。


CREATE  SEQUENCE BCESDATA.SEQ_CHANNEL_ORDER_NO

INCREMENT BY 1

START WITH 100000000000001

NOMAXVALUE  

NOCYCLE

CACHE 100

NOORDER

15

所有sequence使用noorder选项。


16

创建或删除sequence时必须带上属主的名字


CREATE  SEQUENCE SECURITYDATA.SEQ_CHANNEL_ORDER_NO;

DROP  SEQUENCE SECURITYDATA.SEQ_CHANNEL_ORDER_NO;

17

所有约束必须有约束名,非空约束除外:


主键约束:PK_  + 表名

外键约束: FK_  + 子表名_ + 子表字段名

唯一约束: UK_  + 表名_ + 字段名

值检查约束:  CK_ + 表名_ + 字段名


 

1.4 评审步骤

2 SQL评审

2.1 评审规则项

序号

规则

说明

1



2



3



<h2 st

3 DBA手工评审

3.1 TOP10 SQL

3.2 TOP10 Event

重点关注事件:

序号

事件名称

说明

举例

1

Free buffer waits



2

Buffer busy waits



3

Read by other session



4

Log file parallel write



5

Log buffer space



6

Log file sync



7

Db file sequential read



8

Db file scattered read



9

Latch free



10

Log file switch



11

enqueue



 

3.3抓出行迁移和行连接

查询SQL

ANALYZE TABLE SEC_USER_T COMPUTE  STATISTICS;

SELECT NUM_ROWS,CHAIN_CNT  FROM DBA_TABLES T WHERE T.TABLE_NAME=’SEC_USER_T’;

ANALYZE TABLE SEC_USER_T LIST CHAINED  ROWS;

SELECT OWNER_NAME,TABLE_NAME,HEAD_ROWID  FROM CHAINED_ROWS WHERE TABLE_NAME=’SEC_USER_T’;

 

3.4 抓出全表扫描

查询SQL

SELECT T.SQL_ID,T.SQL_TEXT,T.SQL_FULLTEXT,TP.OBJECT_OWNER,TP.OBJECT_NAME,T.*,TP.*  

FROM V$SQL T,V$SQL_PLAN TP WHERE

T.SQL_ID=TP.SQL_ID

AND TP.OBJECT_OWNER  IN('TPPDATA','TSPDATA','UOPDATA',’POPDATA’)

AND TP.OPERATION='TABLE ACCESS' AND  TP.OPTIONS='FULL'

AND T.MODULE NOT IN('PL/SQL  Developer','plsqldev.exe')

AND T.LAST_ACTIVE_TIME>=SYSDATE-15

ORDER BY TP.OBJECT_OWNER,OBJECT_NAME;

 

3.5 抓出隐式转换

查询SQL

SELECT T.SQL_ID,T.PARSING_SCHEMA_NAME,T.SQL_FULLTEXT,T.SQL_TEXT,TP.OBJECT_OWNER,TP.OBJECT_NAME,TP.PLAN_HASH_VALUE,T.EXECUTIONS,T.FIRST_LOAD_TIME,T.LAST_LOAD_TIME,T.LAST_ACTIVE_TIME,

T.MODULE,T.ELAPSED_TIME,TP.FILTER_PREDICATES,INSTR(UPPER(T.SQL_FULLTEXT),'TO_NUMBER')  AS POS FROM V$SQL T,V$SQL_PLAN TP

WHERE T.SQL_ID=TP.SQL_ID

AND (TP.FILTER_PREDICATES LIKE  '%TO_NUMBER(%' OR TP.FILTER_PREDICATES LIKE '%TO_CHAR(%')

AND T.PARSING_SCHEMA_NAME  IN('TPPDATA','TPPOPR','TSPDATA',’POPDATA’,'TSPOPR','UOPDATA','UOPOPR',’POPOPR’)

AND T.MODULE NOT IN('PL/SQL  Developer','plsqldev.exe')

AND T.LAST_ACTIVE_TIME>=SYSDATE-30;

 

3.6 抓出未使用绑定变量

SELECT T.SQL_ID,

         T.SQL_TEXT,

         T.FORCE_MATCHING_SIGNATURE,

         T.EXACT_MATCHING_SIGNATURE

    FROM V$SQL T

 WHERE T.PARSING_SCHEMA_NAME IN

         ('TPPOPR', 'TSPOPR', 'UOPOPR', 'TPPDATA', 'TSPDATA', 'UOPDATA')

AND UPPER(T.SQL_TEXT) NOT LIKE 'EXPLAIN%'

   --AND  T.SQL_TEXT LIKE '%testaa where%'

   --AND  T.FORCE_MATCHING_SIGNATURE<>T.EXACT_MATCHING_SIGNATURE

AND T.MODULE NOT  IN('plsqldev.exe','PL/SQL Developer')

ORDER BY UPPER(T.SQL_TEXT) DESC

 

3.6 抓出注释为空的表列

SELECT 'TAB'  COMTYPE,T.OWNER,T.TABLE_NAME,'',T.COMMENTS FROM DBA_TAB_COMMENTS T WHERE  T.OWNER IN('TPPDATA','TSPDATA','UOPDATA','POPDATA') AND T.COMMENTS IS NULL

UNION

SELECT 'COL'  COMTYPE,T.OWNER,T.TABLE_NAME,T.COLUMN_NAME,T.COMMENTS FROM DBA_COL_COMMENTS T  WHERE T.OWNER IN('TPPDATA','TSPDATA','UOPDATA','POPDATA') AND T.COMMENTS IS  NULL

 

下一页

  • ◆ 相关内容