1、EnterpriseDB92安装文档EDB数据库软件安装EnterpriseDB 9.2安装文档 安装须知安装环境:目标机器RHEL6 64bit; 本地机器win7,采用Xmanager 图形化界面进行安装。安装用户权限:root。数据库版本:EnterpriseDB 9.2.1.3。 安装详细过程 首先传输对应版本的安装包到需要安装的机器上,进行解压。tar -zxvf ppasmeta-9.2.1.3-linux-x64.tar.gz 在Xmanager中查看目录中包含的文件,确认有一个.run的文件并执行该文件。 弹出界面,进入安装过程语言选择界面。 选择所需要的语言后点击”ok”,进
2、入安装程序的欢迎界面。 点击“前进”,进入用户软件授权协议界面。 选择“我接受此协议”,并点击“前进”,进入数据库软件安装路径选择界面。 选择好要安装的路径,并点击“前进”,进入安装组件选择界面。 选择所需要的安装组件,并点击“前进”,进入其他目录选择界面。 选择好数据文件和日志文件的路径后,点击“前进”,进入配置模式界面。 在配置模式界面内,可以选择Oracle兼容模式和PostgreSQL兼容模式,此处选择默认的Oracle兼容模式,并点击“前进”,进入口令设置界面。 输入超级用户的口令后,点击“前进”,进入其它配置界面。 选择服务器的默认监听端口和语言环境信息后(更改为en_us.utf
3、8),点击“前进”,进入数据库类型选择界面。 根据具体的环境和需求选择使用的模式,在专有模式下数据库能使用最多的系统资源,点击“前进”,进入工作负载类型选择界面。 根据具体情况选择工作负载类型,点击“前进”,进入高级选项配置界面。 根据具体情况,选择相关的配置后,点击“前进”,进入安装概述的界面。 确认安装概述文件符合自己的要求后,点击“前进”,进入安装过程的界面。安装完成后,点击“完成”,结束了数据库的安装。安装完成后,系统会建立一个enterprisedb的用户,修改该用户的密码:rootsystemdb ppasmeta-9.2.1.3-linux# passwd enterprised
4、bChanging password for user enterprisedb.New password: BAD PASSWORD: it is WAY too shortBAD PASSWORD: is too simpleRetype new password: passwd: all authentication tokens updated successfully. 修改数据目录下的pg_hba.conf文件# IPv4 local connections:host all all 127.0.0.1/32 md5添加一行数据:# IPv4 local connections:h
5、ost all all 127.0.0.1/32 md5host all all 0.0.0.0/0 md5EnterpriseDB 9.2命令行安装首先用FTP工具传输安装包到指定的主机:执行.run程序:注意为避免安装过程乱码,建议安装过程选择英文。接受条款:设置安装路径:选择安装的组件:根据具体情况,不需要时,可以不安装Infinite Cache,PEM client,slony Replication.其它路径的设置:兼容模式选择:口令选择:端口5444(图没截到)字符集选择zh_CN.utf8(修改为en_us.utf8)是否安装样例库:选择服务器类型模式:选择服务并进行安装前的确
6、认:开始安装:安装完成后,系统会建立一个enterprisedb的用户,修改该用户的密码:rootsystemdb ppasmeta-9.2.1.3-linux# passwd enterprisedbChanging password for user enterprisedb.New password: BAD PASSWORD: it is WAY too shortBAD PASSWORD: is too simpleRetype new password: passwd: all authentication tokens updated successfully.修改数据目录下的的
7、pg_hba.conf文件:# IPv4 local connections:host all all 127.0.0.1/32 md5添加一行数据:# IPv4 local connections:host all all 127.0.0.1/32 md5host all all 0.0.0.0/0 md5数据库参数调整1. postgresql.confPostgreSQL数据库的参数配置文件,编辑该文件可以调整数据库参数。注意修改有些参数需重启数据库,有些reload参数文件即可。shared_buffers 设置数据库将使用的共享内存缓冲区大小,推荐设为内存的20%-25%;同时,设置
8、这个参数时,要设置/etc/sysctl.conf中kernel.shmmax的值,为kernel.shmmax至少等于postgres shared_buffers + 32 MB。maintenance_work_mem声明在维护性操作(比如 VACUUM, CREATE INDEX, ALTER TABLE ADD FOREIGN KEY 等)中使用的最大的内存数,推荐设置为256M。fsync 默认为on,postgres会等待数据被写入硬盘,才会给query返回成功的信号。需根据应用特点进行调整。full_page_writes开启的时候,在checkpoint之后的第一次对page
9、的更改,postgres会将每 个disk page写入WAL。需根据应用特点进行调整。wal_buffers WAL的存储大小,推荐设为128K。checkpoint_segments 推荐设为30。checkpoint_timeout 推荐设为15分钟。max_connections 需根据应用特点进行调整,最高推荐2000。archive_mode 是否采用归档模式,设为on。wal_level = minimal 归档级别,设为archive。archive_command = cp -i %p /edb/archive_travel/%f。archive_timeout 推荐设为30
10、0s。autovacuum 是否自动启用VACUUM,推荐设为off。effective_cache_size 推荐设为内存的3/4。log_destination 设为stderr。log_directory 指定pg_log。log_filename 指定成alert_postgresql.log。log_line_prefix = %t %d %u %h。log_rotation_age 设为0。log_rotation_size 设为0。log_truncate_on_rotation 设为off。log_min_messages 设为fatal。log_min_error_state
11、ment 设为error。log_min_duration_statement 设为60000ms。log_statement 设为ddl。2. pg_hba.confEDB/PostgreSQL数据库的客户端认证文件,当用户尝试连接数据库时,系统会为每个连接顺序检查该文件中的记录。pg_hba.conf文件的常用格式是一组记录,每行一条,一条记录是由若干用空格和/或制表符分隔的字段组成,记录不能跨行存在。如:# TYPE DATABASE USER CIDR-ADDRESS METHOD# TYPE DATABASE USER IP-ADDRESS IP-MASK METHODTYPE参数的
12、说明如下:TYPE说明local这条记录匹配企图通过 Unix 域套接字进行的连接host这条记录匹配企图通过 TCP/IP 进行的连接hostssl记录匹配企图使用 TCP/IP 的 SSL 连接,但必须是使用 SSL 加密的连接hostnossl它只匹配那些在 TCP/IP 上不使用 SSL 的连接请求DATABASE参数说明:声明记录所匹配的数据库名称。值 all 表明该记录匹配所有数据库;值 sameuser 表示如果被请求的数据库和请求的用户同名,则匹配;值 samerole 表示请求的用户必须是一个与数据库同名的角色中的成员;或特定的 PostgreSQL 数据库名字,可以通过用逗
13、号分隔的方法声明多个数据库。USER参数说明:为这条记录声明所匹配的数据库用户。值 all 表明它匹配于所有用户,多个用户名可以通过用逗号分隔的方法声明。CIDR-ADDRESS参数说明:声明这条记录匹配的客户端机器的 IP 地址范围。这个字段只适用于 host, hostssl, hostnossl 记录。典型的CIDR-address举例:172.20.143.89/32表示一个主机,172.20.143.0/24表示一个小子网,10.6.0.0/16表示一个大子网。要声明单个主机,给IPv4地址声明CIDR掩码32,给IPv6地址声明128。不要在地址中省略结尾的0。IP-ADDRESS
14、、IP-MASK参数说明:这些方法可以用于作为 CIDR-address 表示法的替补。它不是声明掩码的长度,而是在另外一个字段里声明实际的掩码。些字段只适用于 host, hostssl, hostnossl 记录。METHOD参数说明如下:METHOD说明trust无条件地允许连接而不需要口令reject无条件地拒绝连接,常用于从一个组中过滤某些主机md5要求客户端提供一个 MD5 加密的口令进行认证password要求客户端提供一个未加密的口令进行认证ident获取客户的操作系统名然后检查该用户是否允许以要求的数据库用户进行连接,方法是参照在 ident 关键字后面声明的映射krb5用
15、Kerberos V5 认证用户,只有在进行 TCP/IP 连接的时候才能用ldap使用 LDAP 进行认证pam使用操作系统提供的可插入认证模块服务(PAM)来认证推荐设置:需设置本地登录、办公网段登录、NETIQ监控所在网段登录、应用服务器所在网段登录# TYPE DATABASE USER CIDR-ADDRESS METHOD# local is for Unix domain socket connections onlylocal all all trust# IPv4 local connections:host all all 127.0.0.1/32 md5host all
16、all 172.17.23.0/24 md5# IPv6 local connections:host all all :1/128 md5数据库相关脚本部署为了完成数据库全备、归档备份、日常空间回收、统计信息收集等工作,需部署相关脚本以完成上述功能。并将这些脚本放入postgreql安装用户的crontab中,并定时运行。目前,需要部署的脚本如下表所示:脚本名称功能执行频率执行时间backup_db.sh数据库全库备份每周一次每周日零时backup_wal.sh数据库归档备份每小时一次-vacuum_db.sh资源回收及统计信息收集每天一次视情况而定将上述脚本放入EDB安装用户的$EDBBI
17、N所指向的目录下,并修改脚本内关于数据库名称,服务器HOSTNAME,NBU POLICYNAME相关变量的值,确认无误后,放入CRONTAB内定时运行。附:分区表的使用1. EDB 分区表的功能EDB V92支持使用分区表,支持范围/列表两种分区方式,支持添加/删除/清空/交换/分裂/移动分区,并且可以为不同的分区指定不同的表空间。EDB分区表有以下优势:l 将数据分散到各个分区中,提高查询性能 l 提高分区表可管理性相比ORACLE而言,EDB分区表有以下劣势:l 分区表以及触发器以及约束实现,有额外性能损耗(CPU损耗)l 没有全局索引l 查询分区表的SQL语句有严格要求我们建议在单表数
18、据总行数超过2000W时采用分区表技术。2. EDB 分区表与SQL语句EDB V92虽然支持分区表,但对使用分区表的SQL语句有严格的要求,简单的说:l SQL语句中尽量使用分区键作为条件,并且分区键条件等号后面的值为常量l SQL语句不能出现分区表和它表关联/嵌套查询等反之,对于那些违反上述原则的SQL,EDB的查询优化器不能产生最优的执行计划(不能进行分区裁剪,不能命中正确的分区)原因有二:l 相比ORACLE而言,EDB 的优化器不具有动态分区裁剪功能(Dynamic Partition Pruning),若SQL语句中使用了嵌套查询/多表关联等情况时,不能选择正确的分区l 相比ORA
19、CLE而言,EDB分区表没有全局索引,会影响那些不按照分区条件作查询的SQL语句的相应时间例如:建立测试用范围分区表empinfo以及普通表details,两表按empid关联create table empinfo(empid int,name varchar2(30),departmentid int,age int,salary number(10,0),jointime varchar2(10) ,primary key (empid) partition by range (empid ) (partition p_1 values less than (10000001),part
20、ition p_2 values less than (20000001),partition p_3 values less than (30000001),partition p_4 values less than (40000001),partition p_5 values less than (50000001);create table details(empid int primary key ,cdate datetime,cnum int);我们推荐的查询分区表的SQL是:select * from empinfo where empid=xxxx其中,where 条件中应
21、当出现分区键,并且等号后面的值为常量。另外,以上述两表empinfo,details为例,列出的查询分区表主要其他几种方式:SQL语句是否命中分区备注select * from empinfo where empid=200;是使用常数查询select * from empinfo where empid 100;是范围查询select * from empinfo where empid =300 and name=ccc;是复合查询select * from empinfo where empid=to_number(1234);否使用函数select name,empid from empinfo where empid in (select distinct empid from details where empid=100);否嵌套查询select name,a.empid,cnum from empinfo a,details b where a.empid=b.empid and b.cdate=to_date(20130402,YYYYMMDD);否关联查询其中前三种查询SQL语句都能产生命中正确分区的查询计划。而后三种(使用函数/嵌套查询/关连查询)的SQL语句都不能产生最优的的查询计划。