??xml version="1.0" encoding="utf-8" standalone="yes"?>91精品国产高清自在线,精品久久久久久中文字幕,视频在线观看你懂的http://www.aygfsteel.com/lz408925352/category/45758.htmlzh-cnWed, 05 Jan 2011 22:02:52 GMTWed, 05 Jan 2011 22:02:52 GMT60q行效率高稳定性好的大型网站系l架构分?/title><link>http://www.aygfsteel.com/lz408925352/articles/342379.html</link><dc:creator>沉香江南</dc:creator><author>沉香江南</author><pubDate>Wed, 05 Jan 2011 13:29:00 GMT</pubDate><guid>http://www.aygfsteel.com/lz408925352/articles/342379.html</guid><wfw:comment>http://www.aygfsteel.com/lz408925352/comments/342379.html</wfw:comment><comments>http://www.aygfsteel.com/lz408925352/articles/342379.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/lz408925352/comments/commentRss/342379.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/lz408925352/services/trackbacks/342379.html</trackback:ping><description><![CDATA[<p><span style="color: #ff0000">转蝲</span><span style="color: #ff0000">Q?/span><font style="background-color: #cce8cf"><a >http://hi.baidu.com/xjch666/blog/item/7bfddf4561459933869473bc.html</a></font><font style="background-color: #cce8cf"><br /> <br /> 随着中国大型IT企业信息化速度的加快,大部分应用的数据量和讉K量都急剧增加Q大型企业网站正面性能和高数据讉K量的压力Q而且对存储、安全以及信息检索等{方面都提出了更高的要求?/font></p> <p><font style="background-color: #cce8cf">千万人同时访问的|站Q一般是有很多个数据库同时工作,说明白一点就是数据库集群和ƈ发控Ӟq样的网站实时性也是相对的。这些网站都有一些共同的特点Q数据量大,在线人数多,q发h多,pageview高,响应速度快。ȝ了一下各个大|站的架构,主要提高效率及稳定性的几个地方包括Q?br /> 1、程?br /> E序开发是一斚wQ系l架构设计(g+|络+软gQ是另一斚w?br /> 软g架构斚wQ做|站首先需要很多web服务器存储静态资源,比如囄、视频、静态页{,千万不要把静态资源和应用服务器放在一赗?br /> 一个好的程序员写出来的E序会非常简z、性能很好Q一个初U程序员可能会犯很多低错误Q这也是影响|站性能的原因之一?br /> |站要做到效率高Q不光是E序员的事情Q数据库优化、程序优化这是必ȝQ在性能优化上要数据库和E序齐头q进Q缓存也是两斚w同时入手。第一Q数据库~存和数据库优化Q这个由dba完成Q而且q个有非常大的潜力可挖,只是׃我们都是E序员而忽略了他而已Q。第二,E序上的优化Q这个非常的有讲IӞ比如说重要一点就是要规范QIQ语句,用in 多用orQ多用preparestatementQ另外避免程序冗余如查找数据用双重循环{。另外选用优秀的开源框架加以支持,我个Z后台的支持是最最重要的,可以选取springQibatis。因为ibatis直接操作SQLq有~存机制。spring的好处就不用我多说了QテQE的机制可以避免new对象Q这样也节省开销。据我分析,l大部分的开销是在NEW的时候和q接数据库时候生的Q请量避免。另外可以用一些内存测试工h做一个demo说明hibernate和ibatis谁更快!前台你想用什么就用什么,struts,webwork都成Q如果觉得自己挺牛X可以试试用tapestry?br /> 用数据库也未必不能解册问量巨大所带来的问题,作成静态文件硬盘的d旉也未必少于数据库的搜索时_当然对资料的索引要下一d夫。我自己觉得门户往往也就是当天、热门的资料点击率较高,其做缓存最多也不过1~2G的数据量吧,举个例子Q?br /> ?拿网易新L说[url]http://news.163.com/07/0606/09/3GA0D10N00011229.html[/url]<br /> 格式化一下,方便理解Qhttp://域名/q?月日/新闻所属分c?新闻ID.html <br /> 可以把当天发布的、热门的、流揽量大的作个~寸Q用hashtableQkeyQ年-??分类-IDQvalueQ新d象)Q静态将其放到内存(速度l对快过盘d静态页面)?br /> 通常是采用oracle存储q程Q?个weblogicQ更新机制也几乎一h{֏一条新闻,׃生成静态页面,然后发往前端的web服务器,前端的web都是做负载均衡的。另外还有定时的E序Q每5-15分钟自动生成一ơ。在发布新闻的同时将数据~存。当然缓存也不会来大Q在个特定的旉D(如凌晨)剔除q期的数据。做一个大的网站远没有惌中那么简单,服务器基本就要百十个的?br /> q样可以大大增加一台计机的处理速度Q如果一台机器处理不了,可以用httpserver集群来解决问题了?br /> 2、网l?br /> 中国的网l分南北电信和网通,讉K的ipp区分南北q入不同的网l?br /> 3、集?br /> 通常会用CDN与GSBL与DNS负蝲均衡技术,每个地区一l前台服务器,例如Q网易,癑ֺ使用了DNS负蝲均衡技术,每个频道一l前台服务器Q一搜用了DNS负蝲技术,所有频道共用一l前台服务器集群?br /> |站使用ZLinux集群的负载均衡,p|恢复Q包括应用服务器和数据库服务器,Zlinux-ha的服务状态检及高可用化?br /> 应用服务器集可以采用apache+tomcat集群和weblogic集群{;web服务器集可以用反向代理Q也可以用NAT的方式,或者多域名解析都可以;Squid也可以,Ҏ很多Q可以根据情况选择?br /> 4、数据库<br /> 因ؓ是千万h同时讉K的网站,所以一般是有很多个数据库同时工作的Q说明白一点就是数据库集群和ƈ发控Ӟ数据分布到地理位|不同的数据中心Q以免发生断电事故。另外还有一点的是,那些|站的静态化|页q不是真的,而是通过动态网与静态网늽址交换做出现的假象Q这可以用urlrewriteq样的开源网址映射器实现。这L|站实时性也是相对的Q因为在数据库复制数据的时候有一个过E,一般在技术上可以用到hibernate和ecacheQ但是如果要使网站工作地更好Q可以用EJB和websphereQweblogicq样大型的服务器来支持,q且要用oracleq样的大型数据库?br /> 大型门户|站不徏议用Mysql数据库,除非你对Mysql数据的优化非常熟悉。Mysql数据库服务器的master-slave模式Q利用数据库服务器在M服务器间q行同步Q应用只把数据写C服务器,而读数据时则Ҏ负蝲选择一C服务器或者主服务器来dQ将数据按不同策略划分到不同的服务器Q组Q上Q分散数据库压力?br /> 大型|站要用oracleQ数据方面操作尽量多用存储过E,l对提升性能Q同时要让DBAҎ据库q行优化Q优化后的数据库与没优化的有天壤之别Q同时还可以扩展分布式数据库Q以后这斚w的研I会来多Q?br /> 5、页?br /> 从开始就考虑使用虚拟存储/文件系l。它能让你大量ƈ行IO讉KQ而且不需要Q何重l就能够增加所需要的盘?br /> 面数据调用更要认真设计Q一些数据查询可以不通过数据库的方式Q实时性要求不高的可以使用lucene来实玎ͼ即有实时性的要求也可以用luceneQlucene+compassq是非常优秀的?br /> 新闻cȝ|站可以用静态页存储Q采用定时更新机制减L务器负担Q首|个小模块可以使用oscache~存Q这样不用每ơ都拉数据?br /> 前端的基于静态页面缓存的web加速器Q主要应用有squid{。squid 大部分静态资?囄QjsQcss{)~存hQ直接返回给讉K者,减少应用服务器的负蝲<br /> |站的静态化|页q不是真的,而是通过动态网与静态网늽址交换做出现的假象Q这可以用urlrewriteq样的开源网址映射器实玎ͼ后缀名ؓhtm或者htmlq不能说明程序生成了静态页面,可能是通过url重写来实现的Qؓ的只不过是在搜烦引擎中提升自q站的覆盖面积|了?br /> 生成静态页面的服务器和www服务器是两组不同的服务器Q页面生成后才会到www服务器,一部分数据库ƈ不是关系数据库,q样更适合信息衍生Qwww、mail服务器、\由器多,主要用负载^衡解册问瓶颈?br /> ?静态页面的~点Q?<br /> 1) 增加了程序的复杂?br /> 2) 不利于管理资?br /> 3) 速度不是最?br /> 4) 伤硬?br /> 6、缓?br /> 从一开始就应该使用~存Q高速缓存是一个更好的地方存储临时数据Q比如Web站点上跟t一个特定用L会话产生的时文Ӟ׃再需要记录到数据库里?br /> 不能用lucene实现的可以用~存Q分布式~存可以用memcachedQ如果有q话用10来台机器做缓存,> 10G的存储量怿存什么都够了Q如果没q话可以在面~存和数据缓存上下功夫,多用OSCACHE和EHCACHEQSWARMCACHE也可以,不过据说同步性不是很好;<br /> 可以使用Memcacheq行~存Q用大内存把q些不变的数据全都缓存v来,而当修改时就通知cacheq期Qmemcache是LJ开发的一Ƒֈ布式~存产品Q很多大型网站在应用Q我们可以把Cache Server与App Server装在一赗因为Cache Server对CPU消耗不大,而有了Cache Server的支_App Server对内存要求也不是太高Q所以可以和q_处,更有效的利用资源?/font></p> <p><font style="background-color: #cce8cf">以上一些不太成熟的xQ可以从某一个层ơ开始,逐步l化Q把产品的性能指标提高上去?br /> 以下内容{载:析大型|站的架?br /> 一个小型的|站Q比如个人网站,可以使用最单的html静态页面就实现了,配合一些图片达到美化效果,所有的面均存攑֜一个目录下Q这L|站对系l架构、性能的要求都很简单,随着互联|业务的不断丰富Q网站相关的技术经q这些年的发展,已经l分到很l的Ҏ面面Q尤其对于大型网站来_所采用的技术更是涉及面非常q,从硬件到软g、编E语a、数据库、WebServer、防火墙{各个领域都有了很高的要求,已经不是原来单的html静态网站所能比拟的?br /> 大型|站Q比如门L站。在面对大量用户讉K、高q发h斚wQ基本的解决Ҏ集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编E语a、还有高性能的Web容器。但是除了这几个斚wQ还没法Ҏ解决大型|站面的高负蝲和高q发问题?br /> 上面提供的几个解x\在一定程度上也意味着更大的投入,q且q样的解x\具备瓉Q没有很好的扩展性,下面我从低成本、高性能和高扩张性的角度来说说我的一些经验?br /> 1、HTML静态化<br /> 其实大家都知道,效率最高、消耗最的是U静态化的html面Q所以我们尽可能使我们的|站上的面采用静态页面来实现Q这个最单的Ҏ其实也是最有效的方法。但是对于大量内容ƈ且频J更新的|站Q我们无法全部手动去挨个实现Q于是出C我们常见的信息发布系lCMSQ像我们常访问的各个门户站点的新闻频道,甚至他们的其他频道,都是通过信息发布pȝ来管理和实现的,信息发布pȝ可以实现最单的信息录入自动生成静态页面,q能具备频道理、权限管理、自动抓取等功能Q对于一个大型网站来_拥有一套高效、可理的CMS是必不可的?br /> 除了门户和信息发布类型的|站Q对于交互性要求很高的C֌cd|站来说Q尽可能的静态化也是提高性能的必要手D,社区内的帖子、文章进行实时的静态化Q有更新的时候再重新静态化也是大量使用的策略,像Mop的大杂烩是使用了这L{略Q网易社区等也是如此?br /> 同时Qhtml静态化也是某些~存{略使用的手D,对于pȝ中频J用数据库查询但是内容更新很小的应用,可以考虑使用html静态化来实玎ͼ比如论坛中论坛的公用讄信息Q这些信息目前的L论坛都可以进行后台管理ƈ且存储再数据库中Q这些信息其实大量被前台E序调用Q但是更新频率很,可以考虑这部分内容q行后台更新的时候进行静态化Q这样避免了大量的数据库讉Kh?br /> 2、图片服务器分离<br /> 大家知道Q对于Web服务器来_不管是Apache、IISq是其他容器Q图片是最消耗资源的Q于是我们有必要图片与面q行分离Q这是基本上大型|站都会采用的策略,他们都有独立的图片服务器Q甚臛_多台囄服务器。这L架构可以降低提供面讉Kh的服务器pȝ压力Qƈ且可以保证系l不会因为图片问题而崩溃,在应用服务器和图片服务器上,可以q行不同的配|优化,比如apache在配|ContentType的时候可以尽量少支持Q尽可能的LoadModuleQ保证更高的pȝ消耗和执行效率?br /> 3、数据库集群和库表散?br /> 大型|站都有复杂的应用,q些应用必须使用数据库,那么在面对大量访问的时候,数据库的瓉很快p昄出来Q这时一台数据库很快无法满_用,于是我们需要用数据库集群或者库表散列?br /> 在数据库集群斚wQ很多数据库都有自己的解x案,Oracle、Sybase{都有很好的ҎQ常用的MySQL提供的Master/Slave也是cM的方案,您用了什么样的DBQ就参考相应的解决Ҏ来实施即可?br /> 上面提到的数据库集群׃在架构、成本、扩张性方面都会受到所采用DBcd的限Ӟ于是我们需要从应用E序的角度来考虑改善pȝ架构Q库表散列是常用q且最有效的解x案。我们在应用E序中安装业务和应用或者功能模块将数据库进行分,不同的模块对应不同的数据库或者表Q再按照一定的{略Ҏ个页面或者功能进行更的数据库散列,比如用户表,按照用户IDq行表散列,q样p够低成本的提升系l的性能q且有很好的扩展性。sohu的论坛就是采用了q样的架构,论坛的用户、设|、帖子等信息q行数据库分,然后对帖子、用h照板块和IDq行散列数据库和表,最l可以在配置文g中进行简单的配置便能让系l随时增加一C成本的数据库q来补充pȝ性能?br /> 4、缓?br /> ~存一词搞技术的都接触过Q很多地方用到缓存。网站架构和|站开发中的缓存也是非帔R要。这里先讲述最基本的两U缓存。高U和分布式的~存在后面讲q?br /> 架构斚w的缓存,对Apache比较熟悉的h都能知道Apache提供了自q~存模块Q也可以使用外加的Squid模块q行~存Q这两种方式均可以有效的提高Apache的访问响应能力?br /> |站E序开发方面的~存QLinux上提供的Memory Cache是常用的~存接口Q可以在web开发中使用Q比如用Java开发的时候就可以调用MemoryCache对一些数据进行缓存和通讯׃nQ一些大型社Z用了q样的架构。另外,在用web语言开发的时候,各种语言基本都有自己的缓存模块和ҎQPHP有Pear的Cache模块QJava更多了Q?net不是很熟悉,怿也肯定有?br /> 5、镜?br /> 镜像是大型网站常采用的提高性能和数据安全性的方式Q镜像的技术可以解决不同网l接入商和地域带来的用户讉K速度差异Q比如ChinaNet和EduNet之间的差异就促了很多网站在教育|内搭徏镜像站点Q数据进行定时更新或者实时更新。在镜像的细节技术方面,q里不阐q太深,有很多专业的现成的解x构和产品可选。也有廉L通过软g实现的思\Q比如Linux上的rsync{工兗?br /> 6、负载均?br /> 负蝲均衡是大型|站解决高负药问和大量q发h采用的终极解军_法?br /> 负蝲均衡技术发展了多年Q有很多专业的服务提供商和品可以选择Q我个h接触q一些解x法,其中有两个架构可以给大家做参考?br /> g四层交换<br /> W四层交换用第三层和第四层信息包的报头信息Q根据应用区间识别业务流Q将整个区间D늚业务分配到合适的应用服务器进行处理。 W四层交换功能就象是?IPQ指向物理服务器。它传输的业务服从的协议多种多样Q有HTTP、FTP、NFS、Telnet或其他协议。这些业务在物理服务器基上,需要复杂的载量q法。在IP世界Q业务类型由l端TCP或UDP端口地址来决定,在第四层交换中的应用区间则由源端和终端IP地址、TCP和UDP端口共同军_?br /> 在硬件四层交换品领域,有一些知名的产品可以选择Q比如Alteon、F5{,q些产品很昂贵,但是物有所|能够提供非常优秀的性能和很灉|的管理能力。Yahoo中国当初接近2000台服务器使用了三四台Alteon搞定了?br /> 软g四层交换<br /> 大家知道了硬件四层交换机的原理后Q基于OSI模型来实现的软g四层交换也就应运而生Q这L解决Ҏ实现的原理一_不过性能E差。但是满一定量的压力还是游刃有余的Q有软g实现方式其实更灵z,处理能力完全看你配置的熟悉能力?br /> 软g四层交换我们可以使用Linux上常用的LVS来解冻ILVS是Linux Virtual ServerQ他提供了基于心跳线heartbeat的实时灾隑ֺ对解x案,提高pȝ的鲁性,同时可供了灵zȝ虚拟VIP配置和管理功能,可以同时满多种应用需求,q对于分布式的系l来说必不可?br /> 一个典型的使用负蝲均衡的策略就是,在Y件或者硬件四层交换的基础上搭建squid集群Q这U思\在很多大型网站包括搜索引擎上被采用,q样的架构低成本、高性能q有很强的扩张性,随时往架构里面增减节点都非常容易。这L架构我准备空了专门详l整理一下和大家探讨?br /> 对于大型|站来说Q前面提到的每个Ҏ可能都会被同时用到Q我q里介绍得比较浅显,具体实现q程中很多细节还需要大家慢慢熟悉和体会Q有时一个很的squid参数或者apache参数讄Q对于系l性能的媄响就会很大,希望大家一赯论,辑ֈ抛砖引玉之效?/font></p> <img src ="http://www.aygfsteel.com/lz408925352/aggbug/342379.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lz408925352/" target="_blank">沉香江南</a> 2011-01-05 21:29 <a href="http://www.aygfsteel.com/lz408925352/articles/342379.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle中password file的作用及说明http://www.aygfsteel.com/lz408925352/articles/340141.html沉香江南沉香江南Thu, 09 Dec 2010 06:25:00 GMThttp://www.aygfsteel.com/lz408925352/articles/340141.htmlhttp://www.aygfsteel.com/lz408925352/comments/340141.htmlhttp://www.aygfsteel.com/lz408925352/articles/340141.html#Feedback0http://www.aygfsteel.com/lz408925352/comments/commentRss/340141.htmlhttp://www.aygfsteel.com/lz408925352/services/trackbacks/340141.html本文转蝲Q链接:


在数据库没有启动之前Q数据库内徏用户是无法通过数据库来验证w䆾?br />
口o文g中存放sysdba/sysoper用户的用户名及口?br /> 允许用户通过口o文g验证Q在数据库未启动之前登陆
从而启动数据库

如果没有口o文gQ在数据库未启动之前只能通过操作pȝ认证.

使用RmanQ很多时候需要在nomount,mount{状态对数据库进行处?br /> 所以通常要求sysdba权限如果属于本地DBAl,可以通过操作pȝ认证登陆
如果是远Esysdba登陆Q需要通过passwordfile认证.

1.remote_login_passwordfile = NONE

此时停用口o文g验证QOracle数据库不允许q程SYSDBA/SYSOPERw䆾d
无法通过q程q行数据库v停等操作理


local:

 

[oracle@jumper oracle]$ sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.3.0 - Production on Thu Apr 15 09:58:45 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.3.0 - Production
SQL> alter user sys identified by oracle;
User altered.
SQL> show parameter pass
NAME                      TYPE   VALUE
--------------------- ----------- ------------------------------
remote_login_passwordfile string NONE

remote:

 

E:\Oracle\ora92\bin>sqlplus /nolog

SQL*Plus: Release 9.2.0.4.0 - Production on 星期?4?15 09:39:22 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

SQL> connect sys/oracle@hsjf as sysdba
ERROR:
ORA-01017: invalid username/password; logon denied


此处实际上是无法通过口o文g验证

2.remote_login_passwordfile = exclusive

 

 

 

SQL> alter system set remote_login_passwordfile=exclusive scope=spfile;
System altered.
SQL> startup force;
ORACLE instance started.
Total System Global Area 131142648 bytes
Fixed Size 451576 bytes
Variable Size 104857600 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.
SQL> show parameter pass
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile string EXCLUSIVE
SQL> alter user sys identified by oracle;
User altered.

remote:

 

 

E:\Oracle\ora92\bin>sqlplus /nolog

SQL*Plus: Release 9.2.0.4.0 - Production on 星期?4?15 09:47:11 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

SQL> connect sys/oracle@hsjf as sysdba
已连接?br /> SQL> show user
USER ?SYS"
SQL>

 

q实际上是通过口o文g验证d?

3.q一步测?br />
如果此时我们删除passwdfile,sysdba/sysoper无法认证,也就无法登陆数据?br />

Server:

 

SQL> !
[oracle@jumper oracle]$ cd $ORACLE_HOME/dbs
[oracle@jumper dbs]$ ls orapwhsjf
orapwhsjf
[oracle@jumper dbs]$ mv orapwhsjf orapwhsjf.bak
[oracle@jumper dbs]$



Remote:

 

E:\Oracle\ora92\bin>sqlplus /nolog

SQL*Plus: Release 9.2.0.4.0 - Production on 星期?4?15 09:50:14 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

SQL> connect sys/oracle@hsjf as sysdba
ERROR:
ORA-01031: insufficient privileges


SQL>



q实际上是无法通过口o文g验证w䆾

 

4.如果丢失了passwdfile

如果使用passwdfile却意外丢失,此时不能启动数据库

 



SQL> startup force;
ORACLE instance started.

Total System Global Area 131142648 bytes
Fixed Size 451576 bytes
Variable Size 104857600 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
ORA-01990: error opening password file '/opt/oracle/product/9.2.0/dbs/orapw'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3




此时可以通过orapwd重徏口o文g来解?br /> 此处我们恢复口o文g既可

 

SQL> !
[oracle@jumper oracle]$ mv $ORACLE_HOME/dbs/orapwhsjf.bak orapwhsjf
[oracle@jumper oracle]$ exit
exit

SQL> alter database open;

Database altered.

SQL>





大致是如此.

 

5. remote_login_passwordfile = shared

我们看一下Oracle9i文档中的说明:

SHARED

More than one database can use a password file. However, the only user recognized by the password file is SYS.

意思是说多个数据库可以׃n一个口令文?但是只可以识别一个用?SYS

 

SQL> select * from v$pwfile_users;

USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE

SQL> grant sysdba to eygle;
grant sysdba to eygle
*
ERROR at line 1:
ORA-01994: GRANT failed: cannot add users to public password file

SQL> show parameter password

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile string SHARED


我们看到,此时的口令文件中是不能添加用L.

很多人的疑问在于:口o文g的缺省名U是orapw<sid>,怎么能够׃n?

实际上是q样? Oracle数据库在启动?首先查找的是orapw<sid>的口令文?如果该文件不存在,则开始查?orapw的口令文?br /> 如果口o文g命名为orapw,多个数据库就可以׃n.

我们看一下测?

 

[oracle@jumper dbs]$ sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.3.0 - Production on Tue Jul 6 09:40:34 2004
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.3.0 - Production
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> !
[oracle@jumper dbs]$ ls
hsjf  initdw.ora  inithsjf.ora  init.ora  lkHSJF  orapwhsjf  spfilehsjf.ora
[oracle@jumper dbs]$ mv orapwhsjf orapwhsjf.bak
[oracle@jumper dbs]$ exit
exit
SQL> startup
ORACLE instance started.
Total System Global Area  235999908 bytes
Fixed Size                   451236 bytes
Variable Size             201326592 bytes
Database Buffers           33554432 bytes
Redo Buffers                 667648 bytes
ORA-01990: error opening password file '/opt/oracle/product/9.2.0/dbs/orapw'--q是最后查扄文g
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3


我们建立orapw口o文g,q时候可以打开数据?

SQL> !
[oracle@jumper dbs]$ ls
hsjf  initdw.ora  inithsjf.ora  init.ora  lkHSJF  orapwhsjf.bak  spfilehsjf.ora
[oracle@jumper dbs]$ cp orapwhsjf.bak orapw
[oracle@jumper dbs]$ exit
exit
SQL> alter database open;
Database altered.
SQL> show parameter passw
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile            string      SHARED
SQL>    

 

那么你可能会有这L疑问,多个Exclusive的数据库是否可以׃n一个口令文?orapw)?

我们l箋q个实验:

SQL> show parameter password

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile string SHARED

[oracle@jumper dbs]$ strings orapw
]\[Z
ORACLE Remote Password file
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A

注意q里仅记录着INTERNAL/SYS的口?/font>

REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE ?/font>

SQL> alter system set remote_login_passwordfile=exclusive scope=spfile;

System altered.

SQL> startup force;
ORACLE instance started.

Total System Global Area 235999908 bytes
Fixed Size 451236 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.
SQL> !

[oracle@jumper bin]$ cd $ORACLE_HOME/dbs
[oracle@jumper dbs]$ strings orapw
]\[Z
ORACLE Remote Password file
HSJF
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
[oracle@jumper dbs]$ exit
exit

注意q里,以EXCLUSIVE 方式启动以后,实例名称信息被写入口令文?

此时如果有其他实例以Exclusive模式启动仍然可以使用q个口o文g,口o文g中的实例名称同时被改?

也就是说,数据库只在启动过E中才读取口令文?数据库运行过E中q不锁定该文?cM于pfile/spfile文g.

SQL> select * from v$pwfile_users;

USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE

SQL> grant sysdba to eygle;

Grant succeeded.

SQL> select * from v$pwfile_users;

USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE
EYGLE TRUE FALSE

SQL> !
[oracle@jumper bin]$ cd $ORACLE_HOME/dbs
[oracle@jumper dbs]$ strings orapw
]\[Z
ORACLE Remote Password file
HSJF
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
>EYGLE
B726E09FE21F8E83


注意此时可以增加SYSDBA用户Qƈ且这些信息可以被写入到口令文?

一旦口令文件中增加了其他SYSDBA用户,此文件不再能够被其他Exclusive的实例共?

实际上,口o文g对于其他用户来说是启到了一?sudo 的作?

6.重徏口o文g

如果口o文g丢失,可以使用orapwd可以重徏口o文gQ语法如?

[oracle@jumper oracle]$ orapwd
Usage: orapwd file=<fname> password=<password> entries=<users>

where
file - name of password file (mand),
password - password for SYS (mand),
entries - maximum number of distinct DBA and OPERs (opt),
There are no spaces around the equal-to (=) character.



沉香江南 2010-12-09 14:25 发表评论
]]>
使用 VMware Server ?Linux 上安?Oracle RAC 10g(?http://www.aygfsteel.com/lz408925352/articles/340122.html沉香江南沉香江南Thu, 09 Dec 2010 03:38:00 GMThttp://www.aygfsteel.com/lz408925352/articles/340122.htmlhttp://www.aygfsteel.com/lz408925352/comments/340122.htmlhttp://www.aygfsteel.com/lz408925352/articles/340122.html#Feedback0http://www.aygfsteel.com/lz408925352/comments/commentRss/340122.htmlhttp://www.aygfsteel.com/lz408925352/services/trackbacks/340122.html现在Q您已经成功安装了虚拟双节点 RAC 数据库,下面我们来探I一下您刚刚配置的环境?/p> 查应用程序资源的状态?br />
q个crs_stat 命o本来找不?which后发现就在安装目录下?于是env 查看环境变量,发现oracle_crs_home和ora_crs_home写的不对,Ҏ后ok.
rac1-> crs_stat -t

Name Type Target State Host
------------------------------------------------------------
ora.devdb.db application ONLINE ONLINE rac1
ora....b1.inst application ONLINE ONLINE rac1
ora....b2.inst application ONLINE ONLINE rac2
ora....SM1.asm application ONLINE ONLINE rac1
ora....C1.lsnr application ONLINE ONLINE rac1
ora.rac1.gsd application ONLINE ONLINE rac1
ora.rac1.ons application ONLINE ONLINE rac1
ora.rac1.vip application ONLINE ONLINE rac1
ora....SM2.asm application ONLINE ONLINE rac2
ora....C2.lsnr application ONLINE ONLINE rac2
ora.rac2.gsd application ONLINE ONLINE rac2
ora.rac2.ons application ONLINE ONLINE rac2
ora.rac2.vip application ONLINE ONLINE rac2

rac1-> srvctl status nodeapps -n rac1
VIP is running on node: rac1
GSD is running on node: rac1
Listener is running on node: rac1
ONS daemon is running on node: rac1

rac1-> srvctl status nodeapps -n rac2
VIP is running on node: rac2
GSD is running on node: rac2
Listener is running on node: rac2
ONS daemon is running on node: rac2

rac1-> srvctl status asm -n rac1
ASM instance +ASM1 is running on node rac1.

rac1-> srvctl status asm -n rac2
ASM instance +ASM2 is running on node rac2.

rac1-> srvctl status database -d devdb
Instance devdb1 is running on node rac1
Instance devdb2 is running on node rac2

rac1-> srvctl status service -d devdb
rac1->
?Oracle 集群件的状态?/strong>
rac1-> crsctl check crs
CSS appears healthy
CRS appears healthy
EVM appears healthy

rac2-> crsctl check crs
CSS appears healthy
CRS appears healthy
EVM appears healthy

在命令行执行 服务?/td> 数据库名 首选实?/td> 可用实例 TAF {略 CRM devdb devdb1 devdb2 BASIC

?rac1 上,?oracle 用户w䆾执行

rac1-> dbca
  1. Ƣ迎面Q选择 Oracle Real Application Clusters database?/li>
  2. 操作Q选择 Services Management?/li>
  3. 集群数据库列表:单击 Next?/li>
  4. 数据库服务:单击 Add?
    • d服务Q输?#8220;CRM”?
      • 选择 devdb1 作ؓ首选实例?/li>
      • 选择 devdb2 作ؓ可用实例?/li>
      • TAF {略Q选择 Basic?/li>
    • 单击 Finish?/li>

?14

  1. 数据库配|助手:单击 No 退出?/li>

数据库配|助手将?tnsnames.ora 中创Z?CRM 服务名项Q?/p>

CRM =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = CRM)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
)
)
)


SQL> connect system/oracle@devdb1
Connected.
SQL> show parameter service

NAME TYPE VALUE
------------------------------ ----------- ------------------------
service_names string devdb, CRM


SQL> connect system/oracle@devdb2
Connected.
SQL> show parameter service

NAME TYPE VALUE
------------------------------ ----------- ------------------------
service_names string devdb
使用 CRM 服务q接W一个会话?/strong>如果 failover_type ?failover_mode q回的输Zؓ“NONE”Q则验证是否?tnsnames.ora 中正配|了 CRM 服务?
SQL> connect system/oracle@crm
Connected.
SQL> select
2 instance_number instance#,
3 instance_name,
4 host_name,
5 status
6 from v$instance;

INSTANCE# INSTANCE_NAME HOST_NAME STATUS
---------- ---------------- --------------------- ------------
1 devdb1 rac1.mycorpdomain.com OPEN


SQL> select
2 failover_type,
3 failover_method,
4 failed_over
5 from v$session
6 where username='SYSTEM';

FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER
------------- --------------- ----------------
SELECT BASIC NO
从其他会话中关闭该实例?/strong>?CRM 实例上以 sys 用户w䆾q接Qƈ关闭该实例?
rac1-> export ORACLE_SID=devdb1
rac1-> sqlplus / as sysdba

SQL> select
2 instance_number instance#,
3 instance_name,
4 host_name,
5 status
6 from v$instance;


INSTANCE# INSTANCE_NAME HOST_NAME STATUS
---------- ---------------- --------------------- ------------
1 devdb1 rac1.mycorpdomain.com OPEN

SQL> shutdown abort;
ORACLE instance shut down.
验证会话已经完成故障切换?/strong>从您先前打开的同一 CRM 会话执行以下查询Q以验证该会话已l故障切换到其他实例?
SQL> select
2 instance_number instance#,
3 instance_name,
4 host_name,
5 status
6 from v$instance;


INSTANCE# INSTANCE_NAME HOST_NAME STATUS
---------- ---------------- --------------------- ------------
2 devdb2 rac2.mycorpdomain.com OPEN


SQL> select
2 failover_type,
3 failover_method,
4 failed_over
5 from v$session
6 where username='SYSTEM';


FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER
------------- --------------- ----------------
SELECT BASIC YES
?CRM 服务重新定位到首选实例?/strong>恢复 devdb1 之后QCRM 服务不会自动重新定位到首选实例。您必须手动服务重新定位到 devdb1?
rac1-> export ORACLE_SID=devdb1
rac1-> sqlplus / as sysdba

SQL> startup
ORACLE instance started.

Total System Global Area 209715200 bytes
Fixed Size 1218556 bytes
Variable Size 104859652 bytes
Database Buffers 100663296 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
SQL> show parameter service

NAME TYPE VALUE
------------------------------ ----------- ------------------------
service_names string devdb


rac2-> export ORACLE_SID=devdb2
rac2-> sqlplus / as sysdba

SQL> show parameter service

NAME TYPE VALUE
------------------------------ ----------- ------------------------
service_names string devdb, CRM


rac1-> srvctl relocate service -d devdb -s crm -i devdb2 -t devdb1


SQL> connect system/oracle@devdb1
Connected.
SQL> show parameter service

NAME TYPE VALUE
------------------------------ ----------- ------------------------
service_names string devdb, CRM


SQL> connect system/oracle@devdb2
Connected.
SQL> show parameter service

NAME TYPE VALUE
------------------------------ ----------- ------------------------
service_names string devdb

11. 数据库备份与恢复

使用 Oracle 恢复理?(RMAN) 备䆾和恢?Oracle RAC 数据库的q程与单实例数据库的备䆾和恢复过E相同?/p>

在本部分中,您将看到一个非常简单的备䆾和恢复案例:

1. 执行完整的数据库备䆾?br /> 2. ?test_d 表空间中创徏 mytable 表?br /> 3. ?t1 旉Q向 mytable 中插入第一个记录?br /> 4 ?t2 旉Q向 mytable 中插入第二个记录?br /> 5. ?t3 旉Q删?mytable 表?br /> 6. ?test_d 表空间恢复到某个旉炏V?br /> 7. 验证恢复l果?/p>

执行完整的数据库备䆾?/h3>
rac1-> rman nocatalog target /

Recovery Manager: Release 10.2.0.1.0 - Production on Mon Nov 13 18:15:09 2006

Copyright (c) 1982, 2005, Oracle. All rights reserved.

connected to target database: DEVDB (DBID=511198553)
using target database control file instead of recovery catalog

RMAN> configure controlfile autobackup on;

RMAN> backup database plus archivelog delete input;

?test_d 表空间中创徏 mytable 表?/h3>
19:01:56 SQL> connect system/oracle@devdb2
Connected.
19:02:01 SQL> create table mytable (col1 number) tablespace test_d;

Table created.

?t1 旉Q向 mytable 中插入第一个记录?/h3>
19:02:50 SQL> insert into mytable values (1);

1 row created.

19:02:59 SQL> commit;

Commit complete.

?t2 旉Q向 mytable 中插入第二个记录?/h3>
19:04:41 SQL> insert into mytable values (2);

1 row created.

19:04:46 SQL> commit;

Commit complete.

?t3 旉Q删?mytable 表?/h3>
19:05:09 SQL> drop table mytable;

Table dropped.

?test_d 表空间恢复到某个旉炏V?/h3>

助数据库创徏辅助目录?/p>

rac1-> mkdir /u01/app/oracle/aux


RMAN> recover tablespace test_d
2> until time "to_date('13-NOV-2006 19:03:10','DD-MON-YYYY HH24:MI:SS')"
3> auxiliary destination '/u01/app/oracle/aux';

RMAN> backup tablespace test_d;

RMAN> sql 'alter tablespace test_d online';

验证恢复l果?/h3>
19:15:09 SQL> connect system/oracle@devdb2
Connected.
19:15:16 SQL> select * from mytable;

COL1
----------
1

12. 探烦 Oracle 企业理?(OEM) 数据库控制台

Oracle 企业理器数据库控制台提供了一个非常好的集成式l合 GUI 界面Q用于管理集数据库环境。您可以在控制台内执行几乎所有的d?/p>

要访问数据库控制収ͼh开 Web 览器ƈ输入下面?URL?br /> ?sysman 用户w䆾dQƈ输入您先前在数据库安装期间选择的口令?/p>

http://rac1:1158/em

?15

启动和停止数据库控制台?/h3>
rac1-> emctl stop dbconsole
TZ set to US/Eastern
Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0
Copyright (c) 1996, 2005 Oracle Corporation. All rights reserved.
http://rac1.mycorpdomain.com:1158/em/console/aboutApplication
Stopping Oracle Enterprise Manager 10g Database Control ...
... Stopped.

rac1-> emctl start dbconsole
TZ set to US/Eastern
Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0
Copyright (c) 1996, 2005 Oracle Corporation. All rights reserved.
http://rac1.mycorpdomain.com:1158/em/console/aboutApplication
Starting Oracle Enterprise Manager 10g Database Control
................... started.
------------------------------------------------------------------
Logs are generated in directory
/u01/app/oracle/product/10.2.0/db_1/rac1_devdb1/sysman/log

验证数据库控制台的状态?/h3>
rac1-> emctl status dbconsole
TZ set to US/Eastern
Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0
Copyright (c) 1996, 2005 Oracle Corporation. All rights reserved.
http://rac1.mycorpdomain.com:1158/em/console/aboutApplication
Oracle Enterprise Manager 10g is running.
------------------------------------------------------------------
Logs are generated in directory
/u01/app/oracle/product/10.2.0/db_1/rac1_devdb1/sysman/log

rac1-> emctl status agent
TZ set to US/Eastern
Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0
Copyright (c) 1996, 2005 Oracle Corporation. All rights reserved.
---------------------------------------------------------------
Agent Version : 10.1.0.4.1
OMS Version : 10.1.0.4.0
Protocol Version : 10.1.0.2.0
Agent Home : /u01/app/oracle/product/10.2.0/db_1/rac1_devdb1
Agent binaries : /u01/app/oracle/product/10.2.0/db_1
Agent Process ID : 10263
Parent Process ID : 8171
Agent URL : http://rac1.mycorpdomain.com:3938/emd/main
Started at : 2006-11-12 08:10:01
Started by user : oracle
Last Reload : 2006-11-12 08:20:33
Last successful upload : 2006-11-12 08:41:53
Total Megabytes of XML files uploaded so far : 4.88
Number of XML files pending upload : 0
Size of XML files pending upload(MB) : 0.00
Available disk space on upload filesystem : 71.53%
---------------------------------------------------------------
Agent is Running and Ready

13. 常见问题

下面是可能对您有用的问题和解x法摘要列表?/p>

问题 1Q无法激zM太网讑֤?/strong>
错误消息?#8220;Cannot activate network device eth0!Device eth0 has different MAC address than expected, ignoring.”

解决ҎQ?/strong>
“ifconfig”报告?MAC 地址?/etc/sysconfig/network-scripts/ifcfg-eth0 不匹配。您可以使用新的 MAC 地址更新文gQ或者只需通过 /usr/bin/system-config-securitylevel 以禁用防火墙?/p>

问题 5Q无法启?ONS 资源?/strong>
?VIPCA 试启动 ONS 应用E序资源Ӟ出现错误消息“CRS-0215:Could not start resource ‘ora.rac2.ons’”?/p>

解决ҎQ?/strong>
ONS 试讉K本地LQ但无法解析 IP 地址。将以下Ҏ加到 /etc/hosts 中?/p>

127.0.0.1 localhost


l论

希望通过本指南的学习Q您可以免费、快速地使用 VMware Server 构徏集群 Oracle 数据库环境。利用免费YӞ开始学习ƈ试用 Enterprise Linux 上的 Oracle RACQ?/p>

沉香江南 2010-12-09 11:38 发表评论
]]>
使用 VMware Server ?Linux 上安?Oracle RAC 10g(?http://www.aygfsteel.com/lz408925352/articles/340121.html沉香江南沉香江南Thu, 09 Dec 2010 03:37:00 GMThttp://www.aygfsteel.com/lz408925352/articles/340121.htmlhttp://www.aygfsteel.com/lz408925352/comments/340121.htmlhttp://www.aygfsteel.com/lz408925352/articles/340121.html#Feedback0http://www.aygfsteel.com/lz408925352/comments/commentRss/340121.htmlhttp://www.aygfsteel.com/lz408925352/services/trackbacks/340121.html4. 创徏q|第二个虚拟?/h2>

要创建第二个虚拟机,只需关闭W一个虚拟机Q将 d:vmracrac1 中的所有文件复制到 d:vmracrac2Q然后更改几个配|即可?/p> 修改|络配置?/strong>

  1. ?rac1 上,?root 用户w䆾执行
    D:>copy d:vmracrac1 d:vmracrac2
  2. ?VMware Server 控制CQ按 CTRL-O 打开W二个虚拟机 d:racrac2Red Hat Enterprise Linux 4.vmx?/li>
  3. VMware Server 控制収ͼ
    • 虚拟机名称?rac1 重命名ؓ rac2。右键单L刚才打开的新 rac1 选项卡,然后选择 Settings?
      • 选择 Options 选项卡?br /> 1. 虚拟机名Uͼ输入“rac2”?/li>

?5

  • 单击 Start this virtual machine 启动 rac2Q保?rac1 为电源关闭状态?/li>
  • rac2 ?虚拟机:选择 Create a new identifier?/li>
  1. ?root 用户w䆾dq执?system-config-networkQ以修改|络配置?

    IP 地址Q?/strong>双击每个以太|设备,q用下面的表进行必要的更改?/p>
    讑֤ IP 地址 子网掩码 默认|关地址
    eth0 192.168.2.132 255.255.255.0 192.168.2.1
    eth1 10.10.10.32 255.255.255.0 <保留I白>

    MAC 地址Q?/strong>D?Hardware Device 选项卡,q探每个以太网讑֤的新 MAC 地址?/p>

    L名和 DNSQ?/strong>使用下面的表?DNS 选项卡中的项q行必要的更改,然后?CTRL-S 保存?/p>
    L?/td> 首?DNS 备用 DNS DNS 搜烦路径
    rac2.mycorpdomain.com 输入 DNS IP 地址或保留空白?/td> 输入 DNS IP 地址或保留空白?/td> 接受默认讄或保留空白?/td>

    最后,ȀzL个以太网讑֤?/p>

修改 /etc/hosts?/strong>以下项d?/etc/hosts 中?/p>

127.0.0.1 localhost

E后Q在 Oracle 集群件Y件安装期_VIPCA 尝试用回送地址?/p>

修改 /export/home/oracle/.profile?/strong>?devdb2 替换 ORACLE_SID 的倹{?/p>

使用 SSH 建立用户{效性?/strong>在集就l服?(CRS) ?RAC 安装q程中,Oracle Universal Installer (OUI) 必须能够?oracle 的n份将软g复制到所?RAC 节点Q而不提示输入口o。在 Oracle 10g 中,可以使用 ssh 代替 rsh 完成此操作?/p>

要徏立用L效性,请在两个节点上以 oracle 用户w䆾生成用户的公钥和U钥。打开 rac1 的电源,在这两个节点上执行以下Q务?br /> ?rac1 上执?/p> rac1-> mkdir ~/.ssh
rac1-> chmod 700 ~/.ssh
rac1-> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/export/home/oracle/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /export/home/oracle/.ssh/id_rsa.
Your public key has been saved in /export/home/oracle/.ssh/id_rsa.pub.
The key fingerprint is:
87:54:4f:92:ba:ed:7b:51:5d:1d:59:5b:f9:44:da:b6 oracle@rac1.mycorpdomain.com
rac1-> ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/export/home/oracle/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /export/home/oracle/.ssh/id_dsa.
Your public key has been saved in /export/home/oracle/.ssh/id_dsa.pub.
The key fingerprint is:
31:76:96:e6:fc:b7:25:04:fd:70:42:04:1f:fc:9a:26 oracle@rac1.mycorpdomain.com

?rac2 上执?/p> rac2-> mkdir ~/.ssh
rac2-> chmod 700 ~/.ssh
rac2-> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/export/home/oracle/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /export/home/oracle/.ssh/id_rsa.
Your public key has been saved in /export/home/oracle/.ssh/id_rsa.pub.
The key fingerprint is:
29:5a:35:ac:0a:03:2c:38:22:3c:95:5d:68:aa:56:66 oracle@rac2.mycorpdomain.com
rac2-> ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/export/home/oracle/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /export/home/oracle/.ssh/id_dsa.
Your public key has been saved in /export/home/oracle/.ssh/id_dsa.pub.
The key fingerprint is:
4c:b2:5a:8d:56:0f:dc:7b:bc:e0:cd:3b:8e:b9:5c:7c oracle@rac2.mycorpdomain.com

?rac1 上执?/p> rac1-> cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
rac1-> cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
rac1-> ssh rac2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
The authenticity of host 'rac2 (192.168.2.132)' can't be established.
RSA key fingerprint is 63:d3:52:d4:4d:e2:cb:ac:8d:4a:66:9f:f1:ab:28:1f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'rac2,192.168.2.132' (RSA) to the list of known hosts.
oracle@rac2's password:
rac1-> ssh rac2 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
oracle@rac2's password:
rac1-> scp ~/.ssh/authorized_keys rac2:~/.ssh/authorized_keys
oracle@rac2's password:
authorized_keys 100% 1716 1.7KB/s 00:00

在每个节点上试q接。验证当您再ơ运行以下命令时Q系l是否不提示您输入口令?/font>

ssh rac1 date
ssh rac2 date
ssh rac1-priv date
ssh rac2-priv date
ssh rac1.mycorpdomain.com date
ssh rac2.mycorpdomain.com date
ssh rac1-priv.mycorpdomain.com date
ssh rac2-priv.mycorpdomain.com date

一定要认不需要密码就能执?否则后面从rac1q程安装cluster ware到rac2上的时候会报错.

5. 配置 Oracle 自动存储理 (ASM)

Oracle ASM ?Oracle 数据库紧密集成在一Pq与 Oracle 的数据管理工具套仉合工作。它可以化数据库存储理Qƈ提供原始盘 I/O 的性能?/p>

配置 ASMLib?/strong>?root 用户w䆾在两个节点上配置 ASMLib?/font>

# /etc/init.d/oracleasm configure
Configuring the Oracle ASM library driver.

This will configure the on-boot properties of the Oracle ASM library
driver. The following questions will determine whether the driver is
loaded on boot and what permissions it will have. The current values
will be shown in brackets ('[]'). Hitting without typing an
answer will keep that current value. Ctrl-C will abort.

Default user to own the driver interface []: oracle
Default group to own the driver interface []: dba
Start Oracle ASM library driver on boot (y/n) [n]: y
Fix permissions of Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: [ OK ]
Loading module "oracleasm": [ OK ]
Mounting ASMlib driver filesystem: [ OK ]
Scanning system for ASM disks: [ OK ]

创徏 ASM 盘?/strong>?root 用户w䆾在Q何一个节点上创徏 ASM 盘?/p>

# /etc/init.d/oracleasm createdisk VOL1 /dev/sdc1
Marking disk "/dev/sdc1" as an ASM disk: [ OK ]
# /etc/init.d/oracleasm createdisk VOL2 /dev/sdd1
Marking disk "/dev/sdd1" as an ASM disk: [ OK ]
# /etc/init.d/oracleasm createdisk VOL3 /dev/sde1
Marking disk "/dev/sde1" as an ASM disk: [ OK ]
Verify that the ASM disks are visible from every node.
# /etc/init.d/oracleasm scandisks
Scanning system for ASM disks: [ OK ]
# /etc/init.d/oracleasm listdisks
VOL1
VOL2
VOL3
VOL4

6. 配置 Oracle 集群文gpȝ (OCFS2)

OCFS2 ?Oracle 开发的一个通用集群文gpȝQ与 Enterprise Linux 内核集成在一赗它允许所有节点在集群文gpȝ上同时共享文Ӟ因而消除了理原始讑֤的需求。这里,您将?OCFS2 文gpȝ中寄?OCR 和表决磁盘。您可以?OCFS2 用户指南获取有关 OCFS2 的其他信息?/p>

?Enterprise Linux 安装期间Q您应该已经安装?OCFS2 RPM。验?RPM 是否已经安装在两个节点上?/p>

rac1-> rpm -qa | grep ocfs
ocfs2-tools-1.2.2-2
ocfs2console-1.2.2-2
ocfs2-2.6.9-42.0.0.0.1.ELsmp-1.2.3-2
要去oracle 下蝲

创徏 OCFS2 配置文g?/strong> ?rac1 上,?root 用户w䆾执行

# ocfs2console
  1. OCFS2 控制収ͼ选择 ClusterQ然后选择 Configure Nodes?/li>
  2. “集群堆栈已经启动”Q单?Close?/li>
  3. 节点配置Q单?Add?/li>
  4. 新增节点Q添加以下节点,然后单击 Apply?
    • 名称Qrac1
    • IP 地址Q?192.168.2.131
    • IP 端口Q?7777
    • 名称Qrac2
    • IP 地址Q?192.168.2.132
    • IP 端口Q?7777
  5. 验证生成的配|文件?
    # more /etc/ocfs2/cluster.conf
    node:
    ip_port = 7777
    ip_address = 192.168.2.131
    number = 0
    name = rac1
    cluster = ocfs2

    node:
    ip_port = 7777
    ip_address = 192.168.2.132
    number = 1
    name = rac2
    cluster = ocfs2

    cluster:
    node_count = 2
    name = ocfs2
  6. 配|文件传播到 rac2。您可以?rac2 上重新运行上q步骤以生成配置文gQ或者在 rac1 ?OCFS2 控制C选择 Cluster ?Propagate Configuration 以将配置文g传播?rac2?/li>

配置 O2CB 驱动E序?/strong>O2CB 是一l集服务,负责理节点与集文件系l之间的通信。下面是对各个服务的说明Q?/p>

  • NMQ用于跟t?cluster.conf 中的所有节点的节点理?/li>
  • HBQ当节点加入或离开集群时向?向下发出通知的心x?/li>
  • TCPQ处理节点之间的通信
  • DLMQ用于跟t所有锁、这些锁的所有者以及状态的分布式锁理?/li>
  • CONFIGFSQ在 /config 中挂载的用户I间驱动的配|文件系l?/li>
  • DLMFSQ用L间与内核I间 DLM 的接?/li>

在两个节点上执行下面的过E,?O2CB 配置为在引导时启动?/p>

当系l提C您指定心蟩M阈值时Q您必须指定一个大?7 的|以防止节点由于较慢的 IDE 盘驱动器而崩溃。心x亡阈值是一个用于计隔L间的变量?/p>

Fence time (seconds) = (heartbeat dead threshold -1) * 2

在我们的环境中,120 U的隔离旉很合适。两个节点上的心x亡阈值应该完全相同?/p>

?root 用户w䆾执行

# /etc/init.d/o2cb unload
Stopping O2CB cluster ocfs2: OK
Unmounting ocfs2_dlmfs filesystem: OK
Unloading module "ocfs2_dlmfs": OK
Unmounting configfs filesystem: OK
Unloading module "configfs": OK

# /etc/init.d/o2cb configure
Configuring the O2CB driver.

This will configure the on-boot properties of the O2CB driver.
The following questions will determine whether the driver is loaded on
boot. The current values will be shown in brackets ('[]'). Hitting
without typing an answer will keep that current value. Ctrl-C
will abort.

Load O2CB driver on boot (y/n) [y]: y
Cluster to start on boot (Enter "none" to clear) [ocfs2]:
Specify heartbeat dead threshold (>=7) [7]: 61
Writing O2CB configuration: OK
Loading module "configfs": OK
Mounting configfs filesystem at /config: OK
Loading module "ocfs2_nodemanager": OK
Loading module "ocfs2_dlm": OK
Loading module "ocfs2_dlmfs": OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
Starting O2CB cluster ocfs2: OK

格式化文件系l?/strong>在格式化和挂载文件系l之前,应验?O2CB 在两个节点上均联机;O2CB 心蟩当前没有zdQ因为文件系l未挂蝲?/p>

# /etc/init.d/o2cb status
(很重要的命o,重新启动后应该首先判断这个服务是否开?状态如?特别是heartbeat是不是active
一般都是ocfs没有mount上的原因造成没有启动)

Module "configfs": Loaded
Filesystem "configfs": Mounted
Module "ocfs2_nodemanager": Loaded
Module "ocfs2_dlm": Loaded
Module "ocfs2_dlmfs": Loaded
Filesystem "ocfs2_dlmfs": Mounted
Checking O2CB cluster ocfs2: Online
Checking O2CB heartbeat: Not active

您只需在一个节点上格式化文件系l。在 rac1 上,?root 用户w䆾执行

# ocfs2console
  1. OCFS2 控制収ͼ选择 Tasks、Format?/li>
  2. 格式Q?
    • 可用讑֤Q?dev/sdb1
    • hQoracle
    • 集群大小QAuto
    • 节点插槽数量Q?4
    • 块大:Auto
  3. OCFS2 控制収ͼ?CTRL-Q 退出?/li>

挂蝲文gpȝ?/strong>要挂载文件系l,在两个节点上执行以下命o?/p>

# mount -t ocfs2 -o datavolume,nointr /dev/sdb1 /ocfs

要在引导时挂载文件系l,在两个节点的 /etc/fstab 中添加以下行?/p>

/etc/fstab

/dev/sdb1 /ocfs ocfs2 _netdev,datavolume,nointr 0 0

创徏 Oracle 集群件目录?/strong>?OCR 和表决磁盘将ȝ?OCFS2 文gpȝ中创建目录?/p>

?rac1 上执?/p>

# mkdir /ocfs/clusterware
# chown -R oracle:dba /ocfs

现在Q您已经完成?OCFS2 的设|。验证您可以在两个节点的׃n集群文gpȝ上读写文件?/p>

7. 安装 Oracle 集群?/h2>

下蝲后,?rac1 上以 oracle 用户w䆾执行(注销切换到oracle ,q样起安装图形就没有问题)

安装之前最好是用安装目录下的检工h查是否满_装的要求

../. cluvfy stage -pre crsinst -n rac1,rac2

我安装的时候还差几个gcc 的包 安装好了可以了
查的时候会报vips的错误可以忽?{cluster安装后了以后再设|?
rac1-> /u01/staging/clusterware/runInstaller
  1. Ƣ迎面Q单?Next?/li>
  2. 指定 Inventory 目录和证书:
    • 输入 inventory 目录的完整\径:/u01/app/oracle/oraInventory?/li>
    • 指定操作pȝl名Qoinstall?/li>
  3. 指定 Home 详细内容Q?
    • 名称QOraCrs10g_home
    • /u01/app/oracle/product/10.2.0/crs_1
  4. 特定于品的必要条g查:
    • 忽略有关物理内存要求的警告?/li>
  5. 指定集群配置Q单?Add?
    • 公共节点名称Qrac2.mycorpdomain.com
    • 专用节点名称Qrac2-priv.mycorpdomain.com
    • 虚拟L名称Qrac2-vip.mycorpdomain.com
    • 最好这里直接用rac1,rac1-priv,rac1-vip来指名节?br />
  6. 指定|络接口用法Q?
    • 接口名称Qeth0
    • 子网Q?192.168.2.0
    • 接口cdQPublic
    • 接口名称Qeth1
    • 子网Q?10.10.10.0
    • 接口cdQPrivate
  7. 指定 Oracle 集群注册?(OCR) 位置Q选择 External Redundancy?br /> Z单v见,q里不镜像 OCR。在生环境中,您可能会考虑复用 OCR 以实现更高的冗余?
    • 指定 OCR 位置Q?ocfs/clusterware/ocr
  8. 指定表决盘位置Q选择 External Redundancy?br /> 同样Qؓ了简单v见,我们选择不镜像表决磁盘?
    • 表决盘位置Q?ocfs/clusterware/votingdisk
  9. 摘要Q单?Install?/li>
  10. 执行配置脚本Q以 root 用户w䆾按顺序执行以下脚本(一ơ执行一个)。在当前脚本完成后,再l执行下一个脚本?
    • ?rac1 上执?/u01/app/oracle/oraInventory/orainstRoot.sh?/li>
    • ?rac2 上执?/u01/app/oracle/oraInventory/orainstRoot.sh?/li>
    • ?rac1 上执?/u01/app/oracle/product/10.2.0/crs_1/root.sh?/li>
    • ?rac2 上执?/u01/app/oracle/product/10.2.0/crs_1/root.sh?/li>
    rac2 上的 root.sh 脚本会自动调?VIPCAQ但会因?#8220;The given interface(s), "eth0" is not public.Public interfaces should be used to configure virtual IPs.”错误而失败。如果您的公共接口用不可\q IP 地址 (192.168.x.x)Q则 Oracle 集群验证实用E序 (CVU) 无法找到合适的公共接口。一U解x法是手动q行 VIPCA?/li>
  11. ?root 用户w䆾在第二个节点上手动调?VIPCA?br />

  12. 配置助手q度对话框:配置完成后,单击 OK?/li>
  13. 配置l果Q单?Exit?/li>
  14. q回?rac1 的执行配|脚本屏q,然后单击 OK?

    ?7

  15. 配置助手Q验证所有检查均成功。OUI 在最后会执行集群件安装后查。如?CVU p|Q请更正问题Qƈ?oracle 用户w䆾重新q行以下命oQ?
    rac1-> /u01/app/oracle/product/10.2.0/crs_1/bin/cluvfy stage 
    -post crsinst -n rac1,rac2

    Performing post-checks for cluster services setup

    Checking node reachability...
    Node reachability check passed from node "rac1".

    Checking user equivalence...
    User equivalence check passed for user "oracle".

    Checking Cluster manager integrity...

    Checking CSS daemon...
    Daemon status check passed for "CSS daemon".

    Cluster manager integrity check passed.

    Checking cluster integrity...

    Cluster integrity check passed

    Checking OCR integrity...

    Checking the absence of a non-clustered configuration...
    All nodes free of non-clustered, local-only configurations.

    Uniqueness check for OCR device passed.

    Checking the version of OCR...
    OCR of correct Version "2" exists.

    Checking data integrity of OCR...
    Data integrity check for OCR passed.

    OCR integrity check passed.

    Checking CRS integrity...

    Checking daemon liveness...
    Liveness check passed for "CRS daemon".

    Checking daemon liveness...
    Liveness check passed for "CSS daemon".

    Checking daemon liveness...
    Liveness check passed for "EVM daemon".

    Checking CRS health...
    CRS health check passed.

    CRS integrity check passed.

    Checking node application existence...

    Checking existence of VIP node application (required)
    Check passed.

    Checking existence of ONS node application (optional)
    Check passed.

    Checking existence of GSD node application (optional)
    Check passed.

    Post-check for cluster services setup was successful.
  16. 安装l束Q单?Exit?/li>

8. 安装 Oracle 数据?10g W?2 ?/h2>

下蝲后,?rac1 上以 oracle 用户w䆾执行

rac1-> /u01/staging/database/runInstaller
  1. Ƣ迎面Q单?Next?/li>
  2. 选择安装cdQ?
    • 选择 Enterprise Edition?/li>
  3. 指定 Home 详细内容Q?
    • 名称QOraDb10g_home1
    • 路径Q?u01/app/oracle/product/10.2.0/db_1
  4. 指定g集群安装模式Q?
    • 选择 Cluster Installation?/li>
    • 单击 Select All?/li>
  5. 特定于品的必要条g查:
    • 忽略有关物理内存要求的警告?/li>
  6. 选择配置选项Q?
    • 创徏数据库?/li>
  7. 选择数据库配|:
    • 选择 Advanced?/li>
  8. 摘要Q单?Install?/li>
  9. 数据库模板:
    • 选择 General Purpose?/li>
  10. 数据库标识:
    • 全局数据库名Uͼdevdb
    • SID 前缀Qdevdb
  11. 理选项Q?
    • 选择 Configure the Database with Enterprise Manager?/li>
  12. 数据库证书:
    • 针对所有帐户用相同的口o?/li>
  13. 存储选项Q?
    • 选择 Automatic Storage Management (ASM)?/li>
  14. 创徏 ASM 实例Q?
    • SYS 口oQ?lt;输入 SYS 口o>?/li>
    • 选择 Create initialization parameter file (IFILE)?/li>
  15. ASM 盘l:
    • 单击 Create New?/li>
  16. 创徏盘l:
    创徏两个盘l??DG1 ?RECOVERYDEST?br />
    • 盘l名UͼDG1
    • 选择 Normal 冗余?/li>
    • 选择盘路径 ORCL:VOL1 ?ORCL:VOL2。如果您已经使用标准 Linux I/O 配置?ASM 盘Q则请选择 /u01/oradata/devdb/asmdisk1 ?/u01/oradata/devdb/asmdisk2?/li>
    • 单击 OK?/li>

?8

  • 盘l名UͼRECOVERYDEST?/li>
  • 选择 External 冗余?/li>
  • 选择盘路径 ORCL:VOL3。如果您已经使用标准 Linux I/O 配置?ASM 盘Q则请选择 /u01/oradata/devdb/asmdisk3?/li>
  • 单击 OK?/li>

?9

  1. ASM 盘l:单击 Next?/li>

?10

  1. 数据库文件位|:
    • 选择 Use Oracle-Managed Files?
      • 数据库区域:+DG1
  2. 恢复配置Q?
    • 选择 Specify Flash Recovery Area?
      • 闪回恢复区:+RECOVERYDEST
      • 闪回恢复区大:1500M
    • 选择 Enable Archiving?/li>
  3. 数据库内容:
    • 选择或取消选择CZ模式?/li>
  4. 数据库服务:
    • 单击 Next。稍后,您可以?DBCA ?srvctl 创徏或修改其他服务?/li>
  5. 初始化参敎ͼ
    • 选择 Custom?
      • ׃n内存理QAutomatic
      • SGA 大小Q?00MB
      • PGA 大小Q?5MB
    • b. Ҏ需要修改其余参数?/li>
  6. 数据库存储:单击 Next?/li>
  7. 创徏选项Q?
    • 选择 Create Database?/li>
    • 单击 Finish?/li>
  8. 摘要Q单?OK?/li>
  9. 数据库配|助手:单击 Exit?/li>

?11

?12

  1. 执行配置脚本Q以 root 用户w䆾执行下面的脚本?
    • ?rac1 上执?/u01/app/oracle/product/10.2.0/db_1/root.sh?/li>
    • ?rac2 上执?/u01/app/oracle/product/10.2.0/db_1/root.sh?/li>
  2. q回?rac1 的执行配|脚本屏q,然后单击 OK?/li>
  3. 安装l束Q单?Exit?/li>

?13

恭喜Q您已经?Enterprise Linux 上成功安装了 Oracle RAC 数据?10gQ?/p>

我装的还是比较顺利的,主要是cluster ware那里因ؓ节点名字的原因导致在q程ssh 安装的时候要输入密码.所以远E安装失?要么保证那几个ssh xx date命o都需要密?要么q接用最单的节点名字.

其它参考:

Oracle Enterprise Linux ?iSCSI 上构建您自己?Oracle RAC 集群

http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac11gr1_iscsi.html



沉香江南 2010-12-09 11:37 发表评论
]]>使用 VMware Server ?Linux 上安?Oracle RAC 10g(一)http://www.aygfsteel.com/lz408925352/articles/340119.html沉香江南沉香江南Thu, 09 Dec 2010 03:36:00 GMThttp://www.aygfsteel.com/lz408925352/articles/340119.htmlhttp://www.aygfsteel.com/lz408925352/comments/340119.htmlhttp://www.aygfsteel.com/lz408925352/articles/340119.html#Feedback0http://www.aygfsteel.com/lz408925352/comments/commentRss/340119.htmlhttp://www.aygfsteel.com/lz408925352/services/trackbacks/340119.html

如下文档摘自oracle官方|?

作者:Vincent Chan

2007 q?1 月发?/span>

?10 月䆾 Oracle OpenWorld 2006 上推介的 Oracle 坚不可摧?Linux 旨在?Red Hat Linux 提供企业U支持服务,更快C复错误,以及显著降低支持h。此外,Oracle 自己?Enterprise LinuxQ基于包含额外错误修补的 Red Hat Advanced Server W?4 ?(Update 4)Q提供免?a class="bodylink" >下蝲?/p>

因此Q现在可以通过 VMware ServerQVMware 提供的一个免费虚拟环境)在家用电脑上免费使用q行?Red Hat Advanced Server 上的 Oracle 真正应用集群 (RAC) 10g?/p>

VMware Server 允许您在一台物理计机上运行多个操作系l。每个虚拟机都是一个独立的操作环境Qƈ带有一l自q虚拟lgQ如盘、处理器和内存。虚拟技术在计算环境?十分有用Q它允许您在同一物理L上独立地开发和试软g以防止数据或软g损坏。VMware 软gq泛地用于服务器整合Q以降低L有成本ƈ加快应用E序开发和试周期?/p>

在本指南中,您将了解如何安装和配|两个在 Enterprise Linux ?VMware Server 上运?Oracle RAC 10g W?2 版的节点。注意,本指南仅用于教学/评估目的QOracle 及其他供应商不会为本配置提供支持?br />
本指南分Z下几个部分:

  1. g要求和概q?/a>
  2. 配置W一个虚拟机
  3. 在第一个虚拟机上配|?Enterprise Linux
  4. 创徏q|第二个虚拟?/a>
  5. 配置 Oracle 自动存储理 (ASM)
  6. 配置 Oracle 集群文gpȝ (OCFS2)
  7. 安装 Oracle 集群?/a>
  8. 安装 Oracle 数据?10g W?2 ?/a>
  9. 探烦 RAC 数据库环?/a>
  10. 试透明应用E序故障切换 (TAF)
  11. 数据库备份与恢复
  12. 探烦 Oracle 企业理?(OEM) 数据库控制台
  13. 常见问题

1. g要求和概q?/h2>

我用的环境?

1 Red Hat Enterprise Linux AS 4 Update 7

2 Visual machine:vmware serve 1.0

3 Host: Winxp

4 Acer laptop 5580 3G

在本指南中,您将安装 32 ?Linux 客户操作pȝ。只有在L上运行的以下 64 位处理器支持 64 位客h作系l:

  • AMD Athlon 64 修订?D 或更高版?/li>
  • AMD Opteron 修订?E 或更高版?/li>
  • AMD Turion 64 修订?E 或更高版?/li>
  • AMD Sempron 64-bit-capable 修订?D 或更新的 Intel EM64T VT-capable 处理?/li>

如果您决定安?64 位客h作系l,L定上面列Z您的处理器。您q需要确保在 BIOS 中启用了虚拟技?(VT)。一些主制造商在默认情况下用了该技术?a class="bodylink" target="_blank">此处提供了有兛_理器兼容性的其他信息?br /> 要验证您的处理器是否受支持,请从 VMware |站下蝲处理器兼Ҏ检查工兗?/p>

为每个虚拟机臛_分配 700MB 内存Qؓ所有虚拟机预留臛_ 30GB 盘I间?/p>

L操作pȝ环境概况Q?/p>
L?/td> 操作pȝ 处理?/td> 内存 |卡
pacu Windows XP Professional Service Pack 2Q?2 位) Intel Pentium 4 550, 3.4MHz, HT 2 GB DDR2 SDRAM, 533 MHz 250 GB, Ultra ATA/133, 7200 RPM Intel Pro/1000 MT

客户操作pȝ环境概况Q?/p>
L?/td> 操作pȝ 处理?/td> 内存
rac1 Oracle Enterprise Linux 4Q?2 位) 1 700 MB
rac2 Oracle Enterprise Linux 4Q?2 位) 1 700 MB

虚拟盘布局概况Q?/p>
L操作pȝ上的虚拟盘 客户操作pȝ上的虚拟盘 虚拟讑֤节点 大小 (MB) 描述
d:vmraclocaldisk.vmdk /dev/sda1
/dev/sda2
/dev/sda3
SCSI 0:0 20 “/”挂蝲?br /> 交换I间
Oracle 二进制文?/td>
d:vmracsharedstorageocfs2disk.vmdk /dev/sdb SCSI 1:0 512 OCFS2 盘
d:vmracsharedstorageasmdisk1.vmdk /dev/sdc SCSI 1:1 3072 ASM 盘l?1
d:vmracsharedstorageasmdisk2.vmdk /dev/sdd SCSI 1:2 3072 ASM 盘l?1
d:vmracsharedstorageasmdisk3.vmdk /dev/sde SCSI 1:3 2048 ASM 闪回恢复?/td>

Q要配置׃n存储Q客?OS 不能与共享存储共享同一?SCSI ȝ。指定客?OS 使用 SCSI0Q共享磁盘?SCSI1。)

RAC 数据库环境概况:

L?/td> ASM 实例?/td> RAC 实例?/td> 数据库名 数据库文件存?/td> OCR 与表决磁?(Voting Disk)
rac1 +ASM1 devdb1 devdb ASM OCFS2
rac2 +ASM2 devdb2 devdb ASM OCFS2

您将在每个节点上安装 Oracle ȝ录供冗余使用。每个节点上?ASM ?Oracle RAC 实例׃n同一?Oracle ȝ录?/p>

2. 配置W一个虚拟机

要创建和配置W一个虚拟机Q您需要添加虚拟硬件设备,如磁盘和处理器。在l箋执行安装之前Q请创徏以下 windows 文g夹以存放虚拟机和׃n存储?/p>

D:>mkdir vmracrac1
D:>mkdir vmracrac2
D:>mkdir vmracsharedstorage

双击桌面上的 VMware Server 图标以启动应用程序:

  1. ?CTRL-N 创徏一个新的虚拟机?/li>
  2. 新徏虚拟机向|单击 Next?/li>
  3. 选择适当的配|:
    1. 虚拟机配|:选择 Custom?/li>
  4. 选择客户操作pȝQ?
    1. 客户操作pȝQ选择 Linux?/li>
    2. 版本Q选择 Red Hat Enterprise Linux 4?/li>
  5. 命名虚拟机:
    1. 虚拟机名Uͼ输入“rac1”?/li>
    2. 位置Q输?#8220;d:vmracrac1”?/li>
  6. 讄讉K权限Q?
    1. 讉K权限Q选择 Make this virtual machine private?/li>
  7. 启动/关闭选项Q?
    1. 虚拟机帐P选择 User that powers on the virtual machine?/li>
  8. 处理器配|:
    1. 处理器:选择一个处理器?/li>
  9. 虚拟机内存:
    1. 内存Q选择 700MB?font color="#ff0000">(最?G)
  10. |络cdQ?
    1. |络q接Q选择 Use bridged networking?/li>
  11. 选择 I/O 适配器类型:
    1. I/O 适配器类型:选择 LSI Logic?/li>
  12. 选择盘Q?
    1. 盘Q选择 Create a new virtual disk?/li>
  13. 选择盘cdQ?
    1. 虚拟盘cdQ选择 SCSI (Recommended)?/li>
  14. 指定盘定wQ?
    1. 盘定wQ输?#8220;20GB”?/li>
    2. 取消选择 Allocate all disk space now。ؓ了节省空_您现在不必分配所有磁盘空间?/li>
  15. 指定盘文gQ?
    1. 盘文gQ输?#8220;localdisk.vmdk”?/li>
    2. 单击 Finish?/li>

重复步骤 16-24 以创建四个虚?SCSI 盘 ?ocfs2disk.vmdk (512MB)、asmdisk1.vmdk (3GB)、asmdisk2.vmdk (3GB) ?asmdisk3.vmdk (2GB)?/p>

  1. VMware Server 控制収ͼ单击 Edit virtual machine settings?/li>
  2. 虚拟|:单击 Add?/li>
  3. 新增g向导Q单?Next?/li>
  4. gcdQ?
    1. gcdQ选择 Hard Disk?/li>
  5. 选择盘Q?
    1. 盘Q选择 Create a new virtual disk?/li>
  6. 选择盘cdQ?
    1. 虚拟盘cdQ选择 SCSI (Recommended)?/li>
  7. 指定盘定wQ?
    1. 盘定wQ输?#8220;0.5GB”?/li>
    2. 选择 Allocate all disk space now?如果您希望节省空_则不必分配所有磁盘空间。出于性能斚w的考虑Q您需要ؓ每个虚拟׃n盘预先分配所有磁盘空间。特别是?Oracle 数据库创建期间或者当数据库的 DML zd较频J时Q如果共享磁盘的大小增长快速,虚拟机可能会间歇挂v一D较短的旉甚至崩溃Q这U情况很见Q?/li>
  8. 指定盘文gQ?
    1. 盘文gQ输?#8220;d:vmracsharedstorageocfs2disk.vmdk”?/li>
    2. 单击 Advanced?/li>
  9. 新增g向导Q?
    1. 虚拟讑֤节点Q选择 SCSI 1:0?/li>
    2. 模式Q选择 IndependentQ针Ҏ有共享磁盘选择 Persistent?/li>
    3. 单击 Finish?/li>

最后,额外d一个虚拟网卡以用于专用互联QƈU除软盘驱动器(如果有)?/p>

  1. VMware Server 控制収ͼ单击 Edit virtual machine settings?/li>
  2. 虚拟|:单击 Add?/li>
  3. 新增g向导Q单?Next?/li>
  4. gcdQ?
    1. gcdQ以太网适配器?/li>
  5. |络cdQ?
    1. L模式Q与L׃n的专用网l?font color="#ff0000"> (注意q里d的额外的|卡用的时HOST ONLY模式,前面的是使用bridge模式)
    2. 单击 Finish?/li>
  6. 虚拟|:
    1. 选择 Floppy q单?Remove?/li>
  7. 虚拟|:单击 OK?/li>

?1

修改虚拟机配|文件?/strong>q需要设|其他参C启用两个虚拟 RAC 节点之间的磁盘共享。打开配置文g d:vmracrac1Red Hat Enterprise Linux 4.vmxQƈd下面列出的粗体参数?/p>

config.version = "8"
virtualHW.version = "4"
scsi0.present = "TRUE"
scsi0.virtualDev = "lsilogic"
memsize = "700"
scsi0:0.present = "TRUE"
scsi0:0.fileName = "localdisk.vmdk"
ide1:0.present = "TRUE"
ide1:0.fileName = "auto detect"
ide1:0.deviceType = "cdrom-raw"
floppy0.fileName = "A:"
Ethernet0.present = "TRUE"
displayName = "rac1"
guestOS = "rhel4"
priority.grabbed = "normal"
priority.ungrabbed = "normal"

disk.locking = "FALSE"
diskLib.dataCacheMaxSize = "0"
scsi1.sharedBus = "virtual"


scsi1.present = "TRUE"
scsi1:0.present = "TRUE"
scsi1:0.fileName = "D:vmracsharedstorageocfs2disk.vmdk"
scsi1:0.mode = "independent-persistent"
scsi1:0.deviceType = "disk"
scsi1:1.present = "TRUE"
scsi1:1.fileName = "D:vmracsharedstorageasmdisk1.vmdk"
scsi1:1.mode = "independent-persistent"
scsi1:1.deviceType = "disk"
scsi1:2.present = "TRUE"
scsi1:2.fileName = "D:vmracsharedstorageasmdisk2.vmdk"
scsi1:2.mode = "independent-persistent"
scsi1:2.deviceType = "disk"
scsi1:3.present = "TRUE"
scsi1:3.fileName = "D:vmracsharedstorageasmdisk3.vmdk"
scsi1:3.mode = "independent-persistent"
scsi1:3.deviceType = "disk"
scsi1.virtualDev = "lsilogic"
ide1:0.autodetect = "TRUE"
floppy0.present = "FALSE"
Ethernet1.present = "TRUE"
Ethernet1.connectionType = "hostonly"

3. 在第一个虚拟机上安装ƈ配置 Enterprise Linux

因ؓ是安装的Red Hat Enterprise Linux AS 4 Update 7,所以后来需要添加很多需要的package(oracle EL自带了很多包)

?Oracle |站下蝲 Enterprise Linux q解压羃文gQ?/p>

  • Enterprise-R4-U4-i386-disc1.iso
  • Enterprise-R4-U4-i386-disc2.iso
  • Enterprise-R4-U4-i386-disc3.iso
  • Enterprise-R4-U4-i386-disc4.iso
  1. ?VMware Server 控制CQ双d面板上的 CD-ROM 讑֤Q然后选择W?1 张磁盘的 ISO 镜像 Enterprise-R4-U4-i386-disc1.iso?/li>
  2. VMware Server 控制収ͼ(最好以Iinux text 安装会快很多,不要期图形界?
    • 单击 Start this virtual machine?/li>
  3. ?Enter 键以囑Ş模式安装?/li>
  4. 跌介质试q启动安装?/li>
  5. Ƣ迎使用 Enterprise LinuxQ单?Next?/li>
  6. 语言选择Q?lt;选择语言首选项>?/li>
  7. 键盘配置Q?lt;选择键盘首选项>?/li>
  8. 安装cdQ自定义?/li>
  9. 盘分区讄Q?Disk Druid q行手动分区?
    • 警告Q单?Yes 初始化每个讑֤ ?sda、sdb、sdc、sdd ?sde?/li>
  10. 盘讄Q通过双击挂蝲点(/ ?/u01Q和交换I间?/dev/sda 可用I间来分?sda 驱动器上的磁盘空间。您E后ؓ OCFS2 ?ASM 配置其余驱动器?
    • d分区Q?
      • 挂蝲点: /
      • 文gpȝcdQext3
      • 开始柱面: 1
      • l束柱面Q?910
      • 文gpȝcdQSwap
      • 开始柱面: 911
      • l束柱面Q?1170
      • 挂蝲点:/u01
      • 文gpȝcdQext3
      • 开始柱面: 1171
      • l束柱面Q?2610

?2

  1. 引导加蝲E序配置Q仅选择默认?/dev/sda1Q其余选项均保留未选中状态?/li>
  2. |络配置Q?
    1. |络讑֤
      • 选择q编?eth0
        1. 取消选择 Configure Using DHCP?/li>
        2. 选择 Activate on boot?/li>
        3. IP 地址Q输?#8220;192.168.2.131”?/li>
        4. |络掩码Q输?#8220;255.255.255.0”?/li>
      • 选择q编?eth1
        1. 取消选择 Configure Using DHCP?/li>
        2. 选择 Activate on boot?/li>
        3. IP 地址Q输?#8220;10.10.10.31”?/li>
        4. |络掩码Q输?#8220;255.255.255.0”?/li>
    2. L?
      • 选择 manually q输?#8220;rac1.mycorpdomain.com”?/li>
    3. 杂项讄
      • |关Q输?#8220;192.168.2.1”?/li>
      • 首?DNSQ?lt;可?gt;
      • 备用 DNSQ?lt;可?gt;
  3. 防火墙配|:
    1. 选择 No Firewall。如果启用了防火墙,当您E后在设|期间尝试挂?ocfs2 文gpȝӞ可能会遇到错?#8220;mount.ocfs2:Transport endpoint is not connected while mounting”?/li>
    2. 启用 SELinux 吗?QActive?/li>
  4. 警告 ?无防火墙Q单?Proceed?/li>
  5. 其他语言支持Q?lt;选择所需的语a>?/li>
  6. 时区选择Q?lt;选择您的时区>
  7. 讄 Root 口oQ?lt;输入您的 root 口o>
  8. E序包组选择Q?font color="#ff0000">(最好全?
    1. 选择 X Window System?/li>
    2. 选择 GNOME Desktop Environment?/li>
    3. 选择 Editors?
      • 单击 Details q择您偏好的文本~辑器?/li>
    4. 选择 Graphical Internet?/li>
    5. 选择 Text-based Internet?/li>
    6. 选择 Office/Productivity?/li>
    7. 选择 Sound and Video?/li>
    8. 选择 Graphics?/li>
    9. 选择 Server Configuration Tools?/li>
    10. 选择 FTP Server?/li>
    11. 选择 Legacy Network Server?
      • 单击 Details?
        1. 选择 rsh-server?/li>
        2. 选择 telnet-server?/li>
    12. 选择 Development Tools?/li>
    13. 选择 Legacy Software Development?/li>
    14. 选择 Administration Tools?/li>
    15. 选择 System Tools?q些包都要去oracle 自己?
      • 单击 Details。除了默认选中的程序包外,再选择以下E序包?
        1. 选择 ocfs-2-2.6.9-42.0.0.0.1ELQUP 内核驱动E序Q,或者选择 ocfs-2-2.6.9-42.0.0.0.1ELsmpQSMP 内核驱动E序Q?/font>
        2. 选择 ocfs2-tools?/font>
        3. 选择 ocfs2console?/font>
        4. 选择 oracle oracleasm-2.6.9-42.0.0.0.1ELQUP 内核驱动E序Q,或者选择 oracleasm-2.6.9-42.0.0.0.1ELsmpQSMP 内核驱动E序Q?/font>
        5. 选择 sysstat?/font>
    16. 选择 Printing Support?/li>
  9. 准备安装Q单?Next?/li>
  10. 所需的安装介质:单击 Continue?/li>
  11. ??CD-ROMQ在 VMware Server 控制CQ按 CTRL-D 昄 Virtual Machine Settings。单?CD-ROM 讑֤q择W?2 张磁盘的 ISO 镜像 Enterprise-R4-U4-i386-disc2.isoQ然后是W?3 张磁盘的 ISO 镜像 Enterprise-R4-U4-i386-disc3.iso?/li>
  12. 安装l束Ӟ
    1. ?VMware Server 控制CQ按 CTRL-D 昄 Virtual Machine Settings。单?CD-ROM 讑֤q择 Use physical drive?/li>
    2. 单击 Reboot?/li>
  13. Ƣ迎面Q单?Next?/li>
  14. 许可协议Q选择 Yes, I agree to the License Agreement?/li>
  15. 日期和时_讄日期和时间?/li>
  16. 昄Q?lt;选择所需的分辨率>?/li>
  17. pȝ用户Q保留项目ؓIƈ单击 Next?/li>
  18. 其他 CDQ单?Next?/li>
  19. 完成讄Q单?Next?/li>

?3

恭喜Q您已经?VMware Server 上安装了 Enterprise LinuxQ?/p>

安装 VMware 工具?/strong>VMware 工具要求同步L和客h的时间?/p>

?VMware 控制CQ以 root 用户w䆾d?/p>

  1. 单击 VMQ然后选择 Install VMware Tools?/li>
  2. rac1 ?虚拟机:单击 Install?/li>
  3. 双击桌面上的 VMware Tools 图标?/li>
  4. cdromQ双?VMwareTools-1.0.1-29996.i386.rpm?/li>

?4

  1. 完成pȝ准备Q单?Continue?/li>
  2. 打开一个终端ƈ执行 vmware-config-tools.pl?
    • 输入所需的显C大?/li>

同步客户 OS 与主?OS 的时间?/strong>在安?Oracle 集群件和 Oracle 数据库Y件时QOracle 安装E序首先在本地节点上安装YӞ然后再将软gq程复制到远E节炏V如果两?RAC 节点的日期和旉未同步,您可能会收到cM于以下内容的错误?
"/bin/tar: ./inventory/Components21/oracle.ordim.server/10.2.0.1.0: time 
stamp 2006-11-04 06:24:04 is 25 s in the future"
要确保成功安?Oracle RACQ虚拟机上的旉必须与主Z的时间同步。执行下面的步骤Q以 root 用户w䆾同步旉?
  1. 执行“vmware-toolbox”以显C?VMware Tools Properties H口。在 Options 选项卡下Q选择 Time synchronization between the virtual machine and the host operating system。您应该发现 tools.syncTime = "TRUE" 参数已经q加到虚拟机配置文g d:vmracrac1Red Hat Enterprise Linux 4.vmx 中?/li>
  2. ~辑 /boot/grub/grub.confQƈ选项“clock=pit nosmp noapic nolapic”d到读取内?/boot/ 的那一行。您已经选项dC个内核,现在只需对特定内核进行更攏V?
    #boot=/dev/sda
    default=0
    timeout=5
    splashimage=(hd0,0)/boot/grub/splash.xpm.gz
    hiddenmenu
    title Enterprise (2.6.9-42.0.0.0.1.ELsmp)
    root (hd0,0)
    kernel /boot/vmlinuz-2.6.9-42.0.0.0.1.ELsmp ro
    root=LABEL=/ rhgb quiet clock=pit nosmp noapic nolapic
    initrd /boot/initrd-2.6.9-42.0.0.0.1.ELsmp.img
    title Enterprise-up (2.6.9-42.0.0.0.1.EL)
    root (hd0,0)
    kernel /boot/vmlinuz-2.6.9-42.0.0.0.1.EL ro root=LABEL=/
    rhgb quiet clock=pit nosmp noapic nolapic
    initrd /boot/initrd-2.6.9-42.0.0.0.1.EL.img
  3. 重新引导 rac1?
    # reboot
创徏 oracle 用户?/strong> ?root 用户w䆾执行
# groupadd oinstall
# groupadd dba
# mkdir -p /export/home/oracle /ocfs
# useradd -d /export/home/oracle -g oinstall -G dba -s /bin/ksh oracle
# chown oracle:dba /export/home/oracle /u01
# passwd oracle
New Password:
Re-enter new Password:
passwd: password successfully changed for oracle
创徏 oracle 用户环境文g?/strong>

/export/home/oracle/.profile

export PS1="`/bin/hostname -s`-> "
export EDITOR=vi
export ORACLE_SID=devdb1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORA_CRS_HOME=$ORACLE_BASE/product/10.2.0/crs_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:$ORA_CRS_HOME/bin:/bin:
/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin
umask 022
创徏文gpȝ目录l构?/strong>?oracle 用户w䆾执行
rac1-> mkdir p $ORACLE_BASE/admin 
rac1-> mkdir p $ORACLE_HOME
rac1-> mkdir p $ORA_CRS_HOME
rac1-> mkdir -p /u01/oradata/devdb

提高 Oracle 用户?shell 限制?/strong>使用文本~辑器将下面列出的行d?/etc/security/limits.conf?etc/pam.d/login ?/etc/profile。其他信息可以从文档中获得?/p>

/etc/security/limits.conf

oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
/etc/pam.d/login
session required /lib/security/pam_limits.so
/etc/profile
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
安装 Enterprise Linux 软gE序包?/strong>安装 Oracle 软g需要以下附加程序包。如果您已经安装?64 位版本的 Enterprise LinuxQ则安装E序应该已安装了q些E序包?
  • libaio-0.3.105-2.i386.rpm
  • openmotif21-2.1.30-11.RHEL4.6.i386.rpm

?ISO CD 解压~这些程序包Qƈ?root 用户w䆾执行下面的命令?/p>

# ls
libaio-0.3.105-2.i386.rpm openmotif21-2.1.30-11.RHEL4.6.i386.rpm
#
# rpm -Uvh *.rpm
warning: libaio-0.3.105-2.i386.rpm: V3 DSA signature: NOKEY, key ID b38a8516
Preparing...
########################################### [100%]
1:openmotif21
########################################### [ 50%]
2:libaio
########################################### [100%]
配置内核参数?/strong>使用文本~辑器将下面列出的行d?/etc/sysctl.conf。要使更改立即生效,h?options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180

要立卛_载模块,执行“下蝲 ASM 库,q以 root 用户w䆾安装 ASM RPM?br />

# rpm -Uvh oracleasmlib-2.0.2-1.i386.rpm
Preparing...
########################################### [100%]
1:oracleasmlib
########################################### [100%]

在这个阶D,您应该已l安装了以下 ASM E序包?/p>

[root@rac1 swdl]# rpm -qa | grep oracleasm
oracleasm-support-2.0.3-2
oracleasm-2.6.9-42.0.0.0.1.ELsmp-2.0.3-2
oracleasmlib-2.0.2-1
三个都要从oracle 下蝲

?ASM 盘映射原始讑֤?/strong>仅当您打用标?Linux I/O 创徏 ASM 盘Ӟ才需要原始设备映。创?ASM 盘的另一个方法是使用 Oracle 提供?ASM 库驱动程序。稍后,您将使用 ASM 库驱动程序配|?ASM 盘?

执行以下dQ将原始讑֤映射到先前创建的׃n分区。每ơ引导集节ҎQ原始设备都必须与块讑֤l定?/p>

以下行d?/etc/sysconfig/rawdevices 中?/p>

/etc/sysconfig/rawdevices

/dev/raw/raw1 /dev/sdc1
/dev/raw/raw2 /dev/sdd1
/dev/raw/raw3 /dev/sde1
要映射立即生效Q以 root 用户w䆾执行以下命oQ?
# /sbin/service rawdevices restart
Assigning devices:
/dev/raw/raw1 --> /dev/sdc1
/dev/raw/raw1: bound to major 8, minor 33
/dev/raw/raw2 --> /dev/sdd1
/dev/raw/raw2: bound to major 8, minor 49
/dev/raw/raw3 --> /dev/sde1
/dev/raw/raw3: bound to major 8, minor 65
done

# chown oracle:dba /dev/raw/raw[1-3]
# chmod 660 /dev/raw/raw[1-3]
# ls -lat /dev/raw/raw*
crw-rw---- 1 oracle dba 162, 3 Nov 4 07:04 /dev/raw/raw3
crw-rw---- 1 oracle dba 162, 2 Nov 4 07:04 /dev/raw/raw2
crw-rw---- 1 oracle dba 162, 1 Nov 4 07:04 /dev/raw/raw1

?oracle 用户w䆾执行

rac1-> ln -sf /dev/raw/raw1 /u01/oradata/devdb/asmdisk1
rac1-> ln -sf /dev/raw/raw2 /u01/oradata/devdb/asmdisk2
rac1-> ln -sf /dev/raw/raw3 /u01/oradata/devdb/asmdisk3

修改 /etc/udev/permissions.d/50-udev.permissions?/strong>?始设备在引导时会重新映射。默认情况下Q在引导时原始设备的拥有者将更改?root 用户。如果拥有者不?oracle 用户Q则 ASM 在访问共享分区时会出现问题。在 /etc/udev/permissions.d/50-udev.permissions 中ؓ原始?#8220;raw/*:root:disk:0660”d注释Q然后添加一个新?#8220;raw/*:oracle:dba:0660”?/p>

/etc/udev/permissions.d/50-udev.permissions

# raw devices
ram*:root:disk:0660
#raw/*:root:disk:0660
raw/*:oracle:dba:0660


沉香江南 2010-12-09 11:36 发表评论
]]>RHEL3 上配|?Oracle 10g Data Guard http://www.aygfsteel.com/lz408925352/articles/340096.html沉香江南沉香江南Wed, 08 Dec 2010 12:53:00 GMThttp://www.aygfsteel.com/lz408925352/articles/340096.htmlhttp://www.aygfsteel.com/lz408925352/comments/340096.htmlhttp://www.aygfsteel.com/lz408925352/articles/340096.html#Feedback0http://www.aygfsteel.com/lz408925352/comments/commentRss/340096.htmlhttp://www.aygfsteel.com/lz408925352/services/trackbacks/340096.html本文转蝲于:http://wxy0327.itpub.net/post/16888/92718
一?环境配置
primaryQ?br /> IPQ?92.168.0.120
CPUQ?个Intel(R) Xeon(TM) CPU 2.80GHz QHTQMemQ?G
SwapQ?G
DiskQ?30G

DBQOracle Database 10g Enterprise Edition Release 10.1.0.3.0 - Prod
OSQLinux oracle 2.4.21-20.ELsmp #1 SMP

standbyQ?br /> IPQ?92.168.0.101
CupQ?个Intel(R) Xeon(TM) CPU 2.40GHz QHTQ?
MemQ?G
SwapQ?G
DiskQ?6G

DBQOracle Database 10g Enterprise Edition Release 10.1.0.3.0 - Prod
OSQLinux boss-3 2.4.21-15.ELsmp #1 SMP

Primary为正在用的生数据库,standby安装oracle软gQ但不徏立数据库?br />

二?建立物理备用数据?br /> 1Q?准备d的oracle环境Q?br /> ~辑oracle用户?HOME/.bash_profile文gQoracle相关环境变量如下Q?br /> ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_SID=BOSS; export ORACLE_SID
ORACLE_HOME=$ORACLE_BASE/product/10.1.0/Db_1; export ORACLE_HOME
export PATH=$ORACLE_HOME/bin:$PATH:
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
DISPLAY=10.1.9.59:0.0; export DISPLAY
NLS_LANG=american_america.ZHS16CGB231280; export NLS_LANG

2Q?修改d为归档模?br /> 建立归档目录Q?br /> mkdir -p /u02/oradata/BOSS/arch
修改归档模式Q?br /> archive log list;
create pfile from spfile;
~辑$ORACLE_HOME/dbs/initBOSS.ora
d下面一?br /> log_archive_dest_1='location=/u02/oradata/BOSS/arch'

sqlplus /nolog
conn sys as sysdba
shutdown immediate;
create spfile from pfile;
startup nomount;
alter database mount;
alter database archivelog;
alter database open;

3. 对主数据库做一ơ完整热备䆾Q获得备用数据库数据
RMAN>connect target
RMAN> backup database format='/home/oracle/%U_%s.bak';
RMAN> sql "Alter System Archive Log Current";
RMAN> Backup filesperset 10 ArchiveLog all format='/home/oracle/%U_%s.bak';

cd /home/oracle
scp *.bak 192.168.0.101:/home/oracle/


4. 在standby服务器准备环境与primary相同
~辑oracle用户?HOME/.bash_profile文gQoracle相关环境变量如下Q?br /> ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_SID=BOSS; export ORACLE_SID
ORACLE_HOME=$ORACLE_BASE/product/10.1.0/Db_1; export ORACLE_HOME
export PATH=$ORACLE_HOME/bin:$PATH:
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
DISPLAY=10.1.9.59:0.0; export DISPLAY
NLS_LANG=american_america.ZHS16CGB231280; export NLS_LANG

5. 准备相应目录Q如日志文g路径Q归档\径,参数文g路径Q数据文件准备存放\径等
$mkdir -p /u02/oradata/BOSS
$mkdir -p /u02/oradata/BOSS /arch
$mkdir -p $ORACLE_BASE/admin/BOSS
$mkdir -p $ORACLE_BASE/admin/BOSS/bdump
$mkdir -p $ORACLE_BASE/admin/BOSS/cdump
$mkdir -p $ORACLE_BASE/admin/BOSS/udump

6. 建立备用数据库参数文?br /> d的参数如下:
BOSS.__db_cache_size=339738624
BOSS.__java_pool_size=33554432
BOSS.__large_pool_size=4194304
BOSS.__shared_pool_size=218103808
*.background_dump_dest='/u01/app/oracle/admin/BOSS/bdump'
*.compatible='10.1.0.2.0'
*.control_files='/u02/oradata/BOSS/control01.ctl','/u02/oradata/BOSS/control02.ctl','/u02/oradata/BOSS/control03.ctl'
*.core_dump_dest='/u01/app/oracle/admin/BOSS/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='BOSS'
*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.db_writer_processes=4
*.dispatchers='(PROTOCOL=TCP) (SERVICE=BOSSXDB)'
*.global_names=FALSE
*.java_pool_size=32M
*.job_queue_processes=10
*.license_max_users=250
*.log_archive_dest_1='location=/u02/oradata/BOSS/arch'
*.log_archive_dest_2='SERVICE=dbstandby LGWR'
*.open_cursors=300
*.pga_aggregate_target=199229440
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=598736896
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/u01/app/oracle/admin/BOSS/udump'
*.utl_file_dir='/u01/app/oracle/admin/BOSS/bdump'

与主数据库不一L参数如下Q?br /> #standby database parameter
standby_file_management=AUTO
remote_archive_enable=TRUE
standby_archive_dest='/u02/oradata/BOSS/arch'
fal_server='DBPRIMARY'
fal_client='DBSTANDBY'

7. 从主服务器拷贝口令文件到备用服务?br /> $cd $ORACLE_HOME/dbs/
$scp orapwBOSS 192.168.0.101: /u01/app/oracle/product/10.1.0/Db_1/dbs

8. 配置|络q接
修改L务器?br /> /u01/app/oracle/product/10.1.0/Db_1/network/admin/listener.ora文g如下Q?br /> LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle)(PORT = 1521))
)
)
)

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/10.1.0/Db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = BOSS)
(ORACLE_HOME = /u01/app/oracle/product/10.1.0/Db_1)
(SID_NAME = BOSS)
)
)


LISTENERDB =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.120)(PORT = 1522))
)
)
)

SID_LIST_LISTENERDB =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = BOSS)
(ORACLE_HOME = /u01/app/oracle/product/10.1.0/Db_1)
(SID_NAME = BOSS)
)
)
$lsnrctl start
$lsnrctl status 查看监听状?

修改L务器?br /> /u01/app/oracle/product/10.1.0/Db_1/network/admin/tnsnames.ora文g如下Q?br /> BOSS =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = BOSS)
)
)

EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)

DBPRIMARY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.120)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = BOSS)
)
)

DBSTANDBY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.101)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = BOSS)
)
)

修改备用服务器的
/u01/app/oracle/product/10.1.0/Db_1/network/admin/listener.ora文g如下Q?br /> LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.101)(PORT = 1521))
)
)
)

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = BOSS)
(ORACLE_HOME = /u01/app/oracle/product/10.1.0/Db_1)
(SID_NAME = BOSS)
)
)

LISTENERDB =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.101)(PORT = 1522))
)
)
)

SID_LIST_LISTENERDB =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = BOSS)
(ORACLE_HOME = /u01/app/oracle/product/10.1.0/Db_1)
(SID_NAME = BOSS)
)
)

修改备用服务器的
/u01/app/oracle/product/10.1.0/Db_1/network/admin/tnsnames.ora文g如下Q?br /> DBPRIMARY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.120)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = BOSS)
)
)

DBSTANDBY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.101)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = BOSS)
)
)

在这里配|两个监听,一个用于主服务器到备用服务器的q接Q端口是1522Q?br /> 另外一个用于日后的切换需要,默认端口1521?br /> 启动1522 的端?br /> $lsnrctl start listenerdb
$lsnrctl status listenerdb 查看1522 端口上监听的状?

试:
在主和备用机上分别执?br /> tnsping dbprimary
tnsping dbstandby

9. 在主数据库创建备用服务器控制文g
alter database create standby controlfile as '/home/oracle/standby.ctl';
创徏后将控制文gcp(rcp or scp)到备用数据库所在的控制文g目录下?br /> ? scp control01.ctl 192.168.0.101:/u02/oradata/BOSS/
cp /u02/oradata/BOSS/control01.ctl /u02/oradata/BOSS/control02.ctl
cp /u02/oradata/BOSS/control01.ctl /u02/oradata/BOSS/control03.ctl

10. 启动备用数据?br /> conn sys as sysdba
create spfile from pfile;
startup nomount;
alter database mount standby database;
恢复数据?
RMAN> connect target;
RMAN> restore database;
RMAN> restore archivelog all;

如果有恢复的日志q想手工恢复Q可以运行如下命?br /> SQL>recover automatic standby database;
如果q程中出现如下类似错误,则可以忽?br /> ORA-00279: change 50775 generated at 06/08/2004 21:57:21 needed for thread 1
ORA-00289: suggestion : /u01/oracle/oradata/tbdb/archive/1_5.dbf
ORA-00280: change 50775 for thread 1 is in sequence #5
ORA-00278: log file '/u01/oracle/oradata/tbdb/archive/1_5.dbf' no longer needed
for this recovery
ORA-00308: cannot open archived log '/u01/oracle/oradata/tbdb/archive/1_5.dbf'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
因ؓ最后需要的日志Ҏ没有从主数据库送过?br />

q入到后台管理恢复状?br /> SQL>alter database recover managed standby database disconnect from session;


三、采用Lgwrq程传递联日志机的最大性能模式
1. 在备用数据库上创建备用日?br /> alter database recover managed standby database cancel;
alter database add standby LOGFILE GROUP 5 ('/u02/oradata/BOSS/stdy_redo05.log') size 10m;
alter database add standby LOGFILE GROUP 6 ('/u02/oradata/BOSS/stdy_redo06.log') size 10m;
alter database add standby LOGFILE GROUP 7 ('/u02/oradata/BOSS/stdy_redo07.log') size 10m;
alter database add standby LOGFILE GROUP 8 ('/u02/oradata/BOSS/stdy_redo08.log') size 10m;
alter database recover managed standby database disconnect from session;

2. 修改d的归档\?br /> alter system set LOG_ARCHIVE_DEST_2='SERVICE=dbstandby LGWR' scope=both;
另外Q如果考虑C后该库可能被切换到备用数据库Q也可以创徏同样的备用日?br /> l?
alter database add standby LOGFILE GROUP 5 ('/u02/oradata/BOSS/stdy_redo05.log') size 10m;
alter database add standby LOGFILE GROUP 6 ('/u02/oradata/BOSS/stdy_redo06.log') size 10m;
alter database add standby LOGFILE GROUP 7 ('/u02/oradata/BOSS/stdy_redo07.log') size 10m;
alter database add standby LOGFILE GROUP 8 ('/u02/oradata/BOSS/stdy_redo08.log') size 10m;

四、验证备用服务器是否工作
在主库上Q?br /> create user test identified by ftp123;
grant connect,resource to test;
conn test/ftp123@primary;
create table test(name varchar2(20));
insert into test values('hi, Data Guard');
commit;
conn / as sysdba;
alter system switch logfile;

查看从库日志
以只L式打开从库查看 insert into test values('hi, Data Guard'); 已经生效?br /> conn / as sysdba;
alter database recover managed standby database cancel;
alter database open read only;
conn test/ftp123
select * from test;

再次讄从库在恢复模式:
alter database recover managed standby database disconnect from session;

五、日常管?br /> 1. 备用服务器的理模式与只L?br /> Q?Q启动到理模式
SQL>shutdown immediate;
SQL>startup nomount;
SQL>alter database mount standby database;
SQL>alter database recover managed standby database disconnect from session;
Q?Q启动到只读方式
SQL>shutdown immediate;
SQL>startup nomount;
SQL>alter database mount standby database;
SQL>alter database open read only;
Q?Q如果在理恢复模式下到只读模式
SQL>recover managed standby database cancel;
SQL>alter database open read only;
q个时候,可以l数据库增加临时数据文gQ这个在热备份的时候是没有备䆾q来的)
?br /> alter tablespace temp add tempfile '/u02/oradata/BOSS/temp01.dbf' size 100M;
Q?Q从只读方式到管理恢复方?br /> SQL>recover managed standby database disconnect from session;

2. 备用服务器日志删?br /> 备用服务器的日志删除也必d心,因ؓ如果有些日志q没有被备用服务器应用而该日志?br /> 删除的话Q将引v备用数据库无法往下应用新的日志?br /> 删除备用服务器的日志的脚本ؓQ?br /> #!/bin/sh

# set env
cd $HOME
. .bash_profile

# start remove
cd $HOME/dbbat
grep "Media Recovery Log" $ORACLE_BASE/admin/$ORACLE_SID/bdump/alert_${ORACLE_SID}.log | awk '{print $4}'|sed -e 's/^/rm /' > rmarch
log.sh
chmod +x ./rmarchlog.sh
./rmarchlog.sh
cd $ORACLE_BASE/admin/$ORACLE_SID/bdump
cat alert_${ORACLE_SID}.log >>alert_${ORACLE_SID}.log.bak
echo ''>alert_${ORACLE_SID}.log
rm -f ./rmarchlog.sh

3. 日志延迟?br /> 备用服务器可能有q样的情况发生,因ؓ日志块逻辑损坏Q所以必d日志应用q行查,
防止日志应用被停止,防患于未Ӟ当然我们可以手工查,但是以下脚本则可以实现自?br /> 查(攑ֈcron中)
#!/bin/bash

# set env
cd $HOME
. .bash_profile

# start check
DATE=`date +%Y-%m-%d:%H:%M:%S`
filepath=/u02/oradata/$ORACLE_SID/arch/
logpath=$ORACLE_BASE/admin/$ORACLE_SID/bdump
remotefile=`ssh oracle@192.168.0.120 "ls -t /u02/oradata/BOSS/arch/*|head -1|sed -e 's/.*_1_//g' |sed -e 's/.arc$//g'"`

echo "CHECK TIME:"${DATE}
echo
echo "remote file : "$remotefile

cd $filepath
varfile=`ls -t | head -1|sed -e 's/.*_1_//g' |sed -e 's/.arc$//g'`
echo "archive file : "$filepath$varfile

cd $logpath
varlog=`grep "Media Recovery Log" alert_${ORACLE_SID}.log | awk '{print $4}' | tail -1 |sed -e 's/.*_1_//g' | sed -e 's/.arc$//g'`
echo "applice file : "$varlog

echo

echo >> $HOME/dblog/check_DG_log.log
echo "CHECK TIME:"${DATE} >> $HOME/dblog/check_DG_log.log
echo >> $HOME/dblog/check_DG_log.log
echo "remote file : "$remotefile >> $HOME/dblog/check_DG_log.log
echo "archive file : "$filepath$varfile >> $HOME/dblog/check_DG_log.log
echo "applice file : "$varlog >> $HOME/dblog/check_DG_log.log
echo >> $HOME/dblog/check_DG_log.log

六、主库与备库的正常切?br /> 注意QSwithover时只能先从Primary切到StandbyQ再从Standby切到Primary.
以下序不能颠倒,如果采用standby redo log的需要注意在切换前在L据库创徏同样的standby redo log?br /> 1Q切换之前先要准备init参数文g
最单的办法是把两个数据库的文件互换,在一个机器上同时保留L据库的初始化文g
与备用数据库的初始化文g?br />
2. 从Primary切换到standby的脚本:
[oracle@db worksh]$ more swithstandby.sh
#!/bin/bash
cd $HOME
. .bash_profile
sqlplus /nolog < connect / as sysdba
alter database commit to switchover to physical standby with session shutdown;
shutdown immediate;
create spfile from '/u01/app/oracle/product/10.1.0/Db_1/dbs/inittbdbsdby.ora';
startup nomount;
alter database mount standby database;
recover managed standby database disconnect;
exit
EOF
lsnrctl stop
lsnrctl start listenerdb

3. 修改ȝ的tnsnames.ora 主库IPQ?92.168.0.120 与备库IPQ?92.168.0.101 Ҏ(?20 ?101 对调卛_)

4. 从standby切换到primary的脚本:
$ more switchprimary.sh
#!/bin/bash
cd $HOME
. .bash_primary
sqlplus /nolog < connect / as sysdba
alter database commit to switchover to primary;
shutdown immediate;
create spfile from '/u01/app/oracle/product/10.1.0/Db_1/dbs/inittbdbprim.ora';
startup;
exit
EOF
lsnrctl stop listenerdb
lsnrctl start

5. 修改备用端的tnsnames.ora 主库IPQ?92.168.0.120 与备库IPQ?92.168.0.101 Ҏ(?120 ?101 对调卛_)
q样切换的要求是L和备机各有两个listener, listener 监听1521Qlistenerdb 监听1522Q见
上面的配|过E)QQ何一个节点,在primary期间启动listener, standby 期间启动listenerdb?br /> q接data guard的客L的tnsnames配置Q这样就可以实现p|切换Q对客户端是透明的:
BOSS =
(DESCRIPTION =
(failover = on )
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ?(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = ?(PORT = 1521))
)
(CONNECT_DATA =
(SID = BOSS)
)

七、备库的p|切换
1. p|切换
一般指L务器已经不能使用Q必d换到备用服务器,所以,只操作备用服务器q一
端,以下提供一切换脚本
$ more switchprimary.sh
#!/bin/bash
cd $HOME
. .bash_profile
sqlplus /nolog < connect / as sysdba
recover managed standby database cancel;
-- if standby have Standby redo logfile
--alter database recover managed standby database finish;
-- else
alter database recover managed standby database finish skip standby logfile;
-- switch
alter database commit to switchover to primary;
-- open
shutdown immediate;
create spfile from '/u01/app/oracle/product/10.1.0/Db_1/dbs/inittbdbprim.ora';
startup;
exit
EOF
lsnrctl stop listenerdb
lsnrctl start
最后改tnsnames.ora 主库IPQ?92.168.0.120 与备库IPQ?92.168.0.101 Ҏ(?20 ?01 对调卛_)
说明Q?br /> Q?Q如果在备用端有zd的未归档的日志,或者有从主数据库拷贝过来的联机日志Q可以采
用如下的办法注册q恢?br /> SQL> ALTER DATABASE REGISTER LOGFILE '/u01/oracle/oradata/tbdb/archive/1_87.dbf';
SQL>recover standby database;
Q?Q如果有zd日志Q必ȝ
alter database recover managed standby database finish;
否则?br /> alter database recover managed standby database finish skip standby logfile;
q样切换的备用服务器可以避免最的数据丢失和不用resetlogsQ特别是对于用多个备
用服务器的时候,该服务器可以马上作ؓL务器而不用重新创建备用服务器?br />
2. 切换Q激z)
q样的切换是以激和备用服务器来完成的Q在重新启动数据库的时候,备用Z
resetlogsQ这样会影响到其它备用服务器而且必须重新在主服务器上重新构造备用服务器Q?br /> 一般不q样做?br /> $ more activeprimary.sh
#!/bin/bash
#swith to primary with cancel
cd $HOME
. .bash_profile
#cancel and startup database
sqlplus /nolog < connect / as sysdba
alter system archive log current;
recover managed standby database cancel;
alter database activate standby database;
shutdown immediate;
create spfile from '/u01/app/oracle/product/10.1.0/Db_1/dbs/inittbdbprim.ora';
startup;
exit
EOF
lsnrctl stop listenerdb
lsnrctl start

八、备用库的备份与恢复
1. 从备用库上恢复主库的数据文g
在某些情况下Q主服务器可能损坏一个或两个数据文gQ如果从L据库上的备䆾恢复Q理
Z也是可以的,但是可能会因为需要应用到太多的日志,实际耗时太大Q这个时候,我们
可以考虑从备份服务器上恢复该数据文gQ因为备份服务器与主数据库一般只相差一个日?br /> 文g左右?br /> Q?Q关闭备用数据库
recover managed standby database cancel;
shutdown immediate;
Q?Q拷贝或FTP损坏的数据文件到L据库
Q?Q在L据库recover database datafile '文g?卛_?br />
2. 在备用数据库上进行备?br /> 如果惛_M库的压力Q可以在备用数据库上q行备䆾Q因为备用控制文件的Ҏ关p,?br /> 对standby的rman备䆾中,不能修改rman的配|,所以没有办法自动备份控制文件?br /> 可以采用如下的方法备份:
Q?Q备份备用数据库Q可以停止恢复进E,跌{到read only模式下,通过backup database来备份数据库Q这L数据库处于一致性的模式下?br /> Q?Q采用恢复目录备份standby数据?br /> rman target sys@dbstandby
backup database format '/u02/oradata/rman_backup/full_%d_%T_s%s_p%p';
backup archivelog all delete input format '/u02/oradata/rman_backup/arc_%d_%T_s%s_p%p';
Q?Q如果采用控制文件做恢复目录Q注?br /> alter database backup controlfile to '/u02/oradata/rman_backup/ctl_%d_%T_s%s_p%p';



沉香江南 2010-12-08 20:53 发表评论
]]>百万U访问网站前期的技术准备(中)http://www.aygfsteel.com/lz408925352/articles/340093.html沉香江南沉香江南Wed, 08 Dec 2010 11:58:00 GMThttp://www.aygfsteel.com/lz408925352/articles/340093.htmlhttp://www.aygfsteel.com/lz408925352/comments/340093.htmlhttp://www.aygfsteel.com/lz408925352/articles/340093.html#Feedback0http://www.aygfsteel.com/lz408925352/comments/commentRss/340093.htmlhttp://www.aygfsteel.com/lz408925352/services/trackbacks/340093.html七、数据库

几乎所有操作最后都要落到数据库w上Q它又最难扩展(存储也挺难)。对于mysqlQ什么样的表用myisamQ什么样的表用innodbQ在开发之前要定。复制策略、分片策略,也要定。表引擎斚wQ一般,更新不多、不需要事务的表可以用myisamQ需要行锁定、事务支持的Q用innodb。myisam的锁表不一定是性能低下的根源,innodb也不一定全是行锁,具体l节要多看相关的文档Q熟悉了引擎Ҏ才能用的更好。现代WEB应用来复杂了Q我们设计表l构时常常设计很多冗余,虽然不符合传l范式,但ؓ了速度考虑q是值得的,要求高的情况下甚臌杜绝联合查询。编E时得多注意数据一致性?br />
复制{略斚wQ多d从结构也最好一开始就设计好,代码直接按照多主多从来编写,用一些小技巧来避免复制延时问题Qƈ且还要解军_数据库数据是否一_可以自己写或者找现成的运l工兗?/p>

分片{略。M有那么几个表数据量超大,q时分片必不可免。分片有很多{略Q从单的分区到根据热度自动调_依照具体业务选择一个适合自己的。避免自增ID作ؓ主键Q不利于分片?/p>

用存储过E是比较难扩展的Q这U情形多发生于传lC/SQ特别是OApȝ转换q来的开发h员。低成本|站不是一两台型一个数据库处理所有业务的模式Q是机v作战。方便水qx展比那点预分析时间和|络传输量要重要的多的多?/p>

NoSQL。这只是一个概c实际应用中Q网站有着来多的密集写操作、上亿的单关pL据读取、热备等Q这都不是传l关pL据库所擅长的,于是׃生了很多非关pd数据库,比如Redis/TC&TT/MongoDB/Memcachedb{,在测试中Q这些几乎都辑ֈ了每U至一万次的写操作Q内存型的甚?万以上。例如MongoDBQ几句配|就可以l徏一个复?自动分片+failover的环境,文档化的存储也简化了传统设计库结构再开发的模式。很多业务是可以用这cL据库来替代mysql的?/p>

八、缓存?/h3>

数据库很脆弱Q一定要有缓存在前面挡着Q其实我们优化速度Q几乎就是优化缓存,能用~存的地方,׃要再跑到后端数据库那折腾。缓存有持久化缓存、内存缓存,生成静态页面是最Ҏ理解的持久化~存了,q有很多比如varnish的分块缓存、前面提到的memcachedb{,内存~存Qmemcached首当其冲。缓存更新可用被动更新和d更新。被动更新的好处是设计简单,~存IZp动去数据库取数据再把~存填上Q但Ҏ引发雪崩效应Q一旦缓存大面积失效Q数据库的压力直U上升很可能挂掉。主动缓存可避免q点但是可能引发E序取不到数据的问题。这两者之间如何配合,E序设计要多动脑{?/p>

九、队列?/h3>

用户一个操作很可能引发一pd资源和功能的调动Q这些调动如果同时发生,压力无法控制Q用户体验也不好Q可以把q样一些操作放入队列,由另几个模块d步执行,例如发送邮Ӟ发送手机短信。开源队列服务器很多Q性能要求不高用数据库当做队列也可以,只要保证E序d队列的接口不变,底层队列服务可随时更换就可以Q类似Zend Framework里的Zend_Queuec,java.util.Queue接口{?/p>

十、文件存储?/h3>

除了l构化数据,我们l常要存攑օ他的数据Q像囄之类的。这cL据数量繁多、访问量大。典型的是囄Q从用户头像到用户上传的照片Q还要生成不同的~略囑ְ寸。存储的分布几乎跟数据库扩展一栯难。不使用专业存储的情况下Q基本都是靠自己的NAS。这涉及到l构。拿囄存储举例Q图片是非常Ҏ产生热点的,有些囄上传后就不再有h看,有些可能每天被访问数十万ơ,而且大量文件的异步备䆾也很耗费旉?/p>

Z来囄走cdn做准备,一开始最好就图片的域名分开Q且不用d名。很多网站都cookie讄C.domain.ltdQ如果图片也在这个域名下Q很可能因ؓcookie而造成~存失效Qƈ且占多余量Q还可能因ؓ览器ƈ发线E限刉成讉K~慢?/p>

如果用普通的文gpȝ存储囄Q有一个简单的Ҏ。计文件的hash|比如md5Q以l果W一位作为第一U目录,q样W一U有16个目录。从0到FQ可以把q个字母作ؓ域名Q?.yourimg.com到f.yourimg.comQ客Ldns压力会增大)Q还可以扩展到最?6个NAS集群上。第二可用q月例如Q?01011Q第三用日Q第四可选,Ҏ上传量,比如am/pmQ甚臛_时。最l的目录l构可能会是 e/201008/25/am/e43ae391c839d82801920cf.jpg。rsync备䆾时可以用脚本只同步某q某日某时的文gQ避免计大量文件带来的开销。当然最好是能用专门的分布式文gpȝ或更专业点的存储解决Ҏ?/p>

下面Q我们要谈谈代码了?/p>

沉香江南 2010-12-08 19:58 发表评论
]]>百万U访问网站前期的技术准备(下)http://www.aygfsteel.com/lz408925352/articles/340094.html沉香江南沉香江南Wed, 08 Dec 2010 11:58:00 GMThttp://www.aygfsteel.com/lz408925352/articles/340094.htmlhttp://www.aygfsteel.com/lz408925352/comments/340094.htmlhttp://www.aygfsteel.com/lz408925352/articles/340094.html#Feedback0http://www.aygfsteel.com/lz408925352/comments/commentRss/340094.htmlhttp://www.aygfsteel.com/lz408925352/services/trackbacks/340094.htmlq一pd的最后一写l普通编Eh员,如果不感兴趣可直接看本文最后几Dc?/p>

开始设计代码结构之前,先回一下之前准备过的事情:我们有负载均衡的WEB服务器,有主从DB服务器ƈ可能分片Q有~存Q有可扩展的存储。在l织代码的各个方面,跟这些准备息息相养I我一二三的列出来分别_q且每一条都?#8220;前面讲到”q个l典句式开_Z方便对照?br />
别着急看l典句式Q我思维跌了,插一Dc实际开发中Q我们M在性能和代码优雅性上作折中。对于当今的计算机和语言解释器,多几层少几层对象调用、声明变量ؓMapq是HashMapq种问题是最后才需要考虑的问题,永远要考虑pȝ最慢的部分Q从最慢的部分解决。例如看看你用的ORM是不是做了很多你用不到的事情Q是不是有重复的数据调用。我们做的是web应用开发,不是底层框架APIQ代码易L懂是保证质量很重要的一斚wQ你的程序是Z什么而设计,有不同的Ҏ……了Q这个话题另起一文章来_扯远了,想交可x我的微博 http://t.sina.com.cn/liuzhiyiQ咱l箋……

前面讲到QWEB服务器是要做负蝲均衡的,囄服务器是要分开的。对于这点,代码在处理客L状态时Q不要把状态放到单ZQD例,不要用文件sessionQ嗯Q常识。如果有可能Q最好在一开始就做好用户单点认证的统一接口Q包括跨域如何判断状态、静态页面如何判断状态,需要登录时的蟩转和q回参数定义Q底层给好接口,应用层直接就用(可参?a target="_blank">GAE的user服务Q。登录方面的设计要考虑Ud讑֤的特性,比如电脑可以用Q动层H口Q但NOKIA自带的浏览器或UCWEB无法处理这U表现Ş式,E序一定既能处理AJAXh又能直接通过URL来处理请求。图片服务器分开Q资源文件最好也布局到图片服务器Q也是WEB服务器只服务动态程序。虽然开发测试时E微复杂Q因为需要绝对URI才能讉KQ,但将来页面前端优化上会轻松许多,q且你的WEB服务器IO优化也轻松许多。程序引用资源文件时Q要有一个统一的处理方法,在方法内部可以自动完成很多事情,例如css/jsҎl合Q拼成一个文Ӟ或者自动在生成的URI后面加上QUERYSTRINGQ如果将来前端用了缓存服务,那生成QUERYSTRING是最单的h服务端缓存和客户端缓存的办法?/p>

前面讲到Q数据库会有复制Q可能会多主多从Q可能会分片。我们程序在处理数据的过E中Q最好能抽象出来单独攑ց一层。拿现在行的MVC模式来说Q就是在M层下方再放一个数据层Q这个数据层不是通常所说的JDBC/PDO/ActiveRecord{,而是你自q存取数据层,仅对外暴露方法,隐藏数据存取l节。这个数据层内部不要怕写的难看,但一定要提供所有的数据存储功能Q其他Q何层ơ不要看到跟数据库打交道的字眹{之所以这样做Q是因ؓ在单关系数据库的情况下,可能会SELECT…JOIN…或直接INSERT…INTO…Q可你可能会一些表攑ֈkey-value数据库里存储Q或者分片,q么做之后原来的语句和方式要全部改变Q如果过于分散,则移植时会耗费很大_֊Q或得到一个很大的Model。在数据层面的设计上Q尽量避免JOIN查询Q我们可以多做冗余,多做~存Q每U数据尽量只需要一ơ查询,然后在你的程序里面进行组合。对于比较复杂的数据l合Q在实时性要求不高的情况下,可采用异步处理,用户讉K时只取处理后的结果。在对于主键的处理上Q避免用自增IDQ可以用一定规则生成的唯一值当做主键,q种主键是最单的分片分布{略。即使用自增IDQ也最好用一个自增ID发生器,否则从数据库不小心被写了一下,那主键很Ҏ冲突?/p>

前面讲到Q咱数据库前面还有某些缓存挡着。别把mysql的query cache当缓存,应用E复杂的时候QUERY CACHE反而会成ؓ累赘。缓存跟数据库和业务l合的很紧密Q正因ؓ跟业务关pȝ密,所以这Ҏ有放之四皆准的Ҏ。但我们q是有一些规则可参照。规则一Q越接近前端Q缓存的颗粒度越大。例如在WEB最前端~存整个面Q再往后一层缓存部分页面区域,再往后缓存区域内的单条记录。因靠近后端Q我们的可操作性越灉|Qƈ且变化最多的前端代码也比较方便编写。在实践中,因ؓ产品需求变化速度非常快,q代周期来短Q有时很隑ְController和Model分的那么清楚QController层面处理部分~存必不可免Q但要保证如果出现这U情况,Controller所操作的缓存一定不要媄响其他数据需求方Q也是要保证这个缓存数据只有这一个Controller在用。规则二Q没有缓存时E序不能出错。在不考虑~存失效引发的雪崩效应时Q你的程序要有缓存跟没缓存一个样Q不能像新浪微博一P~存一失效Q粉丝微博全I,整个应用都ؕ套了。在~存必不可少的情况下Q给用户出错信息都比l一个让解的信息强。规则三Q缓存更新要保证原子性或UCU程安全Q特别是采用被动~存的方式时Q很可能两个用户讉K时导致同一个缓存被更新Q通常情况q不是大问题Q可~存失效后重建时很可能是引发q锁反应的原因之一。规则四Q缓存也是有成本的。不只是技术成本,q有人工旉成本。如果一个功能用缓存和不用,在可预见的访问量情况下区别微,但用缓存会使复杂度增加Q那׃用,我们可以加个TODO标注Q在下次q代的时候加上缓存处理?/p>

前面讲到Q文件存储是独立的,那么所有的文g操作都是远E调用。可以在文g服务器上提供一个很单的RESTful接口Q也可以提供xmlrpc或json serveiceQWEB服务器端所生成和处理的文gQ全部通过接口通知文g服务器去处理QWEB服务器本w不要提供Q何文件存储。你会发现很多大|站的上传图片跟保存文章是分两步完成的,是Zq个原因?/p>

以上几条“前面讲到”Q其实无Ch都讲q,我也只是l合前几文章用自己的话重复了一遍,真正分析h_N很简单——除了良好的功能逻辑分层Q我们还要ؓ数据库存储、缓存、队列、文件服务等E序外层资源调用单独设计接口Q你可以把你的程序想象成是运行在 Amazon EC2 上ƈ用他的所有web service服务Q你的数据库是它的SimpleDBQ你的队列就是他?a target="_blank">SQSQ你的存储就是他?a target="_blank">S3Q唯一不同是amazon的接口是q程调用Q你的是内部调用?/p>

支撑服务接口化Q意味着MySQL更换?a target="_blank">PostgreSQL不需要更改业务处理程序,UL团队甚至不需要跟业务开发团队过多沟通;意味着业务开发团队是Ҏ口编E而不是对数据库编E;意味着不会因ؓ某个业务开发h员的p而拖垮性能?/p>

对程序扫盲不感兴的直接看这里—?/strong>

产品设计完了Q程序框架搭完了Q可能有矛盾在这个节骨眼儿生了。不断有产品设计抱怨说他的创意没实现到预期效果Q有E序员抱怨说产品设计不切实际。这U抱怨多~于产品人员不懂技术,技术h员不理解产品。从q义上来Ԍ产品包含市场{略、营销手段、功能设计,产品和技术在争论时往往把焦Ҏ在功能上Q而实际重ҎQ实现这个功能所消耗的成本跟能q个功能带来的利益能否换,能否取其轻重。若可以Q争议解冟뀂若不能Q则抛硬币看q气。因Z个功能的加强而引发指标井P或因目拖g而导致贻误战机的例子比比皆是。激q的决策者注重利益,保守的决{者注重损失,聪明的决{者会考虑q个问题是否真的那么严重?/p>

关系到未来的事情谁都说不准,要不怎么说创业一半靠q气呢。不qL能说的准的事情,那就得靠数据说话?/p>

没有100%也有99.9%的网站安装了讉Kl计代码Q连我的 http://zhiyi.us 也不例外Q新闻联播也总说U学决策U学发展的。有了统计,能确定的事情很多了。例如,可以Ҏ来源-目标转化率来分析哪类渠道的h均获取成本低Q根据来?内容讉K猜测用户跛_率原因,Ҏ用户点击行ؓ判断链接位置是否合理{。将数据以不同方式组合v来,扑ֈ内在联系Q分析内因外因,制定对应{略Q减拍脑门决策。靠数据支撑q营是个非常专业的事情,虽然不懂深奥的数学模型不会复杂的公式计算Q渐渐学会因为A所以BQ因为A和B所以Cq是相对单的?br />
转蝲h明出?http://zhiyi.us/internet/thinking-twice-before-building-your-site-final.html



沉香江南 2010-12-08 19:58 发表评论
]]>
百万U访问网站前期的技术准备(上)http://www.aygfsteel.com/lz408925352/articles/340092.html沉香江南沉香江南Wed, 08 Dec 2010 11:57:00 GMThttp://www.aygfsteel.com/lz408925352/articles/340092.htmlhttp://www.aygfsteel.com/lz408925352/comments/340092.htmlhttp://www.aygfsteel.com/lz408925352/articles/340092.html#Feedback0http://www.aygfsteel.com/lz408925352/comments/commentRss/340092.htmlhttp://www.aygfsteel.com/lz408925352/services/trackbacks/340092.html开了自己域名的博客Q第一就得来个重一点的才对得vq?金的域名。作Z个技术从业者十q_逛了十年发现有些知识东一榔头西一槌的得满世界看个遍才整理出个头l,那咱ql点的从头一步一步的_一个从日几千访问的小|站Q到日访问一两百万的网站,怎么才能让它qx的度q这个阶D,别在技术上出现先天不Q写l一些技术h员,也写l不懂技术的创业者?/p>

转蝲h明出?http://zhiyi.us Q假如您q想从这转到好文章的话?/p>

对互联网有了解的人都有自qxQ有人就把想法付诸实玎ͼ做个|站然后开始运营。其实从U网站技术上来说Q因为开源模式的发展Q现在徏一个小|站已经很简单也很便宜。当讉K量到达一定数量的时候成本就开始飙升了Q问题也开始显C。因为带宽的增加、硬件的扩展、h员的扩张所带来的成本提高是显而易见的Q而还有相当大的一部分成本是因Z码重构、架构重构,甚至底层开发语a更换引v的,最惨的是数据丢失Q辛辛苦苦好几年Q一夜回到创业前?/p>

减少成本是增加利润。很多事情,我们在一开始就可以避免Q先打好基础Q往后可以省很多_֊Q少操很多心?/p>

假设你是一个参与创业的技术h员,当前一I二白,什么都要自己做Q自己出钱,初期几十万的资金Q做一个应用不是特别复杂的|站Q那么就要注意以下几点:

一、开发语a

一般来_技术h员(E序员)创业都是Ҏ自己技术背景选择自己最熟悉的语aQ不q考虑C可能永远是您一个h写程序,q点q得仔细x。无论用什么语aQ最l代码质量是看管理,所以我们还是从U语a层面来说实际一炏V现在流行的java?a target="_blank">php?a target="_blank">.net?a target="_blank">python?a target="_blank">ruby都有自己的优劣,python和rubyQ现在h员还是相寚w招一些,性能优化也会费些力气Q?netq_C起windows server。java、php用的q是最多。对于初期,应用几乎都是靠前端支撑的|站来说Qphp的优势稍大一些,入门单、设计模式简单、写h快、性能_{,不过不注重设计模式也是它的劣势,Ҏ变得松散Q隐藏bugE多、难以维护。java的优势在于整套管理流E已l有很多成熟工具来辅助,强类型也能避免一些弱智BUGQ大多数JAVAE序员比较注重设计模式,别管实不实际Q代码格式看hq是不错的。这也是个劣势,初学者可能太注重模式而很难解军_际需求?/p>

前端不只是html、cssq类。整个负责跟用户交互的部分都是前端,包括处理E序。这cȝ序还是徏议用phpQ主要原因就是开发迅速、从业h员广泛。至于后端例如行为分析、银行接口、异步消息处理等Q随便用什么程序,那个只能是根据不同业务需求来选择不同语言了?/p>

二、代码版本管?/h3>

如果开发h员之间的|络速度差不多,?a target="_blank">SVNQ比较分散例如跨国,?a title="Mercurial SCM(hg)" target="_blank">hg。大多数是svn?

假设选了svnQ那么有几点考虑。一是采用什么树l构。初期可能只有一条主qԌ往后就需要徏立分支,例如一条开发分支,一条上U分支,再往后,可能要每个小l一个分支。徏议一开始h时选择两条分支Q开发和U上Q每个功能本地测试无误后提交到开发分支,最后统一试Q可以上U时合ƈCU分支。如果喜Ƣ把svn当做Ud盘用,写一点就commit一ơ也无所谓,是合ƈ的时候头大一些,q些人可以自己徏个分支甚臛_立个本地代码仓库Q随便往自己的分支提交,试完毕后再提交到开发分支上?/p>

部vQ可以手工部|也可以自动部v。手工部|相对简单,一般是直接在服务器上svn updateQ或者找个新目录svn checkoutQ再把web rootlln -sq去。应用越复杂Q部|越复杂Q没有什么统一标准Q只要别再用ftp上传那种形式好Q一是上传时文g引用不一致错误率增加Q二是很Ҏ出现开发h员的版本跟线上版本不一_D本来x个错字结果变成回滚的杯具。如果有多台服务器还是徏议自动部|Ԍ更换代码的机器从当前服务池中临时撤出Q更新完毕后再重新加入?/p>

不管目多小Q养成用版本管理的好习惯,最Lq可以当做你的备份,我的 http://zhiyi.us 虽然是一个wordpressQ可q是svn了,只改动一两句css那也是劳动成果?/p>

三、服务器g

别M慕大客户和有׃hQ看看机房散户区Q一台服务器孤独的支撑的|站C清。如果资金稍微充I臛_三台的标准配|,分别用作web处理、数据库、备份。web服务器至要8G内存Q双sata raid1Q如果经稍微宽松,或静态文件或囄多,?5k sas raid1+0。数据库臛_16G内存Q?5k sas raid 1+0。备份服务器最好跟数据库服务器同等配置。硬件可以自׃品牌的底板,也就是机配L和硬盘盒QCPU内存盘都自己配Q也可以上整套品牌,也可以兼Ҏ。三台机器,市场行情6?万也配齐了?/p>

web服务器可以既跑程序又当内存缓存,数据库服务器则只跑主数据库(假如?a title="MySQL Standard Edition" target="_blank">MySQL的话Q,备䆾服务器干的活q对多一些,web配置、缓存配|、数据库配置都要跟前两台一_q样WEB和数据库L一台出问题Q把备䆾服务器换个ip切换上M。备份策略,可以drbdQ可?a title="rsync" target="_blank">rsyncQ或者其他的很多很多的开源备份方案可选择。rsync最单,放cron里自pp。备份和切换Q徏议多做测试,选最安全最适合业务的,q且可能异地备份?/p>

四、机?/h3>

三种机房量不要选:联通访问特别慢的电信机ѝ电信访问特别慢的联通机ѝ电信联通访问特别慢的移动或铁通机ѝ那|通机房呢Q亲Q网通联通N久以前合q改叫联通了。多多寻找,实地参观Q多多测试,多方打探Q北京、上广州等各个主节点城市,q是有很多优质机房的Q找个网l质量好Q管理严格的机房Q特别是理要严|千万别网站无法访问了Q打个电话过L知道别hl护时把你网U碰掉了Q这比DOS都头疹{自己扯了几根光U就UCؓ机房的,看您抗风险程度和心理素质了。机房可以说是非帔R要,直接关系到网站访问速度Q网站访问速度直接关系到用户体验,我可以翻墙看风景Q但C|游vpn才能打开你这个还不怎么知名的网站就有难度了。或许您|站的ajax很出Ԍ可是document怎么也不readyQ一些代码永q绝~于用户?/p>

五、架?/h3>

初期架构一般比较简单,web负蝲均衡+数据库主?~存+分布式存?队列。大方向上也实p几样东西Q细节上也无数文章都重复q了Q按照将来会有N多WEBQN多主从关p,N多缓存,N多xxx设计pQ基本方案都是现成的Q只是您比其他h厉害之处在于设计上考虑到缓存失效时的雪崩效应、主从同步的数据一致性和旉差、队列的E_性和p|后的重试{略、文件存储的效率和备份方式等{意外情c缓存L一天会失效Q数据库复制L一天会断掉Q队列L一天会写不q去Q电源L一天会烧坏。根据墨菲定律,如果不考虑q些Q网站早晚会成ؓ茶几?/p>

六、服务器软g

Linux?a title="nginx" target="_blank">nginx、php、mysqlQ几乎是标配Q我们除了看名字Q还得选版本。Linux发行版众多,只要没特D要求,选个用的人最多的Q社区最z跃的,配置最方便的,软g包最全最新的Q例?a title="Debian" target="_blank">debian?a title="Ubuntu" target="_blank">ubuntu。至于RHEL之类的嘛Q你用只能在RHEL上才能运行的软g么?剩下的nginx、php、mysql、activemq、其他的{等Q除非你改过q些软g或你的程序真的不兼容新版本,否则量版本新好Q版本新Q意味着新特性增多、BUG减少、性能增加。L些道听途说的h跟你说老的版本E_。所谓稳定,是相对于Ҏ业务来说的,而就一个php写的|站Q大多数人都没改qQ何服务器软g源代码,l大多数情况是能q稳的升U到新版本的。类gjdk5到jdk6Qpython2到python3q类变动比较大的升q是比较见的。看看ChangeLogQ看看升U说明,l合自己情况评估一下,早升񔭑好Q别人家都用php6写程序了q边qphp4的逛游呢。优U的开源程序升U还是很负责ȝQ看好文档,别怕?/p>

以上q六点准备完毕,现在我们有了q行环境Q有了基本架构骨Ӟ有了备䆾和切换方案,应该开始着手设计开发方面的事情了。开发方面的事情无数Q下一会先说一些重炏V?/p>

沉香江南 2010-12-08 19:57 发表评论
]]>
վ֩ģ壺 | | | ¹| Դ| | | ˮ| | | | | | | | ͤ| ¡| ƽ| | | | Ļ| | | | | | | | ̨| | | | | | ¡| ƽ| | | | բ|