数据库管理规范

数据库管理规范

一、总则

1.1 目的

为保障公司数据库安全、稳定、高效运行,特制定本规范。

1.2 名词解释

DBA:数据库管理员;

生产环境:本规范指已交付用户使用的应用系统环境;

1.3 适用范围

本规范适用于信息技术部;

二、数据库建设规范

2.1 数据库服务器配置:

OS与数据库存储空间部署于不同物理磁盘;

OS 安装在两块物理盘搭建而成的RAID1阵列;

?  数据库存储阵列配置根据业务配置,读多写少配置为RAID5+1,读少写多配置为RAID1

?  物理内存与数据库大小的比值不小于为15

CPU平均负载小于50%,峰值小于80%

2.2数据库配置:

MySQL部分:

?  生产环境和开发测试环境相互独立部署在不同的服务器;

?  一台环境服务器有且仅有一个数据库实例;

?  严禁用超级管理员创建数据库实例;

?  数据库字符集设置UTF8

?  数据库隔离级别设置为RC级别;

?  关闭数据库自动提交功能;

?  数据库引擎选择innodb

MYSQL安装优先选择源码安装;

MYSQL应选择免费的稳定社区版;

MySQL标准参数如下:

参数

设置标准

storage_engine

innodb

innodb_buffer_pool_size

50% OS MEMORY

innodb_log_file_size

30分钟切换一次

innodb_log_buffer_size

10M以内

innodb_thread_concurrency

单个CPU的核数

innodb_flush_log_at_trx_commit

1

sync_binlog

1

Innodb_file_per_table

1

binlog_format

ROW

slow_query_log

ON

long_query_time

10.000000

log_queries_not_using_indexes

ON

thread_cache_size

64M

 

Oracle部分:

?  生产环境和开发测试环境相互独立部署在不同的服务器;

?  一台环境服务器有且仅有一个数据库实例;

?  严禁用超级管理员创建数据库实例;

?  数据库字符集设置为AL32UTF8,国家字符集:AL16UTF16

?  控制文件、日志文件、数据文件应部署在不同的磁盘之中;

?  控制文件、日志文件至少保留三个副本;

?  数据库闪回功能应关闭;

?  数据库应置于归档模式运行;

?  数据库应置于专用服务器模式运行;

 

三、数据库运维规范               

3.1 数据库日常运维管理

3.1.1 日常巡检项目包括但不限于:备份是否成功、数据库服务器性能状态、数据库日志是否报错、数据库服务器硬件状态;

3.1.2 每月应出具数据库巡检月报,月报内容包括但不限于3.1.1项所列;

3.1.3 定期编译无效对象并清理无效、或者无用的数据库对象;

3.1.4 定期更新数据库性能统计信息;

3.1.5 应以二进制类型参数文件启动数据库;

3.1.6 定期分析数据库性能分析报告;

3.1.7 可以动态修改的全局参数禁止写入参数文件,但应该记录该参数状态;

 

3.2 数据库变更管理

3.2.1 数据库变更应由DBA做好备份后再执行变更脚本;

3.2.2 重大数据库数据库变更应一人操作一人监督;

3.2.3 数据库变更流程:

? 业务系统数据库对象变更:

 

? 数据库参数、版本变更:

 

 

四、数据库开发规范

4.1 业务系统对象命名规范

4.1.1 对象名称要求能表达对象用途,尽量采用英文标准翻译;对象名超过数据库长度限制的,可采用英文缩写;

4.1.2 对象名由且仅由字母和下划线 ”_”组成;

4.1.3 历史表以”_HIS” 结尾;

4.1.4 临时表以”_TMP” 结尾;

4.1.5 物化视图以”V_”打头,作为前缀;

4.1.6 索引以”IDX_” 打头;主键索引以”PK_” 打头,作为前缀;

4.1.7 序列以”SEQ_” 打头,作为前缀;

4.1.8 存储过程以”SP_”打头,作为前缀;

4.1.9 函数以”FC_”打头,作为前缀;

4.1.10 触发器以”TR_”打头,作为前缀;

 

4.2 数据库对象设计和SQL编写规范

4.2.1 数据库禁止使用PROCEDUREFUNCTIONPACKAGETRIGGERVIEW

4.2.2 SQL数据库保留字大写,其它部分如表名、字段小写;

4.2.3 SELECT后避免使用”*”,应使用具体的字段名;

4.2.5 INSERT语句之后表名需带字段名称;

4.2.6 批量操作数据时,禁止每INSERTUPDATEDELETE一行就COMMIT,应批量提交;

4.2.7 为重用SQL语句,应尽可能使用绑定变量;绑定变量定义数值类型应跟对应字段数据类型匹配;

4.2.8 EXISTSIN:子查询返回结果集比较小优先使用IN,反之用EXISTS

4.2.9 业务允许条件下,用union all 代替union

4.2.10 表字段不应有空值,如有空值,应以默认值填充;

4.2.11 每个表都应该建立主键;

4.2.12 定义字段尽可能使用变长的数据类型,内容长度不固定的字段排在表结构末;

4.2.13表结构字段顺序遵循按查询频率高低来排列;

4.2.14 尽可能把SQL语句简单化;

4.2.15 应把大字段如BLOBCLOB独立出单表;

4.2.16 SQL语句尽可能不使用复杂计算,应把复杂的计算放在应用服务器;

4.2.17 SQL语句应按结果集数量由少至多顺序执行的子查询;

4.2.18 子查询中避免使用order by,如需要,则必须放在主查询SQL末尾;

4.2.19 SQL语句格式:

?  应适当缩进,体现SQL语句的层级,例如:                               

SELECT object_name,

            object_type,

            owner,

            status

     FROM  dba_objects

WHERE  owner = 'TFS'

4.2.20 索引列使用约定:

?  避免在索引列上使用NOTIS NULLIS NOT NULL; 

?  避免在索引列上进行计算;

?  只在适合的列上创建索引,insertdeleteupdate频繁的表尽可能的减少索引数量;

?  数据量少于5000的表可不建索引;

DML频繁的表尽可能减少索引数量,单表索引数量少于5个;

?  避免使用函数索引;

4.2.21 数据库设计约定:

 

1.       每个表应考虑添加以下字段:


字段名称

数据类型

是否唯一

是否为空

默认值

数据格式

备注

ID

Varchar2(38)

Y

N

自动生成(兼容老版本GUID),作为表主键

Creator

NVARCHAR2(38)

N

N

创建人ID

Creator_name

NVARCHAR2(80)

N

Zhang San张三:工号

创建人姓名

Create_time

Date

N

N

2015/5/29 15:40:55

创建时间

modifier

NVARCHAR2(38)

N

N

修改人ID

Modifier_name

NVARCHAR2(80)

N

N

Li Si 李四:工号

修改人姓名

Update_time

Date

N

N

2015/5/29 15:48:48

修改时间


2.       包含以下单词的字段应尽量做如下定义:

字段名称

数据类型

是否唯一

是否为空

默认值

数据格式

备注

Loan_id

NVARCHAR2(38)

Y

N

贷款id

*_Remark

NVARCHAR2(250)

N

Y

备注

gender

NUMBER(1)

N

N

性别 1 2

*_State

NUMBER(1)

N

N

状态 取值0 1

*_Desc

NVARCHAR2(250)

N

Y

描述、说明



3.       关联表、字段命名:

如表A字段关联表B的字段col,则表A中的字段命名应为”B_col”

4.       多个表中重名的字段保持字段名和数据类型的一致性

如表A字段名称为A_ID,如B表中也是A_ID,则,A、B两表的这两个字段应有相同的数据类型


5.       每个子系统的表名应以该系统英文简称打头;

6.       字段名称与实际存放的数值应相匹配

如字段名称:

A_DATE 数据类型为时间格式数值,存放的数据格式为’yyyy-mm-dd’

B_TIME数据类型为时间格式数值,存放的数据格式为’yyyy-mm-dd hh24:mi:ss’

7.       存放地址的字段应拆分成addr1,addr2,addr3。Addr1 存:国家-省份-城市;addr2存:区-街道;addr3存:小区-楼栋-门牌号

8.       如字段存放电话号码,则格式如下:0755-88888888与13812345678,不允许为空,如业务实际没有提供,应以默认值填充:0000-00000000

9.       专业名词约定:


还款:Repayment

贷款:loan

利息:Interest

利率:Interest rate

罚息:Penalty

违约:Breach of contract

催收:collection

债权:creditor

合同:contract

申请:apply

费用:fee

信用:credit

审核:audit

风险:risk

准备金:reserve

签约:sign

4.3 数据库设计变更流程

4.3.1 TFS数据库设计开发流程图见如下:























4.3.2 dev库使用者为开发人员,test库使用者为测试组,preprod库使用者为业务部门;

4.3.3 从dev库生成的数据字典与ER图文件为V0版,文件名格式为

”子系统名称_dev_V0_20150610”,从test库生成的数据字典与ER图文件为

”子系统名称_test_V1_20150610”,从生产环境生产的数据字典与ER图文件为

”系统名称_prod_v2_20150610”。数据字典与ER图文件格式为:




4.3.4 设计人员向项目经理、DBA按以下文档格式提交表结构新增或变更文档。





4.3.5 提交数据表设计表格时,注明主外键关系。但在数据库中不添加外键。

4.3.6 两表之间关联的命名原则为:子表名称_REF_父表名称_父表字段。

 

4.4 数据库变更脚本书写规范

4.3.1 DDL操作脚本和DML操作脚本文件相,如脚本中涉及多个schema,应再按schema分成不同的文件。DDL脚本文件名以”_DDL.txt”结尾,DML脚本文件名互独立以”_DML.txt”结尾;

4.3.2 脚本内容头部中用以下格式注明本脚本内容:

/* 脚本负责人:                                                      */

 /* 脚本主要用途:                                                     */

 /* 用户模式/数据库:                                                  */

 /* 是否存在DELETEDROPUPDATETRUNCATE操作:                 */

 

4.3.3 操作脚本有执行顺序要求的,文件名以序列标识,序列小的文件为先执行,如:

“1_2015_05_01_新增字段_TFSDBUSER_DDL.txt”;

”2_2015_05_01_数据插入_TFSDBUSER_DML.txt”;

文件1较文件2先执行。

5.3.4 操作脚本中应按执行顺序自上而下编写;

五、数据库安全规范

5.1 数据库审计

5.1.1 数据库审计员与数据库管理员应相互独立;

5.1.2 关键数据库表的DMLDDL操作应做审计记录;

5.1.3 数据库的重大操作如失败登陆、起停、表空间变更、参数变更应审计记录;

 

5.2 数据库账号管理

5.2.1 数据库账号密码长度至少12位,包含大小写字母和数字;

5.2.2 数据库密码应定期修改,频度不低于半年每次;

5.2.3 数据库账号应只有以下四种类型:数据库管理员账号(syssystem)、业务系统管理员账号、业务系统连接数据库账号、数据库备份专用账号(backup)及特殊申请的查询账号,其它账号应锁定;

5.2.4 syssystembackup账号责任人为DBA;业务系统管理员账号、业务系统连接账号责任人为开发部主管;特殊申请的查询账号责任人为申请人;数据库账号责任人应负责账号密码安全,禁止向非授权人员泄露密码;

5.2.5 账号登陆失败超过10次时应锁定;

5.2.6 sys账号禁止通过客户端电脑连接数据库进行日常管理;

5.2.7 禁止开发人员和用户通过客户端工具连接生产环境数据库服务器;

 

5.3 数据库权限管理

5.3.1 业务系统管理账号用于存放业务系统数据库对象,可拥有CONNECTRESOURCE系统权限及本系统对象的DDLDML权限;

5.3.2 业务系统连接数据库账号用于业务系统访问数据库,可拥有CONNECT系统权限及本系统对象DML权限;

5.3.3 数据库权限以最小权限原则进行授权;

5.4 数据转移管理

5.4.1 数据库备份文件离开公司范围内时应得到主管领导审批;

5.4.2 产品环境数据导入开发测试环境后,应对敏感数据进行处理;

5.5 数据库服务器访问

5.5.1 数据库服务器应对访问IP进行限制,除应用服务器、管理员IP、授信IP可访问,其它IP禁止访问;

六、数据库备份恢复

6.1 数据库备份

6.1.1 数据库备份应异机保留3份副本,且保留期限为1年;

6.1.2 备份数据至少保存3个月,为节省存储空间,应及时删除3月之前的备份数据;金融相关的备份数据应至少保存5年;

6.1.3 每周对数据库进行0级备份,每天进行1级备份;

6.1.4 产品环境数据库应采取逻辑和物理备份两种方式保证数据安全;

6.1.5 非授权人员不能对备份数据进行访问;

6.1.6 因数据库变更需备份生成的备份文件,在确认数据库变更成功后可删除备份文件;

 

6.2 数据库恢复

6.2.1 应半年对备份数据进行恢复测试,验证备份文件的有效性;

6.2.2 数据丢失后应及时对数据库进行恢复,保证业务系统正常运行;

6.2.3 应定期对数据库进行灾难恢复演练及双机切换演练;

 

 

 

 

 

请使用浏览器的分享功能分享到微信等