数据库调整和优化: Slony

Posted on

数据库调整和优化: Slony-I

首页 » 数据库调整和优化 » Slony-I

Slony-I

简介 类似项目(25) 新闻(0) 讨论区(0)

Slony-I可以来实现PostgreSQL数据库的主从复制。

下面是Slony-I 的安装配置简明指南,实现主副数据库的同步。后面我会再介绍Pgbouncer的安装和配置

  1. 主副数据库机器 Master: hostname: M_DB inet addr:10.0.0.11 OS: Linux 2.6.9-42.ELsmp CPU:Intel(R) Xeon(R) CPU L5320 @ 1.86GHz MemTotal: 254772 kB PgSQL: postgresql-8.3.0 Slave: hostname:S_DB inet addr:10.0.0.12 OS: Linux 2.6.9-42.ELsmp CPU:Intel(R) Xeon(R) CPU L5320 @ 1.86GHz MemTotal: 514440 kB PgSQL: postgresql-8.3.0 /#在M_DB和S_DB上安装postgresql-8.3.0, 安装和配置过程参见我的上一篇Blog,确保超级用户是postgres,数据库名是URT。 /#检查M_DB和S_DB上的超级用户postgres是否可以访问对方的机器 /#分别在M_DB和S_DB上执行 sudo -u postgres /home/y/pgsql/bin/createlang plpgsql URT /#分别在M_DB和S_DB上的URT数据库里创建相同的表accounts。
  2. 安装Slony-I /#分别在M_DB和S_DB上安装Slony-I tar xfj slony1-1.2.13.tar.bz2 cd slony1-1.2.13 ./configure –with-pgconfigdir=/home/y/pgsql/bin gmake all sudo gmake install
  3. Slony Config 创建urtreplica_init.sh文件: /#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/# /#!/bin/sh SLONIK=/home/y/pgsql/bin/slonik /#slonik可执行文件位置 CLUSTER=URT /#你的集群的名称 SET_ID=1 /#你的复制集的名称 MASTER=1 /#主服务器ID HOST1=M_DB /#源库IP或主机名 DBNAME1=URT /#需要复制的源数据库 SLONY_USER=postgres /#源库数据库超级用户名 SLAVE=2 /#从服务器ID HOST2=S_DB /#目的库IP或主机名 DBNAME2=URT /#需要复制的目的数据库 PGBENCH_USER=postgres /#目的库用户名 $SLONIK <<_EOF /#这句是定义集群名 cluster name = $CLUSTER; /#这两句是定义复制节点 node $MASTER admin conninfo = 'dbname=$DBNAME1 host=$HOST1 user=$SLONYUSER '; node $SLAVE admin conninfo = 'dbname=$DBNAME2 host=$HOST2 user=$PGBENCH_USER '; /#初始化集群和主节点,id从1开始,如果只有一个集群,那么肯定是1 /#comment里可以写一些自己的注释,随意 init cluster ( id = $MASTER, comment = 'Primary Node' ); /#下面是从节点 store node ( id = $SLAVE, comment = 'Slave Node' ); /#配置主从两个节点的连接信息,就是告诉Slave服务器如何来访问Master服务器 /#下面是主节点的连接参数 store path ( server = $MASTER, client = $SLAVE, conninfo = 'dbname=$DBNAME1 host=$HOST1 user=$SLONY_USER '); /#下面是从节点的连接参数 store path ( server = $SLAVE, client = $MASTER, conninfo = 'dbname=$DBNAME2 host=$HOST2 user=$PGBENCH_USER '); /#设置复制中角色,主节点是原始提供者,从节点是接受者 store listen ( origin = $MASTER, provider = 1, receiver = 2 ); store listen ( origin = $SLAVE, provider = 2, receiver = 1 ); /#创建一个复制集,id也是从1开始 create set ( id = $SET_ID, origin = $MASTER, comment = 'All pgbench tables' ); /#向自己的复制集种添加表,每个需要复制的表添加一条set命令,id从1开始,逐次递加,步进为1; /#fully qualified name是表的全称:模式名.表名 /#这里的复制集id需要和前面创建的复制集id一致 set add table ( set id = $SET_ID, origin = $MASTER, id = 1, fully qualified name = 'public.accounts', comment = 'Table accounts' ); _EOF /#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/# /#在M_DB或者S_DB上执行 ./urt_replica_init.sh
  4. Slony Start 创建Master.slon文件: /#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/# cluster_name="URT" conn_info="dbname=URT host=M_DB user=postgres" /#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/# 创建Slave.slon文件: /#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/# cluster_name="URT" conn_info="dbname=URT host=S_DB user=postgres" /#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/# /#在M_DB上执行 /home/y/pgsql/bin/slon -f master.slon >> master.log & /#在S_DB上执行 /home/y/pgsql/bin/slon -f slave.slon >> slave.log &
  5. Slony Subscribe 创建urtreplica_subscribe.sh文件: /#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/# /#!/bin/sh SLONIK=/home/y/pgsql/bin/slonik /#slonik可执行文件位置 CLUSTER=URT /#你的集群的名称 SET_ID=1 /#你的复制集的名称 MASTER=1 /#主服务器ID HOST1=M_DB /#源库IP或主机名 DBNAME1=URT /#需要复制的源数据库 SLONY_USER=postgres /#源库数据库超级用户名 SLAVE=2 /#从服务器ID HOST2=S_DB /#目的库IP或主机名 DBNAME2=URT /#需要复制的目的数据库 PGBENCH_USER=postgres /#目的库用户名 $SLONIK <<_EOF /#这句是定义集群名 cluster name = $CLUSTER; /#这两句是定义复制节点 node $MASTER admin conninfo = 'dbname=$DBNAME1 host=$HOST1 user=$SLONYUSER'; node $SLAVE admin conninfo = 'dbname=$DBNAME2 host=$HOST2 user=$PGBENCH_USER '; /#提交复制集 subscribe set ( id = $SET_ID, provider = $MASTER, receiver = $SLAVE, forward = no); _EOF /#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/# /#在M_DB或者S_DB上执行 ./urt_replica_subscribe.sh
  6. 测试 修改M_DB上URT数据里的accounts表,S_DB上的accounts表也会随之改变

开发语言: 不详 收录时间:2008年10月06日 主页:http://wap.oschina.net/home/goweb?url=http%3A%2F%2Fwww.slony.info%2F 文档:http://wap.oschina.net/home/goweb?url=http%3A%2F%2Fwww.slony.info%2Fdocumentation%2F%0A 下载:http://wap.oschina.net/home/goweb?url=http%3A%2F%2Fwww.slony.info%2Fdownloads%2F 网友评论(0)

帐号: 密码: 注册新帐号 不能超过250个字

快速通道:首页|新闻|项目|讨论区 开源中国社区(OsChina.NET) 2009/10/26 星期一 14:12 进入Web版

如何写这个sql语句 _Oracle数据库管理_ITPUB论坛

Posted on

如何写这个sql语句 _Oracle数据库管理_ITPUB论坛-it168旗下专业技术社区

  • 用户名
  • UID
  • Email

登录 后使用快捷导航 没有帐号?注册

ITPUB论坛

用户名 自动登录 找回密码 密码 登录 注册

QQ登录

只需一步,快速开始

快捷导航

ITPUB论坛 论坛 ≡ 数据库技术 ≡ Oracle数据库管理 如何写这个sql语句?

分享到 转发到新浪微博 转贴到开心网 转贴到淘宝 转帖到人人网 转贴到推特 转贴到Facebook

查看: 9463|回复: 26 收藏 打印 上一主题 下一主题

如何写这个sql语句? [复制链接]

xallan

xallan 当前离线 UID4218阅读权限10帖子79精华贴数0技术排名12897技术积分194社区排名20989社区积分6注册时间2001-12-28

查看详细资料 IP卡 狗仔卡

注册会员

一般会员

精华贴数0技术积分194社区积分6注册时间2001-12-28 论坛徽章:1

授权会员
日期:2005-10-30 17:05:33

发表于 2003-2-20 22:06:25 |只看该作者 |倒序浏览

表dept, emp 要得到如下结果

deptno, dname, employees

10, accounting, clark;king;miller 20, research, smith;adams;ford;scott;jones 30, sales, allen;blake;martin;james;turners 也就是,每个dept的employee串起来作为一条记录返回。 怎么用一条sql语句完成? 3x 收藏收藏0 使用道具 举报 **

jaunt 当前离线 UID7292阅读权限100帖子12195精华贴数4技术排名68技术积分22560社区排名1177社区积分1370注册时间2002-2-27

查看详细资料 IP卡 狗仔卡

版主

版主

精华贴数4技术积分22560社区积分1370注册时间2002-2-27 论坛徽章:13

ITPUB元老
日期:2005-02-28 12:57:002011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:01会员2006贡献徽章
日期:2006-04-17 13:46:34管理团队2006纪念徽章
日期:2006-04-16 22:44:45授权会员
日期:2005-10-30 17:05:33管理团队成员
日期:2011-05-07 01:45:08

发表于 2003-2-21 08:45:37 |只看该作者

Sorry,没看清题目,给了个错答案。:P 使用道具 举报 **

xallan

xallan 当前离线 UID4218阅读权限10帖子79精华贴数0技术排名12897技术积分194社区排名20989社区积分6注册时间2001-12-28

查看详细资料 IP卡 狗仔卡

注册会员

一般会员

精华贴数0技术积分194社区积分6注册时间2001-12-28 论坛徽章:1

授权会员
日期:2005-10-30 17:05:33

发表于 2003-2-21 09:00:29 |只看该作者

我想到了一个办法,用function,可以解决这个问题。但是,如果只用sql,是不是无法实现这种功能? 使用道具 举报 **

riosinph 当前离线 UID14302阅读权限10帖子4898精华贴数1技术排名1505技术积分1661社区排名519社区积分4324注册时间2002-6-21

查看详细资料 IP卡 狗仔卡

注册会员

New Human

精华贴数1技术积分1661社区积分4324注册时间2002-6-21 论坛徽章:2

授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34

发表于 2003-2-21 09:26:47 |只看该作者

select dept.deptno, dept.dname, emp.employee from dept,emp where instr(dept.employees,emp.employee)>0 ......... 使用道具 举报 **

xallan

xallan 当前离线 UID4218阅读权限10帖子79精华贴数0技术排名12897技术积分194社区排名20989社区积分6注册时间2001-12-28

查看详细资料 IP卡 狗仔卡

注册会员

一般会员

精华贴数0技术积分194社区积分6注册时间2001-12-28 论坛徽章:1

授权会员
日期:2005-10-30 17:05:33

发表于 2003-2-21 11:27:20 |只看该作者

不能不承认,还是老外厉害。 我在otn上也问了同样的问题。 很快有人说用plsql写个存储过程,后来我又问纯粹用sql行不行,有个牛人很快回答了: Well if you have a thoretical maximum, which I would assume you would given the legibility of listing hundreds of employees in the way you describe then yes. But the SQL needs to use the LAG function for each employee, hence a hundred emps a hundred LAGs, so kind of bulky. This example uses a max of 6, and would need more cut n pasting to do more than that. SQL> select deptno, dname, emps 2 from ( 3 select d.deptno, d.dname, rtrim(e.ename ||', '|| 4 lead(e.ename,1) over (partition by d.deptno 5 order by e.ename) ||', '|| 6 lead(e.ename,2) over (partition by d.deptno 7 order by e.ename) ||', '|| 8 lead(e.ename,3) over (partition by d.deptno 9 order by e.ename) ||', '|| 10 lead(e.ename,4) over (partition by d.deptno 11 order by e.ename) ||', '|| 12 lead(e.ename,5) over (partition by d.deptno 13 order by e.ename),', ') emps, 14 row_number () over (partition by d.deptno 15 order by e.ename) x 16 from emp e, dept d 17 where d.deptno = e.deptno 18 ) 19 where x = 1 20 / DEPTNO DNAME EMPS


 10 ACCOUNTING  CLARK, KING, MILLER
 20 RESEARCH    ADAMS, FORD, JONES, ROONEY, SCOTT, SMITH
 30 SALES       ALLEN, BLAKE, JAMES, MARTIN, TURNER, WARD

打算踏踏实实看看书. 使用道具 举报 **

rain11er 当前离线 UID15894阅读权限100帖子872精华贴数4技术排名915技术积分2504社区排名3702社区积分186注册时间2002-7-9

查看详细资料 IP卡 狗仔卡

版主

无头衔

精华贴数4技术积分2504社区积分186注册时间2002-7-9 论坛徽章:44

咸鸭蛋
日期:2011-09-14 08:46:372011新春纪念徽章
日期:2011-01-25 15:41:012010广州亚运会纪念徽章:自行车
日期:2011-01-05 12:55:012010广州亚运会纪念徽章:跆拳道
日期:2010-11-16 19:05:232010广州亚运会纪念徽章:手球
日期:2010-10-19 22:02:342010世博会纪念徽章
日期:2010-10-05 15:10:582010世博会纪念徽章
日期:2010-08-08 20:44:572010年世界杯参赛球队:丹麦
日期:2010-08-05 21:25:402010年世界杯参赛球队:塞尔维亚
日期:2010-06-11 15:41:582010年世界杯参赛球队:阿根廷
日期:2010-06-07 12:53:082011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:42:15

发表于 2003-2-21 12:38:26 |只看该作者

peifu,peifu 使用道具 举报 **

nyfor

nyfor 当前离线 UID4613阅读权限100帖子5403精华贴数8技术排名168技术积分10935社区排名1592社区积分824注册时间2002-1-6

查看详细资料 IP卡 狗仔卡

版主

精华贴数8技术积分10935社区积分824注册时间2002-1-6 论坛徽章:57

生肖徽章2007版:羊
日期:2008-11-14 14:42:19鲜花蛋
日期:2011-05-10 13:02:48紫蛋头
日期:2011-05-10 13:03:01灰彻蛋
日期:2011-05-10 13:03:12迷宫蛋
日期:2011-05-10 13:03:40蛋疼蛋
日期:2011-05-10 13:03:56复活蛋
日期:2011-05-10 13:04:092010广州亚运会纪念徽章:三项全能
日期:2011-05-19 21:32:30复活蛋
日期:2011-08-06 08:59:05茶鸡蛋
日期:2011-05-10 13:02:38咸鸭蛋
日期:2011-05-10 13:02:27生肖徽章2007版:牛
日期:2009-03-02 15:43:25

发表于 2003-2-21 13:01:54 |只看该作者

参见此帖做法,使用PL/SQL代码实现: http://www.itpub.net/showthread.php?threadid=96853 使用道具 举报 **

xallan 当前离线 UID4218阅读权限10帖子79精华贴数0技术排名12897技术积分194社区排名20989社区积分6注册时间2001-12-28

查看详细资料 IP卡 狗仔卡

注册会员

一般会员

精华贴数0技术积分194社区积分6注册时间2001-12-28 论坛徽章:1

授权会员
日期:2005-10-30 17:05:33

发表于 2003-2-21 13:27:24 |只看该作者

是的,写个function比较简单也挺好用。我最后也是用的function,而没有用那个lead函数,但他们还是挺牛。 使用道具 举报 **

xizi812

xizi812 当前离线 UID33612阅读权限10帖子37精华贴数0技术排名18274技术积分128社区排名30307社区积分3注册时间2003-1-3

查看详细资料 IP卡 狗仔卡

注册会员

一般会员

精华贴数0技术积分128社区积分3注册时间2003-1-3 论坛徽章:0

发表于 2003-2-22 10:07:58 |只看该作者

佩服!!牛!! 使用道具 举报 **

snowsun 当前离线 UID10589阅读权限10帖子297精华贴数0技术排名4121技术积分650社区排名5739社区积分80注册时间2002-4-26

查看详细资料 IP卡 狗仔卡

注册会员

笨牛

精华贴数0技术积分650社区积分80注册时间2002-4-26 论坛徽章:1

授权会员
日期:2005-10-30 17:05:33

发表于 2003-2-22 13:24:11 |只看该作者

谢天谢地,我正在为这个东东老火,没有想到楼主也遇到了. 扎扎实实的学了一招. 使用道具 举报 **

123下一页返回列表 发新帖 高级模式

B Color Image Link Quote Code Smilies

您需要登录后才可以回帖 登录 | 注册

发表回复 回帖后跳转到最后一页

浏览过的版块

CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
积分 0, 距离下一级还需 积分 回顶部

≡ 数据库技术 ≡

用BCV备份Oracle数据库

Posted on

用BCV备份Oracle数据库

用BCV备份Oracle数据库 BCV(业务连续卷)是Business Continuance Volume的简写,EMC的产品TimeFinder的理念。可用于海量数据库的备份和测试库的建立等。 对海量数据进行备份的挑战之一就是对产品库系统的影响。如果采用传统方法,其备份周期,数据库文件处于热备份的时间会很长,备份期间会严重影响系统性能。 而BCV备份采用磁盘同步,磁盘分割更底层的方式,使数据库热备份在几分钟就可以完成。 采用BCV备份的步骤如下 1)Resynch BCVs with Production 2)Put Production Databases in Hot Backup Mode 3)Split BCV 4)Take Production Databases out of Hot Backup Mode 分割完毕后的BCVs,可以将数据备份到磁带上,再与Production同步。也可以挂载在其他主机上进行恢复,建立测试数据库。 公司中多个TB级的数据库备份的第2到第4步,都在15分钟以内完成。

Oracle 连接错误;ORA

Posted on

Oracle 连接错误;ORA-27101 shared memory realm does not exist讨论第2页 - PostgreSQL - Tech - ITeye论坛

您还未登录 ! 我的应用 登录 注册

ITeye-最棒的软件开发交流社区

论坛首页综合技术版PostgreSQL

Oracle 连接错误;ORA-27101: shared memory realm does not exist

全部 Database Haskell Erlang FP Linux 数据结构和算法 mysql oracle DB2 SQLServer PostgreSQL MacOSX Unix 编程综合 OS

最成熟稳定甘特图控件,支持Java和.Net

« 上一页 1 2 下一页 » 浏览 7550 次 主题:Oracle 连接错误;ORA-27101: shared memory realm does not exist

精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0) 作者 正文 * someone

  • 等级: 二星会员
  • someone的博客
  • 性别:
  • 文章: 179
  • 积分: 180
  • 来自: 中国
  • 发表时间:2010-09-30

< > 猎头职位:好多年前也遇到过这个错误,当时的解决办法是 把oracle的服务的登录用户改为某个域用户(这个域用户在该机器的管理员组), 然后重新启动就可以了。 根本原因未知。 返回顶楼 回帖地址

0 0 请登录后投票 * TeddyWang

  • 等级: 初级会员
  • TeddyWang的博客
  • 性别:
  • 文章: 76
  • 积分: 30
  • 来自: 深圳
  • 发表时间:2010-09-30

原因是没有那个instance,好好确认一下PATH、ORACLE_SID、ORACLE_HOME的値 返回顶楼 回帖地址

0 0 请登录后投票 * zgdhj95

  • 等级: 初级会员
  • zgdhj95的博客
  • 文章: 21
  • 积分: 52
  • 来自: ...
  • 发表时间:2010-10-05

用下面的法子应该可以: a) 开始-运行,输入 sqlplus /nolog,回车 b) 输入 conn sys/password@orcl as sysdba,回车 c) 输入startup 回车 然后等数据库启动结束,就应该好了。 返回顶楼 回帖地址

0 0 请登录后投票 * kzwang

  • 等级: 初级会员
  • kzwang的博客
  • 性别:
  • 文章: 2
  • 积分: 60
  • 来自: 乌鲁木齐
  • 发表时间:2010-10-07

数据库没有启动 startup 就好了 返回顶楼 回帖地址

0 0 请登录后投票

« 上一页 1 2 下一页 » 论坛首页综合技术版PostgreSQL 跳转论坛:Java编程和Java企业应用 Web前端技术 移动编程和手机应用开发 C/C++编程 Ruby编程 Python编程 PHP编程 Flash编程和RIA Microsoft .Net 综合技术 软件开发和项目管理 行业应用 入门讨论 招聘求职 海阔天空

© 2003-2011 ITeye.com. [ 京ICP证110151号 ]

Oracle分区功能提高应用程序性能

Posted on

Oracle分区功能提高应用程序性能

您的位置:九网互联->oracle数据库

Oracle分区功能提高应用程序性能

添加时间:2007-4-22  Oracle 分区功能可以提高许多应用程序的可管理性、性能与可用性。通过分区功能,可以将表、索引和索引组织表进一步细分为段,从而能够更精确地管理和访问这些数据库对象。Oracle 提供了种类繁多的分区方案以满足每种业务要求。而且,因为在 SQL 语句中分区是完全透明的,所以该功能几乎可应用于任何应用程序。 分区功能的优势 分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。通常,分区可以使某些查询以及维护操作的性能大大提高。此外,分区还可以极大简化常见的管理任务。通过分区,数据库设计人员和管理员能够解决前沿应用程序带来的一些难题。分区是构建千兆字节数据系统或超高可用性系统的关键工具。 分区功能的基本知识 分区功能能够将表、索引或索引组织表进一步细分为段。这些数据库对象的段叫做分区。每个分区有自己的名称,还可以选择自己的存储特性。从数据库管理员的角度来看,一个分区后的对象具有多个段,这些段既可进行集体管理,也可单独管理。这就使数据库管理员在管理分区后的对象时有相当大的灵活性。但是,从应用程序的角度来看,分区后的表与非分区表完全相同,使用 SQL DML 命令访问分区后的表时,无需任何修改。 表的分区是通过“分区键”来实现的,分区键指的是一些列,这些列决定了某一行所在的分区。Oracle 数据库 10g 提供了六项技术用于对表进行分区: 范围分区 每个分区都由一个分区键值范围指定(对于一个以日期列作为分区键的表,“2005 年 1 月”分区包含分区键值为从“2005 年 1 月 1 日”到“2005 年 1 月 31 日”的行)。 列表分区 每个分区都由一个分区键值列表指定(对于一个地区列作为分区键的表,“北美”分区可能包含值“加拿大”“美国”和“墨西哥”)。 散列分区 将散列算法用于分区键来确定指定行所在的分区。 组合范围散列分区 范围和散列分区技术的组合,通过该组合,首先对表进行范围分区,然后针对每个单独的范围分区再使用散列分区技术进一步细分。索引组织表只能进行范围分区。 组合范围列表分区 范围和列表分区技术的组合,通过该组合,首先对表进行范围分区,然后针对每个单独的范围分区再使用列表分区技术进一步细分。索引组织表可以按范围、列表或散列进行分区。 Oracle 数据库 10g 还提供了三种类型的分区索引: 本地索引 本地索引是其分区方式与其所在基础表的分区方式一模一样的索引。本地索引的每个分区仅对应于其所在基础表的一个分区。 全局分区索引 全局分区索引是使用不同于其所在表的分区键进行分区的索引,其所在表可以是分区表或非分区表。全局分区的索引可以使用范围或散列分区进行分区。例如,某个表可以按月份进行范围分区,因此具有十二个分区,而该表上的索引则可以使用不同的分区键进行范围分区,从而具有不同的分区数量。 全局非分区索引 全局非分区索引基本上和非分区表的索引一样。索引结构是不分区的。 Oracle 提供了一系列丰富的技术,可用于对表、索引和索引组织表进行分区,因此可以针对任何业务环境中的任何应用程序进行最佳的分区 Oracle 还提供一套完整的 SQL 命令,用于管理分区表。其中包括添加新分区、删除分区、分拆分区以及合并分区的命令。 用分区功能提高可管理性 通过 Oracle 分区功能,可将表和索引分成更多、更小的可管理单元,从而使数据库管理员能以“化整为零,个个击破”的方式管理数据。 使用分区功能,维护操作可集中于表的特定部分。例如,数据库管理员可以只对表的一部分做备份,而不必对整个表做备份。对整个数据库对象的维护操作,可以在每个分区的基础上进行,从而将维护工作分解成更容易管理的小块。 利用分区功能提高可管理性的一个典型用法是支持数据仓库中的‘滚动视窗’加载进程。假设数据库管理员每周向表中加载新数据。可以对该表进行范围分区,使每个分区包含一周的数据。这样加载进程只是简单地添加新的分区。添加一个分区的操作比修改整个表效率高很多,因为 DBA 不需要修改任何其他分区。 用分区功能提高性能 由于限制了所检查或操作的数据数量,同时支持并行任务执行,Oracle 分区功能实现了性能上增益。这些特性包括: 分区修整 分区修整是用分区功能提高性能的最简单最有价值的手段。分区修整常常能够将查询性能提高几个数量级。例如,假设某个应用程序包含一个存储订单历史记录的 Orders 表,并且此表已按周分区。查询一周的订单只需访问该订单表的一个分区。如果该订单表包含两年的历史记录,这个查询只需要访问一个分区而不是一百零四个。该查询的执行速度因为分区修整而有可能快一百倍。分区修整能与所有其他 Oracle 性能特性协作。Oracle 能将分区修整功能与任何索引技术、联接技术或并行访问方法结合使用。 分区智能联接 分区功能可以通过称为分区智能联接的技术提高多表联接的性能。当两个表要联接在一起,而且每个表都用联接键来分区时,就可以使用分区智能联接。分区智能联接将大型联接分解成较小的发生在各个分区间的联接,从而用较少的时间完成全部联接。这就给串行和并行的执行都能带来显著的性能改善。 用分区功能提高可用性 分区的数据库对象具有分区独立性。该分区独立性特点可能是高可用性战略的一个重要部分,例如,如果分区表的一个分区不能用,但该表的所有其他分区仍然保持在线并可用。那么这个应用可以继续针对该分区表执行查询和事务处理,只要不是访问不可用的分区,数据库操作仍然能够成功运行。 数据库管理员可以指定各分区存放在不同的表空间里,从而让管理员隔离其它表分区针对单个分区进行备份与恢复操作。还有,分区功能可以减少计划停机时间。由于分区功能改善了性能,使数据库管理员能用相对较少的时间完成大型数据库对象的维护工作。 未来发展方向 自从引入分区技术以来,Oracle 公司在每次推出重要版本时都会增加新的分区方法。Oracle8 引入了范围分区功能,Oracle8i 引入了散列和组合范围散列分区功能,Oracle9i 引入了列表分区功能。在最新版本 Oracle 数据库 10g 中,则增强了用于索引组织表和全局分区索引的分区策略,并且扩展了其用于所有分区维护操作的并发索引维护功能。Oracle 公司致力于不断完善分区技术,确保满足所有的业务需求。 结论 具有 Oracle 分区功能的 Oracle 数据库 10g 可以显著增强几乎任何数据库应用程序的可管理性、性能和可用性。分区功能可用于前沿应用程序,分区功能确实能够成为保障这些应用程序成功的关键技术成分。同时,分区功能也可用于较为普通的数据库应用,来简化这些应用的管理工作,降低管理成本。

相关文章

请您留言 收藏:Oracle分区功能提高应用程序性能