第三章:数据库系统的规划

点击数:966发布日期:2020-04-19 14:39:40 来源:老鹰

第三章:数据库系统的规划

3.1前言

系统的成败取决于优秀的规划和实施。我们决定要使用Oracle数据库,接下来,就要规划这个服务系统。我是建议要从成熟度和稳定性上重点考虑。保证服务系统能照客户的计划和要求提供服务。别到时候三天两头的down机。即使要求7*24小时的服务能力,系统也能轻松应对。

操作系统也很重要,操作系统软件控制和协调计算机及外部设备,支持应用软件开发和运行的系统,主要功能是调度,监控和维护计算机系统;负责管理计算机系统中各种独立的硬件,使得它们可以协调工作。系统软件使得计算机使用者和其他软件将计算机当作一个整体而不需要顾及到底层每个硬件是如何工作的。系统软件的选型也要考虑可扩展性,将来资源不够用,我们可以横向加硬件。

总之将速度充分的体现在桌面上,让OLTP终端的使用者,不用等待介面的弹出,让OLAP的使用者,尽快的拿到结果报表。

3.2项目的考虑

充足的资源

稳健的服务系统,资源充足是关键,不能跑着跑着没内存了,CPU满了。但现在我们新买的硬件一般都配置较高,老的硬件跑新的软件有时候就资源不够了。CPU利用率高峰时期最好别超过70%。各CPU之间利用率应该负载均衡。

Oracle是很占内存的,11g RAC10g更占内存,有时候我们为了让速度更快,需要把整张表放在内存里面,减少I/O压力或根除I/O瓶颈。这时候更需要充足的内存资源。一般来说,内存大于8GB,我们就建议使用linuxunix操作系统了。有的用户买了64GB的内存,我们巡检的时候发现实际上才用了4GB,浪费了资源,充足的资源也没体现到速度上去。也有的就8GB内存装11g RAC,CPU内存经常满,参数已经设置的很合理了,但资源不够用,只能迁走一部分应用,把压力降下来。具体用多大的内存多少个CPU还是取决于系统的繁忙程度,并发数,这方面提前要计算好。

存储的考虑

存储的方式可以采用较成熟的文件系统,ASMASM10g推出的技术,10g的时候可以用祼设备,也可以用ASM10gvoteOCR盘不能放在ASM上,所以如果还用10g ASM,就得单独做2个或6个裸设备给voteOCR用。11g就完全解决了这个问题,况且11gR2抛弃了裸设备,只能用ASM或文件系统。当然了数据库的redo的日志最好不要放在RAID5RAID6上,最好放在RAID1,或RAID10上,提高频繁的写速度。存储级别划的lunASM用的时候,大小不能大于2TB,大于2TB的时候,Oracle软件容易出问题。一般我们买的物理盘也都小于2TB.在存储级别和数据库级别结合起来考虑I/O的分散。

生产库磁盘最好采用SAS2.0接口,转速15000/分的做为存储硬盘,充分保证I/O速度。以前在做调优项目的时候,有的瓶颈就是在I/O上,换高速盘提高I/O速度是一个解决思路,将常用的表和索引cache到内存里减少物理I/O也是一个解决思路。

存储使用两个存储,一个生产存储,一个备份存储。备份存储要求容量大,速度要求没有生产存储那么苛刻,可以采用SATA盘。

软件的版本

安装较成熟稳定的数据库版本,升级应用最新的patch。操作系统补丁要打齐,数据库补丁也一定要打全,最好补丁升级到最新,以保障系统的稳定性,也减少了再次升级补丁给系统带来的隐患。上次在联通做升级时,升级后发现速度提高了很多,看来升级不仅治bug,还能提高速度。数据库版本当然是在一开始在从零开始的时候就安装到最后的一个补丁,一开始就做的很好,不要弄到出事了再各种处理各种升级,亡羊补牢成本很高,风险也大。

数据库的版本这里也列一下,我们要安装这样的版本,数据库才能健康不出事少出事。

Oracle 8i要安装至8.1.7.4

Oracle9i要安装到9.2.0.8.7

Oracle10g要升级至10.2.0.5.12

Oracle11g安装11.2.0.4,然后打补丁至11.2.0.4.6

Oracle12c安装12.1.0.2.3windows12.1.0.2.4

11g的补丁还要更新,最新的补丁,在安装的时候去https://support.oracle.com上去下载。当然了下载补丁要有一个账号和密码,Oracle也是通过控制补丁来控制正版化。11g现在已经是很稳定的版本,目前新上的系统主要都是11g

12c因为是最新的大版本,目前上生产的还比较少,可能bug很多。如果思想比较超前上了12c,遇到新的问题,你要提交给Oracle去处理,成为bug的践行者。

实施的人员,一定要用这方面的技术专家,据我观察,大部分的安装实施由于工程师水平或责任心问题是不给客户安装小补丁的,甚至就装一个10.2.0.1就应付了事。甲方在项目规划期间也要强调版本补丁这个事儿。所以要考核实施人员的技术水平,杜绝选择了好的软件,而因为实施技术水平导致信息系统问题的发生。况且在实施的过程中,就必须完成系统调优的部分工作。把各个地方都设计的非常优化,到后期运维的时候,调优就省去或减少这些问题了。所以在设计规划期,就有调优的内容了。

操作系统

计算机软件中最基本的就是操作系统OS)。它是最底层的软件,它控制所有计算机运行的程序并管理整个计算机的资源,是计算机裸机与应用程序及用户之间的桥梁。没有它,用户也就无法使用某种软件或程序。 操作系统是计算机系统的控制和管理中心,从资源角度来看,它具有处理机、存储器管理、设备管理、文件管理等功能。

刚才说过,如果内存大于8GB,建议采用linuxunix操作系统,原因是:对于Oracle数据库来说,windows为单线程服务模式,而linux为多进程服务模式。进程比线程速度要快,进程比线程可控制性强。用户可以独享一个进程,一个用户进程就有一个操作系统进程对它专门服务,而线程我们就无法控制。进程比线程内存使利用率高,我们可以观察一下内存的利用率,有时候你内存再大,windows似乎用不上。再者说,人家银行业电信业用的全是unix至少是linux做关键服务。windows肯定有它的局限之处。有的用户买了96GB内存,安装一个windows操作系统,很难发挥它内存大的效能。windows实际占用内存只有8GBwindows上跑Oracle数据库出了故障有时候也不好定位处理。服务器主流操作系统还是linux,unix

从稳定性上分析,unix也更胜一筹,巡检的时候,运行5年没有重启的unix都常见。运行5年不重启的wondows确实不常见。稳定性unix强于linuxlinux强于windows

    Oracle RAC的节点数

    Oracle RAC理论上可以支持很多节点,10GB第二版可以支持100个节点,11g也一样。讨论理论上的最多可以支持的节点数已经没有太大的意义。实际上我们认为节点越多出故障的几率越大,管理维护成本越大。RAC用两个节点的用户最多,也有的用户使用4个节点或6个节点,甚至8个节点。再多的话,除了原厂,就没人建议用了,肯定不太好用。

    RAC本身又不能防止存储损坏,只能防止主机损坏。如果考虑横向扩展的话,负载均衡也有是条件的,不是随便拿一个应用连到RAC里面去,就可以实现负载均衡,负载均衡的条件是分开应用,几个节点各跑各的应用,各跑各的表,避免或减少交叉访问。如果就一个应用,必须交叉访问,那也行,但是你的压力不能太大,太大了就可能出现gc开头的等待事件,就又要做相应的调整。话又说回来,即然又压力不能太大,应用又很难分开,那做更多的节点就更没有必要了。所以说,RAC肯定不是节点越多越好。RAC的主要功能一是防止主机坏,二是解决CPU不够用的问题。

    如果单机够用就用单机,然后做一个物理DataGuard,即防主机坏又防存储坏,还可以应急容灾,11g DataGuard备库还可以当查询库。如果单机CPU不够用就做2个节点的RAC,尽量把应用分开,减少心跳线网络的压力。如果用户财力足,技术人员多,水平高,应用也多,又想集中管理,那可以做成4个或6个节点,节点多了也是对运维人员的一个煅炼与考验。

    备份和容灾

    数据库备份是必需的,不备份一旦出现问题,我们将无法或很难找回原来的数据,对企业的影响重大,损失可谓惨重,甚至是致命的。就算是我们个人的笔记本或台式机电脑,我也买两个2TB的大硬盘,养成定期备份的习惯,万一磁盘坏了,或笔记本坏了,我可以快速的再买一个电脑,将大硬盘里的关键数据拷回新买的电脑里,很快的就可以恢复工作,我多年积累的工作经验记录,方案,脚本,视频都还在,心里踏实。

    企业级的数据就更重要了,有可能重要到关乎企业生死,不但要备份,还要容灾,就算地震来了,火灾来了,洪水来了也不能毁坏我们的数据。我们要根据数据的重要程度,选择不同的备份和容灾方式。

    带用的备份方式:1RMAN备份,可以不用停机,可以恢复至数据库损坏的那一刻,做到一条数据也不丢。是我们最常用的备份恢复方式。2exp,impexpdp,impdp逻辑备份,特点是操作简单,只能恢复至开始备份的那一刻,对于备份之后变化的数据无能为力。常常做为数据迁移的方法。3、冷备,方法是关闭数据库,将数据文件,控制文件,redo日志,spfile,pfile,密码文件拷贝至另一个地方,恢复的方法是再拷贝回来,也可以做为数据库迁移的方法,实际备份中不常用。4、利用备份软件,使用nbucommvault等第三方软件调用RMAN命令,实现备份,第三方软件不仅可以备份数据库,还可以备操作系统,应用程序,介于综合备份的考虑,有的企业就选择备份软件了。

    制定备份策略,主要考虑下面几个方面,1、数据的重要程度,2、数据能不能再造,3、数据每天或每周的变化量有多大,4、数据的总量有多大,5、其它简单备份方式够不够用。以上几个问题搞清楚了,我们就知道了数据需要什么级别的备份容灾。省钱的备份办法就是RMAN定时做备份,其它重要可再造的程序定期手工拷贝走。操作系统,应用软件,数据库软件,都可以再造,重新安装就行了,不用备份也没关系,我们只备份核心的重要数据。对于变化量不大的应用程序,不做实时备份。























3.3项目的规划

    下面我们就一个两节点RAC数据库系统,做一个规划。

    3.3.1 硬件拓扑图


    3.3.2 操作系统安装规划

业务系统名称

数据库服务器

操作系统或软件

Linux

操作类型

Redhat Linux Enterprise Server 5.8

内核版本

2.6.18-308.el5

系统工具及服务需求

应用服务器中间件weblogic10

系统补丁包需求

参见官方安装文档

JDK

java version "1.6.0_22"

程序安装目录、数据空间目录

40GB

CPU个数

48

内存大小

64GB

数据库安装目录挂载点

/u01     大小为100GB

启动目录

/boot/    大小为1GB

Swap分区

32GB

备份存储挂载

/backup     大小为6TB


操作系统核心参数规划

fs.aio-max-nr = 1048576

fs.file-max = 6815744

kernel.shmall = 2097152

kernel.shmmax = 34359738368

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

net.ipv4.ip_local_port_range = 9000 65500

net.core.rmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048586


说明:kernel.shmall是很重要的参数,一般等于或大于物理内存的一半。


IP规划

主机

主机名

服务器型号

IP地址

VIP

Private IP

数据库服务器1

YS_DB_1

X3850

172.128.0.121

172.128.0.123

192.168.0.1

数据库服务器2

YS_DB_2

X3850

172.128.0.122

172.128.0.124

192.168.0.2



    3.3.3 数据库存储系统规划

采用单逻辑盘100GBASM管理数据库文件。

lun

用途

lun大小

RAID设置

设备类型

YS-lun01-01

rote,OCR

10GB

RAID6

ASM

YS-lun01-02

rote,OCR

10GB

RAID6

ASM

YS-lun01-03

rote,OCR

10GB

RAID6

ASM

YS-lun01-04

redo log

1000GB

RAID1

ASM

YS-lun01-05

data

1000GB

RAID6

ASM

YS-lun01-06

data

1000GB

RAID6

ASM

YS-lun01-07

data

1000GB

RAID6

ASM

YS-lun01-08

data

1000GB

RAID6

ASM

YS-lun01-09

index

1000GB

RAID6

ASM

YS-lun01-10

index

1000GB

RAID6

ASM

YS-lun01-11

index

1000GB

RAID6

ASM

YS-lun01-12

备用

1000GB

RAID6

ASM

YS-lun01-13

备用

1000GB

RAID6

ASM




  3.3.4 数据库安装规划

业务系统名称

核心生产

Oracle数据库版本

Oracle 11g企业版. 11.2.0.4.6

PSU

p20299013 (11.2.0.4.6)

GI PSU

p20485808 (11.2.0.4.6)

SPU(CPU)

p20299015_112040_Linux-x86-64.zip

Oracle安装基本目录ORACLE_BASE

/u01/app

数据库安装目录ORACLE_HOME

/u01/app/oracle/11.2.0.4

数据库名ORACLE_SID

ysdb

实例名1

ysdb1 核心生产应用使用

实例名2

ysdb2人力资源应用使用,财务应用使用

数据库字符集

ZHS16GBK

Process设置

1500

flash recovery area回闪区

不使用回闪区

enterprise manager企业管理器

不使用IE企业管理器em

数据文件自动扩展功能

关闭数据文件自动扩展功能,手工管理数据文件大小

数据存储格式,归档日志位置

dgdata,dgarch

db_block_size

8KB

内存管理方式

关闭自动内存管理功能,手工管理内存大小

统计信息收集

关闭,定期手工收集统计信息

不安装数据库选件

Oracle JVM,Oracle XML DB,Oracle Multimedia,

不安装数据库选件

Oracle Application Eepress,Oracle Text, Oracle OLAP

不安装数据库选件

Oracle Spatial, Enterprise Manager Repository

Redo日志组数大小

每个thread 4组,合计8组,每个组员400MB.

数据文件大小

system,sysaux,user表空间,每个数据文件4GB

数据文件大小

temp,undo,和其它所有数据文件每个16GB

归档模式

打开,归档日志放在ASM中的arch磁盘组。


重要数据库参数设置如下:

参数

参数值

db_cache_size            

26GB

shared_pool_size               

4GB

java_pool_size                 

40MB

large_pool_size                

200MB

log_buffer                   

60MB

pga_aggregate_target           

4GB

sga_max_size                 

40GB

sga_target                

0

session_cached_cursors         

200

processes                    

1500

undo_management            

AUTO

undo_retention               

18000

db_writer_processes      

16

open_cursors                 

1000


具体的安装步聚请参照官方文档:

Oracle® Grid Infrastructure

Installation Guide

11g Release 2 (11.2) for Linux

E17212-08

Oracle® Database

Installation Guide

11g Release 2 (11.2) for Linux

E16763-06

DBA要会使用官方文档,快速的查资料,查命令。


3.3.4数据库备份策略

在归档模式下,数据库采取每天全备的方式。

备份路径

此挂载点需要200GB空间,并且不和其它数据文件同在一个vg/backup/ysdb/rmanbak

备份策略,

每周全备。

backup_dbfull.rcv

将以下脚本加到定时任务中,实现每天全备。

run {

backup database include current controlfile;

backup archivelog all delete all input;

}

RMAN备份

的参数设置。

configure backup optimization on;

configure channel device type disk format

 '/backup/ysdb/rmanbak/db_%u';

configure controlfile autobackup on;

configure controlfile autobackup format for device type disk to '/backup/ysdb/rmanbak/cf_%f';

configure retention policy to recovery window of 21 days;

configure default device type to disk;

configure device type disk backup type to compressed backupset;

定时任务

设置

crontab –l每天零晨1点钟全备。

0 1 * * *  sh /home/oracle/backupfull.sh

Backupfull.sh

脚本

set NLS_LANG=american >/dev/null 2>&1

export ORACLE_SID=ysdb1 >/dev/null 2>&1

rman target /  nocatalog  @backup_dbfull.rcv log /backup/ysdb/rmanbak/backup_dbfull_`date -u +%Y%m%d`.log  >/dev/null 2>&1


图文推荐