<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>精彩生活 &#187; oracle</title>
	<atom:link href="http://www.codeidea.com/blog/category/oracle/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.codeidea.com/blog</link>
	<description>费弘斌的博客</description>
	<lastBuildDate>Thu, 10 Mar 2011 11:53:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>案例学习Oracle错误：ORA-00604</title>
		<link>http://www.codeidea.com/blog/2009/03/23/%e6%a1%88%e4%be%8b%e5%ad%a6%e4%b9%a0oracle%e9%94%99%e8%af%af%ef%bc%9aora-00604/</link>
		<comments>http://www.codeidea.com/blog/2009/03/23/%e6%a1%88%e4%be%8b%e5%ad%a6%e4%b9%a0oracle%e9%94%99%e8%af%af%ef%bc%9aora-00604/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 00:50:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[oracle]]></category>
		<category><![CDATA[军卫一号]]></category>

		<guid isPermaLink="false">http://www.codeidea.com/blog/?p=374</guid>
		<description><![CDATA[原文:ORA-00604 error occurred at recursive SQL level string　　Cause:An error occurred while processing a recursive SQL statement (a statement applying to internal dictionary tables). 　　Action:If the situation described in the next error on the stack can be corrected, do so; otherwise contact Oracle Customer Support. 　　ORA-00604: 递归某个SQL 层时出现错误 　　原因:在运行一条递归SQL语句(该语句将应用于对内部表或数据字典的操作)时，发生错误。 　　方案:如果上述描述的错误所在栈可以被修复，则修复并继续运行;否则，请联系Oracle客服。当然，那是Oracle官方的解决办法。我曾经记得有个高手总结了关于ORA-00604/ORA-04031问题的解决： 　　修改INIT.ora 　　添加 　　_db_handles_cached = 0 　　并重新启动数据库. [...]]]></description>
			<content:encoded><![CDATA[<p>原文:ORA-00604 error occurred at recursive SQL level string　　Cause:An error occurred while processing a recursive SQL statement (a statement applying to internal dictionary tables).</p>
<p>　　Action:If the situation described in the next error on the stack can be corrected, do so; otherwise contact Oracle Customer Support.</p>
<p>　　ORA-00604: 递归某个SQL 层时出现错误</p>
<p>　　原因:在运行一条递归SQL语句(该语句将应用于对内部表或数据字典的操作)时，发生错误。</p>
<p>　　方案:如果上述描述的错误所在栈可以被修复，则修复并继续运行;否则，请联系Oracle客服。当然，那是Oracle官方的解决办法。我曾经记得有个高手总结了关于ORA-00604/ORA-04031问题的解决：</p>
<p><span id="more-374"></span></p>
<p>　　修改INIT.ora</p>
<p>　　添加</p>
<p>　　_db_handles_cached = 0</p>
<p>　　并重新启动数据库.</p>
<p>　　分析:ORA-00604这个信息表明，在数据库执行内部SQL语句时，发生了错误。比如，要往表中插入一行数据，但没有可扩展的空间。ORACLE于是去查寻，哪儿可以建立下一个扩展空间，它有多大小，但没有成功。一般在发生ORA-00604错误时，还伴随着其它的错误，例如:ORA-1547等。</p>
<p>　　首先，应当 检查 警告文件alertSID.log，查找有关ORA-600类的信息。</p>
<p>　　该错误最常见的原因是数据库文件initSID.ora中的参数OPEN_CURSORS值太小。可以修改initSID.ora文件，OPEN_CURSORS的值一般为255。修改完后，宕下ORACLE，再重新启动。</p>
<p>　　还可以设置并启动数据库的事件跟踪功能。在initSID.ora中加上一行:</p>
<p>　　event = &#8220;00604 trace name errorstack&#8221;</p>
<p>　　宕下并重新启动ORACLE，使这个事件跟踪参数起作用。这样，当再发生ORA-604错误时，有关信息就保存在TRACE文件中。</p>
<p>　　造成ORA-604错误的其它原因可能有:</p>
<p>　　- initSID.ora中，参数DC_FREE_EXTENTS或ROW_CACHE_ENQUEUES太低。可以根据操作系统和数据库的情况，适当增加这两个参数的值，宕下并重新启动ORACLE。</p>
<p>　　- 运行超出空间(伴随ORA-1547错误)。这时，要对表空间添加新文件，即增加表空间的大小。</p>
<p>　　- 达到了MAX_EXTENTS(伴随ORA-1556错误)。如果这样，就要修改表，允许更多的扩展。请从技术手册中查找MAX_EXTENTS的最大值。如果已经达到了最大值，必须用compress extents选项，把表卸出(export)，再导入(import)数据库中。</p>
<p>　　案例一:Oracle执行递归查询的时候出错</p>
<p>　　问题描述:我经常遇到ORA-00604 和ORA-01000(开启游标数量达到最大值)错误。然而，当我检查代码的时候，所有的结果集和语句对象都在最后的块中关闭了(我使用的是JDBC)。我执行的查询是一个Oracle递归查询(以这个开始并通过这个连接)。您能告诉我是哪里出现了问题，以及在什么样的情况下会出现上述的错误吗?</p>
<p>　　解决方案:可能是init.ora 文件中的open_cursors 参数值的设置太低了。这个参数的默认值是非常低的(50)。它应该设置为200或者更高。即使是你关闭了结果集，但是你并没有在JAVA代码中关闭SQL语句，就会导致这个问题。</p>
<p>　　如果设置为yes的话，那么确保你的活动连接池启用了(为了性能的原因)，否则设置为no。</p>
<p>　　请你的数据库 管理 员监视数据库，并看看使用V$OPEN_CURSORS 和 V$SYSSTAT数据字典视图的条目。</p>
<p>　　案例二:Exp出错的一个案例<br />
　　问题描述:客户用的 Linux 系统，Redhat 企业 版(RHEL 3.0).数据库,安装的9iR2, 前一段时间升级过.现在的版本是9204.</p>
<p>　　客户准备要做Exp导出，以前一直系统没有空间.先给给系统扩了一些空间。Linux下的LVM还算比较好用。虽然文件系统用的是ext3 ,要暂时停机.</p>
<p>　　进行导出操作,不成功,发现系统报告错误:</p>
<p>　　EXP-00056: ORACLE error 942 encountered</p>
<p>　　ORA-00942: table or view does not exist</p>
<p>　　EXP-00000: Export terminated unsuccessfully<br />
　　很多朋友可能对这个错误都很熟悉.</p>
<p>　　哦,对了,客户说是升级过数据库，首先猜测是不是升级有问题?毕竟在论坛上类似升级不成功的问题看过很多了.</p>
<p>　　执行$ORACLE_HOME/rdbms/admin/catpatch.sql 脚本.</p>
<p>　　同时要注意调大java_pool_size 和shared_pool_size这两个参数的大小,要不重新来就耽误时间了，不要犯低级错误</p>
<p>　　SQL&gt;shutdown immediate;</p>
<p>　　SQL&gt;startup migrate;</p>
<p>　　SQL&gt;@?/rdbms/admin/catpatch.sql<br />
　　之后查看Spool 出来的日志. 发现有编译错误，重新执行了第二次. 等待&#8230;&#8230;之有这个时候我才想起才抱怨CPU不够快,内存不够大 <img src='http://www.codeidea.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>　　这次Log没错误.不料想&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..用户连接报告错误:</p>
<p>　　ERROR at line 1:</p>
<p>　　ORA-00604: error occurred at recursive SQL level 1</p>
<p>　　ORA-04045: errors during recompilation/revalidation of LBACSYS.LBAC_EVENTS</p>
<p>　　ORA-06508: PL/SQL: could not find program unit being called</p>
<p>　　ORA-06512: at line 2</p>
<p>　　ORA-06508: PL/SQL: could not find program unit being called</p>
<p>　　ORA-06512: at line 2<br />
　　发现connect / as sysdba 还是可以登陆进去的。</p>
<p>　　看来是 LBACSYS.LBAC_EVENTS的状态有点问题。联接进去，编译一下如何? 我的如意算盘是@?/rdbms/admin/utlrp.sql执行一下就没有问题了，不料根本没有用，错误依然。当时有些头晕，这系统还没有备份呢，看来有些麻烦了(心里暗地埋怨客户，一直不让备份，总说&#8221;等等再说&#8221;,作为一个DBA说话总不被重视也挺悲哀的不是? ，虽然我自己偷着有个备份，不过还是上次升级时候的呢)，赶紧上网Metalink查查，这里 网络 速度还不错 LBACSYS.LBAC_EVENTS 作为关键词，找到如下的信息:</p>
<p>　　The reason for this problem seems to be an Upgrade for Label-Security</p>
<p>　　even if it&#8217;s not installed. 　//Label security 没有安装，居然补丁去默认给升级?</p>
<p>　　解决方案:</p>
<p>　　shutdown immediate;</p>
<p>　　startup migrate;</p>
<p>　　alter view lbacsys.lbac$all_table_policies compile;</p>
<p>　　alter package lbacsys.lbac_events compile body;</p>
<p>　　shutdown immediate;</p>
<p>　　startup;<br />
　　支持人员说这是个Bug.但是普通用户不可见. 不太放心，再找找，在Suse.com站点的Maillist也发现了一则类似的案例，看来还可以,心里有底了。</p>
<p>　　按照上面的执行，重新 检查 ，OK。</p>
<p>　　总结一下</p>
<p>　　其实是一个很没有技术含量的Case。首先以前升级的时候至少要测试一下Export是否可以(Export已经成为升级成功的一个标志了!) 其次,准备不够充分,早成了手忙脚乱.所幸不是关键系统,用户还可以容忍.Oracle 总说 微软 是个烂公司,其实他们才真的够栏.Bug多的不可胜数.</p>
<p>　　案例三:使用网络应用程序的时候出现递归SQL错误</p>
<p>　　问题描述:当我使用网络应用程序的时候，遇到了下面的这个错误。</p>
<p>　　ORA-00604: 递归SQL1级的时候出现错误。</p>
<p>　　ORA-04031: 无法分配4200字节的共享内存，&#8221;RBKS_BK_INFO&#8221;, &#8220;sga_heap&#8221;, &#8220;library cache&#8221;。</p>
<p>　　这些错误信息是什么意思?我该如何解决它们?它们是在应用程序里面还是数据库里面?</p>
<p>　　解决方案:您应该使用的是Oracle 8.1.7.4之前版本的Oracle。第一个错误信息告诉你Oracle针对你的行为执行的SQL 语句失败了。ORA-4031告诉你为什么它会失败。ORA-4031错误信息的意思是你没有获得足够的空闲空间。你可以增加你的SHARED_POOL_SIZE，重新启动数据库再拭一次。这个bug已经在后续的补丁包中修复了。如果你使用的不是这个版本，你可以应用一下补丁包。<br />
　案例四:Sql_trace进行Oracle诊断案例<br />
　　问题说明:很多时候，在我们进行数据库操作时，比如drop user,drop table等，经常会遇到这样的错误</p>
<p>　　ORA-00604: error occurred at recursive SQL level 1 .</p>
<p>　　这样的提示，很多时候是没有丝毫用处的.本案例就这一类问题提供一个思路及方法供大家参考.</p>
<p>　　1. drop user出现问题</p>
<p>　　报出以下错误后退出</p>
<p>　　ORA-00604: error occurred at recursive SQL level 1</p>
<p>　　ORA-00942: table or view does not exist .<br />
　　关于 recursive SQL 错误</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeidea.com/blog/2009/03/23/%e6%a1%88%e4%be%8b%e5%ad%a6%e4%b9%a0oracle%e9%94%99%e8%af%af%ef%bc%9aora-00604/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>利用Oracle8i的DataGuard实现&#8221;军卫一号&#8221;数据库备份</title>
		<link>http://www.codeidea.com/blog/2009/03/20/%e5%88%a9%e7%94%a8oracle8i%e7%9a%84dataguard%e5%ae%9e%e7%8e%b0%e5%86%9b%e5%8d%ab%e4%b8%80%e5%8f%b7%e6%95%b0%e6%8d%ae%e5%ba%93%e5%a4%87%e4%bb%bd/</link>
		<comments>http://www.codeidea.com/blog/2009/03/20/%e5%88%a9%e7%94%a8oracle8i%e7%9a%84dataguard%e5%ae%9e%e7%8e%b0%e5%86%9b%e5%8d%ab%e4%b8%80%e5%8f%b7%e6%95%b0%e6%8d%ae%e5%ba%93%e5%a4%87%e4%bb%bd/#comments</comments>
		<pubDate>Fri, 20 Mar 2009 11:51:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[oracle]]></category>
		<category><![CDATA[军卫一号]]></category>

		<guid isPermaLink="false">http://www.codeidea.com/blog/?p=367</guid>
		<description><![CDATA[ 1 数据库备份与恢复概述 随着信息技术的发展与进步，医院信息系统的数据处理量和存储量会越来越大。各项业务系统运行的持续性、稳定性，业务数据的完整性、正确性、有效性，直接关系到医院的运营、管理与决策活动，这就要求对网络通信、服务器及存储设备等关键硬件设备，以及各种操作系统、数据库管理系统等软件的故障恢复进行整体的设计和部署。如果没有可靠实用的备份系统。任何一个环节发生故障和灾难，都会导致医院的业务活动无法正常进行，造成重要数据的丢失和破坏．给医院带来巨大损失．给广大患者带来不便。严重时更会带来重大的社会影响和政治影响尽管我们一再小心谨慎。但是。必然还会发生各种各样的故障甚至灾难。针对可能发生的故障或灾难。采取的唯一措施就是建立一套完整的备份与恢复方案。由于数据库管理系统是医院信息系统的核心。一旦发生故障或灾难，医院信息系统的运行恢复关键取决于数据库的恢复程度和时间。因此，数据库备份与恢复的必要性和重要性非同一般，我们的备份目标及原则应当保证在最短的时间内，尽可能完全地恢复数据。 2 备份方法的选择与比较 目前，军队医院全部使用“军卫一号”系统，后台数据库也都是采用Oracle数据库管理系统。备份方案除极少部分医院使用自购的第三方厂家的专用数据库备份软件外，绝大多数医院采用的是Oracle公司提供的物理备份机,费用较高，因此，本文不做评价。   Oracle公司提供的物理备份解决方案是其最传统的方案。 从早期版本开始，就是由数据库管理系统软件本身提供的。不必额外投资。可以降低成本；备份数据库服务器的配置可以低于在用数据库服务器，节省开销：此方案是定时备份数据库的有关文件及记录数据库变动情况的归档日志文件．一旦数据库需要恢复时，在备份的数据库有关文件基础上，应用备份的归档日志文件，使数据库恢复到所需要的时间点。本方案如果设置完整合理，具有较强的可靠性和可操作性。尤其是可以将数据库恢复到任意时间点，所以，既可以应对各种软硬件故障，还可以挽救软件或人为错误导致的数据丢失。正是因为具有以上这些特点，使得该解决方案成为多数医院数据库备份的首选。 在Oracle7版本时，Oracle公司就提出了待用数据库的概念，并提供了Standby解决方案。到了Oracle8i，在Standby础上，完善、增强了其功能，并将此解决方案称之为DataGuard。该方案需要首先创建待用数据库， 实际上也是在用数据库的备份，然后通过不断地备份、复制及应用归档13志文件，保持其与在用数据库的同步，一旦数据库需要恢复时，只需要再同步少量归档13志文件即可立刻恢复，本方案与物理备份比较．其最大的好处就是可以在数据库发生故障时，在尽可能短的时间内恢复数据库，这对于数据库可用性要求高的应用尤为重要。 首先。由于DataGuard也是Oracle公司随数据库软件产品提供的， 同时待用数据库服务器的配置也可以低于主数据库服务器，所以也具有物理备份节约成本的特点；另外，该解决方案具有保持与在用数据库同步的特点，可以在较大程度上缩短数据库的恢复时间，对于医院信息系统7~24h不停顿的应用情况是难能可贵的；尽管待用数据库解决方案可以提供快速的恢复，但正是为了实现快速恢复，需要及时地同步待用数据库，而这种同步操作又是不可逆的，因此，使它具有一定的局限性。即无法恢复到任意时间点。例如：对于软件或人为错误导致的数据丢失，此方案无法挽救。针对以上特点，我们认为该方案不是医院数据库备份的唯一最佳方法。通常可以根据自己医院的应用及环境。考虑单独采用数据库物理备份或者待用数据库的方案。如果需要满足多种故障恢复需求时，可以采用二者结合使用的方案，效果会更佳。   当然，物理备份和DataGuard由于实现的原理和方法不同，在创建、维护、应用等方面也存在一些差异，由于所有的“军卫一号”用户对物理备份已经相当熟悉，因此，本文仅就同行关注的DataGuard做比较详细的描述。   3 Oracle8i的DataGuard原理及新特点 Oracle8i的DataGuard(在Oracle7时称为Standby)即指待用数据库。它是利用主数据库备份建立的一个数据库复制品。主数据库和待用数据库的同步是通过将来自主数据库的归档重做日志应用到待用数据库实现的。 采用Oracle8i的DataGuard待用数据库作为备份与恢复解决方案，具有以下特点：(1)待用数据库解决方案支持目前所有版本，包括目前使用的Oracle8．1．7，将来如果系统平台升级，无论是Oracle9i J~是Oraclel0g，都支持待用数据库解决方案，而且，随着版本的提高，该解决方案的功能也随之增强，性能也随之提高，具有很好的延续性。(2)自动化程度较高，减少管理及维护成本。Oracle8i的DataGuard可以通过SQL*Net将主站点生成的归档日志文件自动传输到待用站点，同时．还可以将来自主站点的归档日志自动应用到待用数据库。这些是Oracle7的Standby无法做到的，通常需要数据库管理员通过操作系统的脚本及数据库的命令来实现。(3)待用数据库解决方案的实现技术，与通常数据库物理备份相比较而言，最大的好处就是极大地缩短了数据库的恢复时间。(4)数据丢失少，由于该方案仅能应用归档日志，不能应用联机日志。因此，在极端的情况下。如果无法归档联机日志．可能会丢失联机日志文件中尚未归档的数据库改动内容。(5)本方案除了具有数据库的灾难恢复和防止坏数据的保护功能外，还可以只读方式打开待用数据库，不但可以临时提供影响主系统性能的查询统计等业务服务．降低主数据库服务器的性能负载，还可以对本方案的备份恢复进行常规测试，便于及时发现可能存在的问题并使之得到解决．这些也是Oracle7的Standby无法做到的，因为它不支持只读方式打开数据库，只能靠激活数据库来测试，又由于激活操作是不可逆的，所以，当需要临时使用待用数据库或恢复测试后，都需要重新建立环境，非常不方便。(6)当发生灾难时，可以将待用数据库激活，使其立即替代主数据库．为应用系统提供数据库的服务与支持。(7)在灾难备份与恢复的概念中，本方案属于不完全的数据级备份。因为只包含数据库中的数据，而医院应用的数据不但包括数据库中的数据，就目前“军卫一号”应用来说，还应当包括病历文件、输入法文件及应用程序，这些也是不容忽视的。(8)本方案不支持数据库任意时间点的恢复．因此．如果对数据库的恢复有更高要求的话，还需要增加其它备份方案。   综上所述．如果使用Oracle8i的DataGuard，可以达到的应用目标是灾难和软硬件故障恢复。以及补充的查询统计环境。为了进一步提高数据库的安全系数．我们还可以将待用数据库的物理放置与主数据库分开．即最好分别置于不同的建筑物中，实现同城的异地备份。在具体实施过程中，最好利用本方案的自动管理特性，减少复杂性和中间环节，提高系统的可靠性。   4 DataGuard实施过程与维护要点 在使用DataGuard之前，需要为其创建环境，通常需要单独准备一台服务器来安装待用数据库。如果机房、网络等条件具备。还可以将其放置在远离主数据库服务器存放的地方。建立待用数据库过程的简要步骤 如下：(1)做主数据库的备份：利用已经存在的备份也可以。即新旧或是否一致均可．因为可以利用归档日志进行恢复。(2)创建待用数据库的控制文件：连接主数据库，同时主数据库必须是归档方式及自动归档，使用专门的SQL命令，为待用数据库创建控制文件。(3)复制有关文件到待用数据库：需要复制的文件包括：数据文件备份、待用数据库控制文件及主数据库备份后生成的归档日志文件．使用操作系统命令进行拷贝，如果主数据库与待用数据库的路径不同，还需要使用专门的SQL命令或修改待用数据库的有关初始化参数来改变数据文件的路径。(4)配置网络文件：配置主数据库端的tnsnames．ora，为待用数据库创建服务名。以便日志文件自动归档到待用数据库：配置待用数据库的listener、ora满足监听服务请求，以便接收来自主数据库的归档日志文件。 (5)主数据库配置有关初始化参数：根据自动管理方式的要求，除一个本地归档目的地外，必须有一个带服务名的远地归档目的地，建议本地使用MANDATORY选项．远地可使用OPTIONAL选项，REOPEN选项可以在归档不成功时自动再次访问。(6)复制并编辑待用数据库的初始化参数文件：为待用数据库设置与主数据库不同的运行环境。(7)启动待用数据库的实例并加载数据库：执行具有待用数据库专门选项的STARTUP MOUNT命令。(8)应用归档日志到待用数据库：在待用数 据库创建过程中．待用数据库的数据改动情况肯定会滞后于主数据库，其中的差距通常称之为缝隙。在实行自动管理前，首先要填补这些缝隙．即先在主数据库执行归档．然后在待用数据库查询缝隙信息，再执行相应的手工应用。(9)启动归档日志的自动应用管理。   以上过程执行完毕，待用数据库环境就建立起来．以后就可以通过数据库管理系统进行自动同步了。当然，待用数据库建立之后，还存在备份的测试、特殊的维护、待用数据库激活，以及待用数据库的模式改变切换等情况。因此，还需要注意以下方面的问题：(1)由于主数据库物理结构的改变，可能会影响待用数据库，其中有些是由系统自动维护的，不需要数据库管理员人工干预，有些则不然，这时还需要数据库管理员进行简单的手工维护。(2)当主数据库发生故障，需要启用待用数据库时，可以将其激活，这个操作会使待用数据库永久地转换成一个主数据库，由于该操作是单向的，不可逆转，所以，启用后不能撤消，以后还需要创建新的待用数据库。(3)待用数据库需要定期进行测试，在测试时一定不要执行激活操作，只需以只读模式打开它即可，这时可以进行查询，保证待用数据库的数据确实根据来自主数据库的重做日志进行了相应的更新与同步。(4)利用待用数据库的只读模式，还有助于减少主数据库的查询负荷，尤其是大的统计查询，可以将这些访问操作转移到待用数据库端来。]]></description>
			<content:encoded><![CDATA[<p> 1 数据库备份与恢复概述</p>
<p>随着信息技术的发展与进步，医院信息系统的数据处理量和存储量会越来越大。各项业务系统运行的持续性、稳定性，业务数据的完整性、正确性、有效性，直接关系到医院的运营、管理与决策活动，这就要求对网络通信、服务器及存储设备等关键硬件设备，以及各种操作系统、数据库管理系统等软件的故障恢复进行整体的设计和部署。如果没有可靠实用的备份系统。任何一个环节发生故障和灾难，都会导致医院的业务活动无法正常进行，造成重要数据的丢失和破坏．给医院带来巨大损失．给广大患者带来不便。严重时更会带来重大的社会影响和政治影响尽管我们一再小心谨慎。但是。必然还会发生各种各样的故障甚至灾难。针对可能发生的故障或灾难。采取的唯一措施就是建立一套完整的备份与恢复方案。由于数据库管理系统是医院信息系统的核心。一旦发生故障或灾难，医院信息系统的运行恢复关键取决于数据库的恢复程度和时间。因此，数据库备份与恢复的必要性和重要性非同一般，我们的备份目标及原则应当保证在最短的时间内，尽可能完全地恢复数据。<br />
<span id="more-367"></span></p>
<p>2 备份方法的选择与比较</p>
<p>目前，军队医院全部使用“军卫一号”系统，后台数据库也都是采用Oracle数据库管理系统。备份方案除极少部分医院使用自购的第三方厂家的专用数据库备份软件外，绝大多数医院采用的是Oracle公司提供的物理备份机,费用较高，因此，本文不做评价。</p>
<p> </p>
<p>Oracle公司提供的物理备份解决方案是其最传统的方案。</p>
<p>从早期版本开始，就是由数据库管理系统软件本身提供的。不必额外投资。可以降低成本；备份数据库服务器的配置可以低于在用数据库服务器，节省开销：此方案是定时备份数据库的有关文件及记录数据库变动情况的归档日志文件．一旦数据库需要恢复时，在备份的数据库有关文件基础上，应用备份的归档日志文件，使数据库恢复到所需要的时间点。本方案如果设置完整合理，具有较强的可靠性和可操作性。尤其是可以将数据库恢复到任意时间点，所以，既可以应对各种软硬件故障，还可以挽救软件或人为错误导致的数据丢失。正是因为具有以上这些特点，使得该解决方案成为多数医院数据库备份的首选。</p>
<p><!--more--></p>
<p>在Oracle7版本时，Oracle公司就提出了待用数据库的概念，并提供了Standby解决方案。到了Oracle8i，在Standby础上，完善、增强了其功能，并将此解决方案称之为DataGuard。该方案需要首先创建待用数据库， 实际上也是在用数据库的备份，然后通过不断地备份、复制及应用归档13志文件，保持其与在用数据库的同步，一旦数据库需要恢复时，只需要再同步少量归档13志文件即可立刻恢复，本方案与物理备份比较．其最大的好处就是可以在数据库发生故障时，在尽可能短的时间内恢复数据库，这对于数据库可用性要求高的应用尤为重要。</p>
<p>首先。由于DataGuard也是Oracle公司随数据库软件产品提供的， 同时待用数据库服务器的配置也可以低于主数据库服务器，所以也具有物理备份节约成本的特点；另外，该解决方案具有保持与在用数据库同步的特点，可以在较大程度上缩短数据库的恢复时间，对于医院信息系统7~24h不停顿的应用情况是难能可贵的；尽管待用数据库解决方案可以提供快速的恢复，但正是为了实现快速恢复，需要及时地同步待用数据库，而这种同步操作又是不可逆的，因此，使它具有一定的局限性。即无法恢复到任意时间点。例如：对于软件或人为错误导致的数据丢失，此方案无法挽救。针对以上特点，我们认为该方案不是医院数据库备份的唯一最佳方法。通常可以根据自己医院的应用及环境。考虑单独采用数据库物理备份或者待用数据库的方案。如果需要满足多种故障恢复需求时，可以采用二者结合使用的方案，效果会更佳。</p>
<p> </p>
<p>当然，物理备份和DataGuard由于实现的原理和方法不同，在创建、维护、应用等方面也存在一些差异，由于所有的“军卫一号”用户对物理备份已经相当熟悉，因此，本文仅就同行关注的DataGuard做比较详细的描述。</p>
<p> </p>
<p>3 Oracle8i的DataGuard原理及新特点</p>
<p>Oracle8i的DataGuard(在Oracle7时称为Standby)即指待用数据库。它是利用主数据库备份建立的一个数据库复制品。主数据库和待用数据库的同步是通过将来自主数据库的归档重做日志应用到待用数据库实现的。</p>
<p>采用Oracle8i的DataGuard待用数据库作为备份与恢复解决方案，具有以下特点：(1)待用数据库解决方案支持目前所有版本，包括目前使用的Oracle8．1．7，将来如果系统平台升级，无论是Oracle9i J~是Oraclel0g，都支持待用数据库解决方案，而且，随着版本的提高，该解决方案的功能也随之增强，性能也随之提高，具有很好的延续性。(2)自动化程度较高，减少管理及维护成本。Oracle8i的DataGuard可以通过SQL*Net将主站点生成的归档日志文件自动传输到待用站点，同时．还可以将来自主站点的归档日志自动应用到待用数据库。这些是Oracle7的Standby无法做到的，通常需要数据库管理员通过操作系统的脚本及数据库的命令来实现。(3)待用数据库解决方案的实现技术，与通常数据库物理备份相比较而言，最大的好处就是极大地缩短了数据库的恢复时间。(4)数据丢失少，由于该方案仅能应用归档日志，不能应用联机日志。因此，在极端的情况下。如果无法归档联机日志．可能会丢失联机日志文件中尚未归档的数据库改动内容。(5)本方案除了具有数据库的灾难恢复和防止坏数据的保护功能外，还可以只读方式打开待用数据库，不但可以临时提供影响主系统性能的查询统计等业务服务．降低主数据库服务器的性能负载，还可以对本方案的备份恢复进行常规测试，便于及时发现可能存在的问题并使之得到解决．这些也是Oracle7的Standby无法做到的，因为它不支持只读方式打开数据库，只能靠激活数据库来测试，又由于激活操作是不可逆的，所以，当需要临时使用待用数据库或恢复测试后，都需要重新建立环境，非常不方便。(6)当发生灾难时，可以将待用数据库激活，使其立即替代主数据库．为应用系统提供数据库的服务与支持。(7)在灾难备份与恢复的概念中，本方案属于不完全的数据级备份。因为只包含数据库中的数据，而医院应用的数据不但包括数据库中的数据，就目前“军卫一号”应用来说，还应当包括病历文件、输入法文件及应用程序，这些也是不容忽视的。(8)本方案不支持数据库任意时间点的恢复．因此．如果对数据库的恢复有更高要求的话，还需要增加其它备份方案。</p>
<p> </p>
<p>综上所述．如果使用Oracle8i的DataGuard，可以达到的应用目标是灾难和软硬件故障恢复。以及补充的查询统计环境。为了进一步提高数据库的安全系数．我们还可以将待用数据库的物理放置与主数据库分开．即最好分别置于不同的建筑物中，实现同城的异地备份。在具体实施过程中，最好利用本方案的自动管理特性，减少复杂性和中间环节，提高系统的可靠性。</p>
<p> </p>
<p>4 DataGuard实施过程与维护要点</p>
<p>在使用DataGuard之前，需要为其创建环境，通常需要单独准备一台服务器来安装待用数据库。如果机房、网络等条件具备。还可以将其放置在远离主数据库服务器存放的地方。建立待用数据库过程的简要步骤 如下：(1)做主数据库的备份：利用已经存在的备份也可以。即新旧或是否一致均可．因为可以利用归档日志进行恢复。(2)创建待用数据库的控制文件：连接主数据库，同时主数据库必须是归档方式及自动归档，使用专门的SQL命令，为待用数据库创建控制文件。(3)复制有关文件到待用数据库：需要复制的文件包括：数据文件备份、待用数据库控制文件及主数据库备份后生成的归档日志文件．使用操作系统命令进行拷贝，如果主数据库与待用数据库的路径不同，还需要使用专门的SQL命令或修改待用数据库的有关初始化参数来改变数据文件的路径。(4)配置网络文件：配置主数据库端的tnsnames．ora，为待用数据库创建服务名。以便日志文件自动归档到待用数据库：配置待用数据库的listener、ora满足监听服务请求，以便接收来自主数据库的归档日志文件。</p>
<p>(5)主数据库配置有关初始化参数：根据自动管理方式的要求，除一个本地归档目的地外，必须有一个带服务名的远地归档目的地，建议本地使用MANDATORY选项．远地可使用OPTIONAL选项，REOPEN选项可以在归档不成功时自动再次访问。(6)复制并编辑待用数据库的初始化参数文件：为待用数据库设置与主数据库不同的运行环境。(7)启动待用数据库的实例并加载数据库：执行具有待用数据库专门选项的STARTUP MOUNT命令。(8)应用归档日志到待用数据库：在待用数</p>
<p>据库创建过程中．待用数据库的数据改动情况肯定会滞后于主数据库，其中的差距通常称之为缝隙。在实行自动管理前，首先要填补这些缝隙．即先在主数据库执行归档．然后在待用数据库查询缝隙信息，再执行相应的手工应用。(9)启动归档日志的自动应用管理。</p>
<p> </p>
<p>以上过程执行完毕，待用数据库环境就建立起来．以后就可以通过数据库管理系统进行自动同步了。当然，待用数据库建立之后，还存在备份的测试、特殊的维护、待用数据库激活，以及待用数据库的模式改变切换等情况。因此，还需要注意以下方面的问题：(1)由于主数据库物理结构的改变，可能会影响待用数据库，其中有些是由系统自动维护的，不需要数据库管理员人工干预，有些则不然，这时还需要数据库管理员进行简单的手工维护。(2)当主数据库发生故障，需要启用待用数据库时，可以将其激活，这个操作会使待用数据库永久地转换成一个主数据库，由于该操作是单向的，不可逆转，所以，启用后不能撤消，以后还需要创建新的待用数据库。(3)待用数据库需要定期进行测试，在测试时一定不要执行激活操作，只需以只读模式打开它即可，这时可以进行查询，保证待用数据库的数据确实根据来自主数据库的重做日志进行了相应的更新与同步。(4)利用待用数据库的只读模式，还有助于减少主数据库的查询负荷，尤其是大的统计查询，可以将这些访问操作转移到待用数据库端来。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeidea.com/blog/2009/03/20/%e5%88%a9%e7%94%a8oracle8i%e7%9a%84dataguard%e5%ae%9e%e7%8e%b0%e5%86%9b%e5%8d%ab%e4%b8%80%e5%8f%b7%e6%95%b0%e6%8d%ae%e5%ba%93%e5%a4%87%e4%bb%bd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>‘‘ 军卫 1 号&#8221; 医生工作站常见问题处理方法的归纳</title>
		<link>http://www.codeidea.com/blog/2009/03/19/%e2%80%98%e2%80%98-%e5%86%9b%e5%8d%ab-1-%e5%8f%b7-%e5%8c%bb%e7%94%9f%e5%b7%a5%e4%bd%9c%e7%ab%99%e5%b8%b8%e8%a7%81%e9%97%ae%e9%a2%98%e5%a4%84%e7%90%86%e6%96%b9%e6%b3%95%e7%9a%84%e5%bd%92%e7%ba%b3/</link>
		<comments>http://www.codeidea.com/blog/2009/03/19/%e2%80%98%e2%80%98-%e5%86%9b%e5%8d%ab-1-%e5%8f%b7-%e5%8c%bb%e7%94%9f%e5%b7%a5%e4%bd%9c%e7%ab%99%e5%b8%b8%e8%a7%81%e9%97%ae%e9%a2%98%e5%a4%84%e7%90%86%e6%96%b9%e6%b3%95%e7%9a%84%e5%bd%92%e7%ba%b3/#comments</comments>
		<pubDate>Thu, 19 Mar 2009 16:26:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[oracle]]></category>
		<category><![CDATA[军卫一号]]></category>

		<guid isPermaLink="false">http://www.codeidea.com/blog/?p=363</guid>
		<description><![CDATA[    刘宏波孟毅边玉森 沈阳军区第201医院信息科(111000) “军卫1号”工程医生工作站子系统在使用过程中，难免有问题和错误出现，通过在日常维护工作中，对遇到的各类问题的积累，做了一下简单的归纳总结，下而我谈谈医生工作站子系统运行中的常见错误及处理方法．供同行商榷。 1 启动中COMSRVR．EXE文件不可丢失医生工作站保存提交医嘱后，护士工作站没有信号提示声发出，需人为通知护士有新开医嘱。这是由于护士工作站客户端启动中的COMSRVR．EXE文件丢失，我们在护士工作站文件夹中找到这一文件，复制、粘贴到启动中，医生工作站的错误即可消失。 2 使用版本的一致性问题 医生工作站保存提交医嘱时，提示与护士工作站通信失败，查出护士站计算机名出错。这是由于医生工作站和护士工作站版本不匹配造成的，在更新医护站的版本时，要注意相互一致，不要一个皈本高，一个皈本低，这将会导致上述错误的发生。 3 WORD文档剪切板的记忆功能不可忽视医生工作站中，医生的病程记录偶有内容更改的现象。例如，微机中A病人的病历内容变成了B病人的病历内容，这是由于WORD文档的剪切板在作怪，剪切板有保存记忆功能，有时难免给操作者造成误导，这就要求工作人员保存病历之前先看清楚内容再操作，并且用完工作站要记得随手关闭工作站．而不要最小化，以免误操作而带来麻烦。 4 操作系统的顺序和规范化操作 医生进入医生工作站时，系统提示执行了非法操作，导致医生进不去工作站。这是系统操作者对转科或退院病人处理不当所致，正确的操作方法是：医生工作站先把病^、资料移出，然后再由护士站办理出院或转科。反之，如果护士站先移出．则造成上述结果。处理这种问题的方法有多种，其一是系统维护人员处理，打开MR—ON—LINE表，对退院病人删除该条记录，对转科病人直接修改医生用户名即可。其二临床科室可自行进行处理，护士可把病人暂调回护士工作站，先让医生对其处理后，再由护士工作站进行操作，但这种方法如处理不当，会导致统计数据的不准确，所以建议用第一种方法。 5 医生工作站偶尔对新入院病人或转科病人有接收不到的现象这种原因是在转接过程中，工作人员操作不当所致。对于转科病人，他的操作规程是：由转出科室医生站移出，再由转出科室护士站办理转科，而后转入科室护士站办理移人，转入后待护士在病人基本信息中选取医生姓名后，最后通知医生移人，按上述方法操作，将会避免错误的发生。修改方法是用PB打开表MR—ON—LINE (联机病历描述表)．修改病人ID号对应的医生用户名和病人状态即可。 6 医生将未出院病历误提交或移出的问题 用PB先打开MR—ON—LINE表，是空的状态，追加～条记录，有记录存在，对其对应的ID号进行修改，把病人状态一项改为在院，输入经治医生的用户名，后用PB打开表MR—INDEX．看看MR—STATUS字段内容是O (打开)还是C (关闭)状态． 如果是C (关闭)状态， 则改成O (打开)状态．否则，再继续写的病历无法保存，这是一个特别应该注意的问题。 7 激活WORD出错的现象 医生的病历，有时会出现激活WORD出错的现象，一旦出现这种现象，病历将很难恢复。这是由于有些输入法和WORD冲突的原因，建议工作人员关闭病历模板之前先切换到英文状态下，这样可以降低错误的发生率8 医生工作站子系统调不出来的问题 学习病历是常用的功能之一，但偶尔有调不出来的现象。这有两种原因，① 医生调用的学习病历看完后没有及时的移出：② 是医生写完的病历没有进行提交操作．而是移出病历或其他非法操作造成。这首先要求我们用完学习病历要时移出，以免影响别人的使用，其次是要按医生工作站操作规程的规定，正确提交出院病人病历。 9 医生、护士工作站的操作失误 医生工作站中医生管理的病人不在自己工作站中，在远项中选择显示全科病人时，该病人存在，且病人名字后注释经治医生的姓名。这种现象主要是医生对转科病人操作不当，造成信息丢失：另一种原因是护士站操作失误，护士站病人信息中的医生姓名和MR—ON—LINE中医生名不符．修改病人信息中的医生姓名和MR—ON—LINE表中的医生用户名一一致即可。 10 护士站逐条转抄医嘱，必须正确执行 医生保存提交的医嘱，护士转抄保存时失败 这是医生下达医嘱过程中个别医嘱内部信息出错，导致护士全部提取医嘱转抄保存失败，这种错误通过后台开表处理非常烦琐，效果也不是很好。最简单的办法是护士站逐条转抄医嘱，正确的医嘱会正常执行， 对于内部出错的医嘱会出现错误提示，通知医生作废此医嘱，重新下达即可。]]></description>
			<content:encoded><![CDATA[<p> </p>
<p> </p>
<p>刘宏波孟毅边玉森</p>
<p>沈阳军区第201医院信息科(111000)</p>
<p>“军卫1号”工程医生工作站子系统在使用过程中，难免有问题和错误出现，通过在日常维护工作中，对遇到的各类问题的积累，做了一下简单的归纳总结，下而我谈谈医生工作站子系统运行中的常见错误及处理方法．供同行商榷。</p>
<p>1 启动中COMSRVR．EXE文件不可丢失医生工作站保存提交医嘱后，护士工作站没有信号提示声发出，需人为通知护士有新开医嘱。这是由于护士工作站客户端启动中的COMSRVR．EXE文件丢失，我们在护士工作站文件夹中找到这一文件，复制、粘贴到启动中，医生工作站的错误即可消失。</p>
<p>2 使用版本的一致性问题</p>
<p><span id="more-363"></span></p>
<p>医生工作站保存提交医嘱时，提示与护士工作站通信失败，查出护士站计算机名出错。这是由于医生工作站和护士工作站版本不匹配造成的，在更新医护站的版本时，要注意相互一致，不要一个皈本高，一个皈本低，这将会导致上述错误的发生。</p>
<p>3 WORD文档剪切板的记忆功能不可忽视医生工作站中，医生的病程记录偶有内容更改的现象。例如，微机中A病人的病历内容变成了B病人的病历内容，这是由于WORD文档的剪切板在作怪，剪切板有保存记忆功能，有时难免给操作者造成误导，这就要求工作人员保存病历之前先看清楚内容再操作，并且用完工作站要记得随手关闭工作站．而不要最小化，以免误操作而带来麻烦。</p>
<p>4 操作系统的顺序和规范化操作</p>
<p>医生进入医生工作站时，系统提示执行了非法操作，导致医生进不去工作站。这是系统操作者对转科或退院病人处理不当所致，正确的操作方法是：医生工作站先把病^、资料移出，然后再由护士站办理出院或转科。反之，如果护士站先移出．则造成上述结果。处理这种问题的方法有多种，其一是系统维护人员处理，打开MR—ON—LINE表，对退院病人删除该条记录，对转科病人直接修改医生用户名即可。其二临床科室可自行进行处理，护士可把病人暂调回护士工作站，先让医生对其处理后，再由护士工作站进行操作，但这种方法如处理不当，会导致统计数据的不准确，所以建议用第一种方法。</p>
<p>5 医生工作站偶尔对新入院病人或转科病人有接收不到的现象这种原因是在转接过程中，工作人员操作不当所致。对于转科病人，他的操作规程是：由转出科室医生站移出，再由转出科室护士站办理转科，而后转入科室护士站办理移人，转入后待护士在病人基本信息中选取医生姓名后，最后通知医生移人，按上述方法操作，将会避免错误的发生。修改方法是用PB打开表MR—ON—LINE (联机病历描述表)．修改病人ID号对应的医生用户名和病人状态即可。</p>
<p>6 医生将未出院病历误提交或移出的问题</p>
<p>用PB先打开MR—ON—LINE表，是空的状态，追加～条记录，有记录存在，对其对应的ID号进行修改，把病人状态一项改为在院，输入经治医生的用户名，后用PB打开表MR—INDEX．看看MR—STATUS字段内容是O (打开)还是C (关闭)状态． 如果是C (关闭)状态， 则改成O (打开)状态．否则，再继续写的病历无法保存，这是一个特别应该注意的问题。</p>
<p>7 激活WORD出错的现象</p>
<p>医生的病历，有时会出现激活WORD出错的现象，一旦出现这种现象，病历将很难恢复。这是由于有些输入法和WORD冲突的原因，建议工作人员关闭病历模板之前先切换到英文状态下，这样可以降低错误的发生率8 医生工作站子系统调不出来的问题</p>
<p>学习病历是常用的功能之一，但偶尔有调不出来的现象。这有两种原因，① 医生调用的学习病历看完后没有及时的移出：② 是医生写完的病历没有进行提交操作．而是移出病历或其他非法操作造成。这首先要求我们用完学习病历要时移出，以免影响别人的使用，其次是要按医生工作站操作规程的规定，正确提交出院病人病历。</p>
<p>9 医生、护士工作站的操作失误</p>
<p>医生工作站中医生管理的病人不在自己工作站中，在远项中选择显示全科病人时，该病人存在，且病人名字后注释经治医生的姓名。这种现象主要是医生对转科病人操作不当，造成信息丢失：另一种原因是护士站操作失误，护士站病人信息中的医生姓名和MR—ON—LINE中医生名不符．修改病人信息中的医生姓名和MR—ON—LINE表中的医生用户名一一致即可。</p>
<p>10 护士站逐条转抄医嘱，必须正确执行</p>
<p>医生保存提交的医嘱，护士转抄保存时失败 这是医生下达医嘱过程中个别医嘱内部信息出错，导致护士全部提取医嘱转抄保存失败，这种错误通过后台开表处理非常烦琐，效果也不是很好。最简单的办法是护士站逐条转抄医嘱，正确的医嘱会正常执行， 对于内部出错的医嘱会出现错误提示，通知医生作废此医嘱，重新下达即可。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeidea.com/blog/2009/03/19/%e2%80%98%e2%80%98-%e5%86%9b%e5%8d%ab-1-%e5%8f%b7-%e5%8c%bb%e7%94%9f%e5%b7%a5%e4%bd%9c%e7%ab%99%e5%b8%b8%e8%a7%81%e9%97%ae%e9%a2%98%e5%a4%84%e7%90%86%e6%96%b9%e6%b3%95%e7%9a%84%e5%bd%92%e7%ba%b3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>oracle comment</title>
		<link>http://www.codeidea.com/blog/2009/03/18/oracle-comment/</link>
		<comments>http://www.codeidea.com/blog/2009/03/18/oracle-comment/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 09:59:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://www.codeidea.com/blog/?p=350</guid>
		<description><![CDATA[sql* COMMENT ON TABLE emp   IS &#8216;Employee Information&#8217;; Comment created. Comments can be viewed through the data dictionary views. ALL_COL_COMMENTS USER_COL_COMMENTS ALL_TAB_COMMENTS USER_TAB_COMMENTS         user_tab_comments;表注释         user_col_comments;表字段注释         以上两个只能获取自己用户的表的注释信息，如果要访问自己能够访问的其他用户的表，则需要使用：         all_tab_comments;表注释         all_col_comments;表字段注释         当然，如果有DBA权限，则可以使用         dba_tab_comments;表注释         dba_col_comments;表字段注释         dba*和all*最好指定owner条件。user*没有该字段         user_tab_comments;表注释         user_col_comments;表字段注释         以上两个只能获取自己用户的表的注释信息，如果要访问自己能够访问的其他用户的表，则需要使用：         all_tab_comments;表注释         all_col_comments;表字段注释         当然，如果有DBA权限，则可以使用         dba_tab_comments;表注释 [...]]]></description>
			<content:encoded><![CDATA[<p>sql* COMMENT ON TABLE emp   IS &#8216;Employee Information&#8217;;<br />
Comment created.</p>
<p>Comments can be viewed through the data dictionary views.<br />
ALL_COL_COMMENTS<br />
USER_COL_COMMENTS<br />
<span id="more-350"></span><br />
ALL_TAB_COMMENTS<br />
USER_TAB_COMMENTS</p>
<p> </p>
<p> </p>
<p>    user_tab_comments;表注释</p>
<p>        user_col_comments;表字段注释</p>
<p>        以上两个只能获取自己用户的表的注释信息，如果要访问自己能够访问的其他用户的表，则需要使用：</p>
<p>        all_tab_comments;表注释</p>
<p>        all_col_comments;表字段注释</p>
<p>        当然，如果有DBA权限，则可以使用</p>
<p>        dba_tab_comments;表注释</p>
<p>        dba_col_comments;表字段注释</p>
<p>        dba*和all*最好指定owner条件。user*没有该字段</p>
<p>        user_tab_comments;表注释</p>
<p>        user_col_comments;表字段注释</p>
<p>        以上两个只能获取自己用户的表的注释信息，如果要访问自己能够访问的其他用户的表，则需要使用：</p>
<p>        all_tab_comments;表注释</p>
<p>        all_col_comments;表字段注释</p>
<p>        当然，如果有DBA权限，则可以使用</p>
<p>        dba_tab_comments;表注释</p>
<p>        dba_col_comments;表字段注释</p>
<p>        dba*和all*最好指定owner条件。user*没有该字段</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeidea.com/blog/2009/03/18/oracle-comment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>密码保护：OTN的登陆信息</title>
		<link>http://www.codeidea.com/blog/2009/03/12/otn%e7%9a%84%e7%99%bb%e9%99%86%e4%bf%a1%e6%81%af/</link>
		<comments>http://www.codeidea.com/blog/2009/03/12/otn%e7%9a%84%e7%99%bb%e9%99%86%e4%bf%a1%e6%81%af/#comments</comments>
		<pubDate>Thu, 12 Mar 2009 11:43:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://www.codeidea.com/blog/?p=320</guid>
		<description><![CDATA[无法提供摘要。这是一篇受保护的文章。]]></description>
			<content:encoded><![CDATA[<form action="http://www.codeidea.com/blog/wp-pass.php" method="post">
<p>这是一篇受密码保护的文章。您需要提供访问密码：</p>
<p><label for="pwbox-320">密码：<br />
<input name="post_password" id="pwbox-320" type="password" size="20" /></label><br />
<input type="submit" name="Submit" value="提交" /></p></form>
]]></content:encoded>
			<wfw:commentRss>http://www.codeidea.com/blog/2009/03/12/otn%e7%9a%84%e7%99%bb%e9%99%86%e4%bf%a1%e6%81%af/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>介绍 Oracle数据库复制解决方案SharePlex for Oracle</title>
		<link>http://www.codeidea.com/blog/2009/03/12/%e4%bb%8b%e7%bb%8d-oracle%e6%95%b0%e6%8d%ae%e5%ba%93%e5%a4%8d%e5%88%b6%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88shareplex-for-oracle/</link>
		<comments>http://www.codeidea.com/blog/2009/03/12/%e4%bb%8b%e7%bb%8d-oracle%e6%95%b0%e6%8d%ae%e5%ba%93%e5%a4%8d%e5%88%b6%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88shareplex-for-oracle/#comments</comments>
		<pubDate>Thu, 12 Mar 2009 11:39:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[oracle]]></category>
		<category><![CDATA[dataguard]]></category>
		<category><![CDATA[冗灾]]></category>
		<category><![CDATA[双机]]></category>

		<guid isPermaLink="false">http://www.codeidea.com/blog/?p=318</guid>
		<description><![CDATA[             SharePlex是Quest公司为关键业务系统推出的一个完全的数据库复制解决方案。SharePlex复制技术可确保系统在出现故障、过载、移植和维护情况下最大程度地减少系统停机时间。        SharePlex采用独特的专利技术确保企业实现实时和冗余的数据复制。利用SharePlex解决方案，企业可实现以下管理目标： Ø        提高系统灾难恢复能力 Ø        实现负载均衡提高系统性能 Ø         在业务系统不停机情况下实现系统维护 1       适用场合 (1) 消除系统移植过程中的停机时间 尽管企业从规划设计良好的业务系统中收益，但也不得不面临系统移植和升级这一挑战。数据集中、技术的推陈出新和服务器的移植都是导致必须进行系统移植的原因之一。     如果企业进行过合并或收购，现在正进行相关数据的数据集中工作，或正考虑硬件平台的升级，或计划应用新的技术，那么SharePlex可用来帮助降低系统的停机时间。     SharePlex可确保在进行以上工作时正常的事务处理得以继续进行。源系统的功能不受到任何影响，SharePlex只捕捉移植过程中发生变化的事务并将它们排队保存。当移植工作结束后，这些被保存的事务将被应用到新系统中并进行数据同步工作。一旦数据同步后，用户活动会有非常短暂的停顿，在此瞬间将完成系统的切换动作。 SharePlex无论是在本地还是在广域网环境下都能很好地工作。更为重要的是，即使在选择硬件平台，进行数据集中或合并公司过程中涉及多种异构环境，SharePlex也可以非常好地工作，如Sun、HP、Compaq、IBM 和NT/2000平台以及从7.3.4到9i的Oracle数据库版本。 可完全在异构环境下工作  可进行局域网和广域网移植  可完成数据从旧系统到新系统的移植和集中 (2)     减少有计划的停机时间 有计划的停机也可能对企业的服务水平、客户满意程度甚至股价等带来影响，而据估计企业80%的停机是有计划的行为。 利用SharePlex，企业可几乎完全消除系统的停机时间而不用考虑在此期间进行何种维护工作、哪个操作系统会受到影响，甚至不用考虑数据库版本的问题及对硬件环境进行何种操作。 类似的技术如集群技术可使维护工作在其中的一台服务器上运行，而SharePlex可将此种维护工作扩展到所有的服务器。除了针对服务器，同样的维护工作可在数据库上进行。因此针对操作系统、数据库和硬件环境的维护工作不再需要大量的停机时间。对于企业来说，这一改进是革命性的，它将改变系统维护的规则。在此之前，想要改变Oracle数据块的大小是不可想象的，因为需要大量的停机时间来完成数据的卸出和装入，同时，对数据库版本的维护也经常是一个挑战，但SharePlex完全改变了这些。 (3) 提供系统冗灾能力 比以往任何时候企业开始更注重对关键业务数据进行及时的保护，因为关键业务数据的丢失可能会给企业带来不可估量的损失。 幸运的是，自从1997年以来，SharePlex已不断地被证明其领先的技术能够帮助企业实现这一管理目标。快速、精确和对网络的低负载使得企业在对数据进行维护过程中不必担心地域和物理分布问题。尽管有其它技术可实现这个功能，有些解决方案甚至是免费的，但从长远来说，其真正的开销在于网络负载上，而SharePlex在此方面可为企业大大地节省开销。 [...]]]></description>
			<content:encoded><![CDATA[<p> </p>
<p> </p>
<p>         SharePlex是Quest公司为关键业务系统推出的一个完全的数据库复制解决方案。SharePlex复制技术可确保系统在出现故障、过载、移植和维护情况下最大程度地减少系统停机时间。</p>
<p>       SharePlex采用独特的专利技术确保企业实现实时和冗余的数据复制。利用SharePlex解决方案，企业可实现以下管理目标：</p>
<p>Ø        提高系统灾难恢复能力</p>
<p>Ø        实现负载均衡提高系统性能</p>
<p>Ø         在业务系统不停机情况下实现系统维护</p>
<p>1       适用场合</p>
<p>(1) 消除系统移植过程中的停机时间</p>
<p>尽管企业从规划设计良好的业务系统中收益，但也不得不面临系统移植和升级这一挑战。数据集中、技术的推陈出新和服务器的移植都是导致必须进行系统移植的原因之一。</p>
<p>    如果企业进行过合并或收购，现在正进行相关数据的数据集中工作，或正考虑硬件平台的升级，或计划应用新的技术，那么SharePlex可用来帮助降低系统的停机时间。</p>
<p>    SharePlex可确保在进行以上工作时正常的事务处理得以继续进行。源系统的功能不受到任何影响，SharePlex只捕捉移植过程中发生变化的事务并将它们排队保存。当移植工作结束后，这些被保存的事务将被应用到新系统中并进行数据同步工作。一旦数据同步后，用户活动会有非常短暂的停顿，在此瞬间将完成系统的切换动作。</p>
<p><span id="more-318"></span></p>
<p>SharePlex无论是在本地还是在广域网环境下都能很好地工作。更为重要的是，即使在选择硬件平台，进行数据集中或合并公司过程中涉及多种异构环境，SharePlex也可以非常好地工作，如Sun、HP、Compaq、IBM 和NT/2000平台以及从7.3.4到9i的Oracle数据库版本。</p>
<p>可完全在异构环境下工作 </p>
<p>可进行局域网和广域网移植 </p>
<p>可完成数据从旧系统到新系统的移植和集中</p>
<p>(2)     减少有计划的停机时间</p>
<p>有计划的停机也可能对企业的服务水平、客户满意程度甚至股价等带来影响，而据估计企业80%的停机是有计划的行为。</p>
<p>利用SharePlex，企业可几乎完全消除系统的停机时间而不用考虑在此期间进行何种维护工作、哪个操作系统会受到影响，甚至不用考虑数据库版本的问题及对硬件环境进行何种操作。</p>
<p>类似的技术如集群技术可使维护工作在其中的一台服务器上运行，而SharePlex可将此种维护工作扩展到所有的服务器。除了针对服务器，同样的维护工作可在数据库上进行。因此针对操作系统、数据库和硬件环境的维护工作不再需要大量的停机时间。对于企业来说，这一改进是革命性的，它将改变系统维护的规则。在此之前，想要改变Oracle数据块的大小是不可想象的，因为需要大量的停机时间来完成数据的卸出和装入，同时，对数据库版本的维护也经常是一个挑战，但SharePlex完全改变了这些。</p>
<p>(3) 提供系统冗灾能力</p>
<p>比以往任何时候企业开始更注重对关键业务数据进行及时的保护，因为关键业务数据的丢失可能会给企业带来不可估量的损失。</p>
<p>幸运的是，自从1997年以来，SharePlex已不断地被证明其领先的技术能够帮助企业实现这一管理目标。快速、精确和对网络的低负载使得企业在对数据进行维护过程中不必担心地域和物理分布问题。尽管有其它技术可实现这个功能，有些解决方案甚至是免费的，但从长远来说，其真正的开销在于网络负载上，而SharePlex在此方面可为企业大大地节省开销。</p>
<p>当利用SharePlex为业务系统提供灾难恢复能力时，冗灾系统中的硬件环境又可用来降低系统维护工作中的停机时间。这并不与企业的冗灾方案相矛盾，因为事务可被发送到系统中的远程节点上。</p>
<p>通常的冗灾技术采用等待模式，即备份系统实际上不可用。如果要确保这个冗灾系统在需要的时候可用还需进行测试，而测试往往需要备份系统处于离线状态，这种测试同时也是一个开销较大的行为。如果不进行定期的测试，冗灾系统的可靠性会随着时间的推移而降低。利用SharePlex可以对冗灾系统进行不间断的测试，确保冗灾系统随时处于可用状态。</p>
<p>对于许多企业来说，灾难恢复时间的长短直接影响着公司的业绩。SharePlex支持多种配置方案，包括对等配置方案，在这种配置方案中，两个数据库都处于可用状态，因而可实现快速的失败接管。在冗灾发方案中没有比这种失败接管更快的方法了。</p>
<p>通常，系统灾难大多被理解为一个节点的系统环境崩溃掉了，但研究表明大多数的数据丢失并不是系统崩溃导致的。相反，一些意外事件，如删表、数据块级的数据损坏或数据文件的丢失才是数据丢失的主要原因，而SharePlex可以防止这类意外的发生。</p>
<p>采用SharePlex作为整个冗灾系统的关键环节可以有效地保护企业的关键信息。</p>
<p>(4)     负载平衡</p>
<p>许多企业面临着一个充满竞争冲突的业务需求：一方面，企业需要确保在线事务处理系统具有良好的性能；另一方面，企业需要获得有效和及时的决策支持信息和企业报表。在传统的系统中这两种需求的冲突极大地降低了业务系统的性能。</p>
<p>利用SharePlex可以很容易地建立一个与源系统保持数据同步的目标系统，在这种配置环境下，在线事务处理可以获得很好的性能，而决策支持和报表处理可在不影响正常业务的情况下进行。通过这种独特的配置策略可以非常好地解决在线事务处理和报表处理之间的竞争问题，不管报表系统会消耗多大的系统资源，对于客户和内部员工来说，系统的响应速度不会受到丝毫的影响。</p>
<p>    为报表处理和在线事务处理规划和建立数据库是一件比较困难的事情。在理想情况下，每一个数据库应有其自己的索引模式、数据分区和数据归档，利用SharePlex可以很容易地实现这个目标。SharePlex支持在事务处理数据库和报表数据库上分别建立不同的索引，数据可在一个数据库中集中存储和管理而在另一个数据库中进行分区管理。另外，由于事务处理数据库和报表数据库具有同步的数据，因此可以不对在线事务数据库进行归档，而只对报表数据库归档，这种管理模式既可以保证在线事务处理数据库具有最好的性能，又可保证数据始终处于可访问状态。</p>
<p>当一种单一的数据复制模式不能满足企业的业务扩展需求和系统性能时，很容易利用SharePlex建立另外的复制模式，从而进一步扩展系统和提高报表处理的性能。</p>
<p>(5)     支持数据集中和数据广播</p>
<p>企业可能经常需要进行数据集中或广播操作从而使事业的各个部门或分公司获得最新的信息。SharePlex在设计和开发时就考虑了此种需求，利用SharePlex，企业可以在任意时间，对任意地点进行信息更新。</p>
<p>SharePlex通过非常有效的管理控制机制来实现数据集中和广播。SharePlex提供细化的数据筛选功能，可按业务需要定制需要传输的数据，从而缓解和消除了数据传输过程中的安全和带宽问题。例如，如果远程节点只需要有关本地员工的基本信息而无需薪水信息，那么只需利用SharePlex传输相关的数据行和字段即可。</p>
<p>通常，企业内部可能有多个应用系统，需要对这些系统中的数据进行集中，生成企业的管理报表。从多个不同的Oracle实例中抽取数据和产生报表是件比较耗时和费力的事情。SharePlex可从多个数据库中抽取数据并将数据集中到一个Oracle实例中，而不用考虑这些数据库是在本地还是在远程。在这种情况下，数据抽取和生成报表操作不再独立，而是在同一个数据库实例中进行，从而消除了极其消耗资源的数据库间的关联操作。</p>
<p>服务器集中是系统迁移的一种形式。进行系统维护要带来开销，当服务器数量众多时系统维护开销还是很可观的。为了降低这些开销，一些企业在进行服务器集中工作，通过将系统的规模集中到为数不多的高性能服务器上可大大地提高工作效率并降低生产成本。利用SharePlex可进行数据库的集中工作，从而加速服务器的集中过程。</p>
<p>(6) 支持数据仓库应用、实现更好的决策支持</p>
<p>为了在当今的市场竞争中保持优势，越来越多的公司在建设强健的决策支持系统。传统的数据抽取、转换和装载工具按照时间段处理数据而不能进行实时的数据处理，因而决策支持系统就不能真正体现出太大的价值。</p>
<p>当前面临的一个挑战就是如何提供最新的信息，而把数据转换为信息就需要对数据进行转换，SharePlex可以实时捕捉、转换数据到决策支持系统中。</p>
<p>SharePlex可确保决策支持系统始终提供最新的信息。</p>
<p>2       解决方案结构</p>
<p>作为SharePlex产品系列中的一个重要组成部分，SharePlex for Oracle是实时的、冗余、流程化的数据库复制方案，专门为Oracle数据库设计和开发。SharePlex for Oracle采用业界内独特的技术，领先的产品结构确保企业实现其高可用性和高性能的管理目标。这种领先技术结构所带来的收益在于：</p>
<p>保持数据库始终处于最新的可用状态 </p>
<p>快速和精确，几乎不对生产数据库产生影响 </p>
<p>确保系统的可扩展性和完整的功能，可实现对企业级数据的处理，并能随着业务规模的增长而扩展 </p>
<p>确保企业实现灾难恢复机制 </p>
<p>从业界专家的经验中获益 </p>
<p>消除有计划的停机时间，确保系统24&#215;7不间断运转 </p>
<p>实现自动化和报表功能，易于使用</p>
<p>(1) 基本结构</p>
<p>下图所示为SharePlex for Oracle的基本结构，其中涉及较多的技术细节。</p>
<p>(2)     数据捕获</p>
<p>SharePlex for Oracle中由捕获进程来收集发生变化的数据，此进程的独特之处在于它几乎不对生产数据库带来任何开销。</p>
<p>此捕获过程中完成的操作为：</p>
<p>捕获进程从Oracle redo logs中读取信息，因此复制过程不会给生产数据库实例带来性能问题 </p>
<p>只有发生改变的数据被传输，而不是Redo Logs中的全部信息，因此SharePlex的网络负载非常小 </p>
<p>尽管需要在Oracle数据库中安装少量的对象用来存储有关复制的一些基本信息，但源数据库不需要参与到数据捕获和传输过程中 </p>
<p>SharePlex的捕获进程不但可以读取在线的Redo Logs，而且可以读取Archive Log甚至当Archive Log被移动到其它设备上时，SharePlex会发出提示信息。正是这种能力极大地增强了系统的冗余功能。例如，如果捕获进程由于某种原因被停止，当它重新启动后数据同步不会受到影响</p>
<p>捕获进程驻留在源系统上，自动读取Oracle的在线Redo Logs。这种读操作是从操作系统的角度来完成的，而不是通过数据库。通过将Redo Logs作为获取变化信息的源泉，Quest可以完成数据的复制而不会给生产系统带来额外的开销。由于Oracle使用Redo Logs进行系统恢复，因此Redo Logs信息足够，其数据格式也足够稳定。Quest解析Redo Logs，从而获取需要的信息。从Oracle版本6开始，Quest就开始此项工作，虽然Oracle6已不再使用，但对目前的Oracle 版本来说，其工作原理没有发生本质性的改变，所不同的是Oracle数据库不同版本的Redo Logs格式有些是不同的，SharePlex解析相应Oracle版本的Redo Logs，实现对Oracle7.3.4到Oracle9i的支持。</p>
<p>捕获进程连续监控Redo Logs用以捕捉变化信息。当Redo Logs中出现一条新记录时，SharePlex判断其是否属于被复制对象，如果是，则SharePlex为该条记录加入用于决定此记录将被发向那个主机的地址信息并将包含地址信息的记录存放到自己的队列中，存储队列存在于数据库之外。发生改变的数据被立即处理并被发送到目标系统中而不等待提交或回滚动作的完成，因为等待提交或回滚完成将带来延迟。当提交或回滚信息被写入Redo Logs时，它们也将被发送到目标系统中，从而在目标系统中完成相对应的操作。</p>
<p>(3) 数据传输</p>
<p>SharePlex结合其自己的网络协议和TCP/IP协议来完成源和目标系统之间的数据传输。其相关的进程确保数据的正确接收和网络数据包的正确顺序，从而提供网络传输冗余，确保数据的完整。整个数据传输过程无需其它的中间件。</p>
<p>(4) 应用数据</p>
<p>应用进程将传送到目标系统中的信息转化为SQL语句，然后采用标准的SQL*Plus方式将SQL语句发送给Oracle执行。</p>
<p>    SharePlex能够实现精确复制的一个重要原因就是其能保证从源数据库到目标数据库的Oracle读一致性，不但按顺序复制事务，而且也复制上下文信息。由于SharePlex将源数据库中发生变化的全部事务信息都复制到目标数据库中，因此SharePlex复制方案用于灾难恢复系统中是足够可靠的。</p>
<p>3       配置方案</p>
<p>SharePlex提供多种不同的配置方式以满足高可用性和负载均衡需求。主要包括：</p>
<p>(1) 负载平衡/减少查询竞争</p>
<p>SharePlex 可以将源系统的数据实时复制到目标系统，从而建立一个可以被访问的即席查询和报表系统。目标系统可以是源系统的全集和子集。通过将查询和报表系统放在不同的数据库实例中运行，可以平衡服务器负载并提高OLTP类生产系统的性能。一方面，可以减少OLTP应用和查询报表应用之间的磁盘I/O冲突，提高OLTP应用的效率。另一方面，SharePlex支持不同模式间的复制。可以分别面向OLTP和查询系统的使用特点来进行设计，如建立索引，设置数据库表的参数等等。</p>
<p> </p>
<p> </p>
<p> 报表实例</p>
<p>（2）高可用性</p>
<p>    保证数据高可用性和数据库系统能够从灾难中迅速恢复是一个非常具有挑战性的工作。SharePlex for Oracle可以通过LAN或WAN进行复制，这样当生产环境出现紧急事件或要进行例行维护时，可以将应用切换到复制数据库中。有了生产数据库的实时拷贝，用户可以保证应用系统7*24不间断运行的情况下进行维护工作，如进行操作系统和数据库的升级等等。</p>
<p> </p>
<p> 高可用性</p>
<p>（3）分布处理</p>
<p>    多数据源配置允许你将不同的用户分布到不同的服务器，让每个数据库能够反映其他数据库的变化。在这种配置模式下，SharePlex采用必要的冲突处理机制来解决可能发生的冲突。 </p>
<p> </p>
<p> 多数据源</p>
<p>（4）广播和集中复制</p>
<p>    SharePlex for Oracle通过LAN或WAN进行实时复制，将生产数据库中的数据拷贝到需要它们的地方。对广播复制来说，远程用户可以访问这些实时数据而不用登录生产服务器。因此，提高了网络性能和生产环境下的OLTP应用的性能。</p>
<p> </p>
<p>  集中复制</p>
<p> </p>
<p>  广播复制</p>
<p>（5）企业环境的数据分布</p>
<p>    SharePlex 支持层叠复制，可以向不是直接相连的数据库复制数据。使用这种配置，可以在远程数据库间进行复制（如从北京到上海）。SharePlex 支持多种复杂的场景来满足复制需求。</p>
<p> </p>
<p>  数据分布</p>
<p> </p>
<p>4       解决方案优势</p>
<p>(1) 快速精确和低负载</p>
<p>SharePlex是非常快速的，同时保证了复制数据的精确性。在源数据库一端，SharePlex严格地遵守读一致性模式。在目标数据库一端，SharePlex使用标准SQL提交事务，并保证操作次序和会话上下文的一致。</p>
<p>基于Log的复制方式对源数据库和系统所带来资源开销非常小，因为复制操作只是读取操作系统的日志文件，同时通过TCP/IP方式而不是采用中间件方式传输只发生改变的数据也使网络负载降至最低。</p>
<p>(2) 可扩展及全面</p>
<p>每秒钟可针对数千个表复制超过一千个以上事务的处理能力意味着SharePlex可以处理企业级的业务数据，可以满足企业大数据量的吞吐需求。实际环境中的吞吐速率是受服务器性能、网络带宽和事务的复杂程度所影响的。</p>
<p>SharePlex 提供的完全复制程度是其它软件复制工具所不具备的。SharePlex支持带长列的表、带参照完整性约束的表、没有主键的表、序列等等的复制。这使SharePlex成为仅有的全面支持Oracle Financials应用程序组件复制的软件解决。SharePlex提供对业界多种应用的支持，主要包括：</p>
<p>Banner </p>
<p>Baan </p>
<p>Geoquest </p>
<p>JD Edwards </p>
<p>Oracle eBusiness Suite </p>
<p>PeopleSoft </p>
<p>Peregrine </p>
<p>Remedy </p>
<p>Retek </p>
<p>SAP </p>
<p>Siebel </p>
<p>Vantive</p>
<p>此外，SharePlex复制ALTER TABLE等命令，使它可以不需要其它软件复制工具就复制DDL活动。</p>
<p>(3) 灾难恢复</p>
<p>SharePlex在设计时已经将性能和冗灾因素考虑在内。SharePlex可以容忍实例失败、系统失败和网络失败。一般情况下，在源系统中运行的事务一旦被写入log，SharePlex立即将其发送到目标系统。然而，如果发生问题，SharePlex可以在源系统或目标系统进行事务排队(为了最小化对源系统的影响，排队位于Oracle源实例之外)。例如，如果网络宕掉或目标系统宕掉，SharePlex将源系统中的事务排队。当网络或系统恢复后，SharePlex将自动提交被排队的数据并清空队列文件。</p>
<p>(4) 灵活配置和简洁管理</p>
<p>SharePlex可以被灵活配置，以支持各种复制策略。包括单向复制、双向复制、广播复制、集中复制及多层复制等。</p>
<p>SharePlex是独立的软件，不需要修改与数据库进行交互的应用程序和数据库本身。因此，安装非常简洁。配置和改变复制策略不影响源数据库系统中的生产活动。管理员可以用Windows界面或服务器端的命令行管理和监控复制操作的各个方面。</p>
<p>5       系统支持</p>
<p>SharePlex for Oracle 最新版本为4.0，支持在以下平台上或之间进行复制。为了完成在不同机器间的复制工作，在每个需要进行复制的服务器（源服务器和目标服务器）上都需要安装SharePlex for Oracle。</p>
<p>HP 9000系列：</p>
<p>Ø              HP-UX 10.20，Oracle版本：7.3.4、8.0.6</p>
<p>Ø              HP-UX 11.00和11i，Oracle版本：7.3.4、8.0.6、8.1.7、9.0.1.3</p>
<p>IBM RS/6000系列：</p>
<p>Ø              AIX 4.3.3，Oracle版本：7.3.4、8.0.6、8.1.7、9.0.1.3</p>
<p>Ø              AIX 5.1 or 5L，Oracle版本：8.1.7 </p>
<p>Sun Solaris：</p>
<p>Ø              Solaris 2.6、2.7 和2.8，Oracle版本：7.3.4、8.0.6、8.1.7、9.0.1.3</p>
<p>Compaq Tru64：</p>
<p>Ø              DEC 4.0f, 4.0g，Oracle版本：7.3.4、8.0.6、8.1.7 </p>
<p>Ø              DEC 5.0a 和DEC 5.1，Oracle版本：8.1.7 </p>
<p>Windows 2000/NT：</p>
<p>Ø              Windows NT 4.0 Service Pack 6 及Windows 2000 (Windows 2000 Professional SP1, Server, Advanced Server, Enterprise Server)，Oracle版本：7.3.4、8.0.6、8.1.7、9.0.1.3</p>
<p>备注：不提供对Windows 2000 活动目录（Active Directory ）的支持</p>
<p>6       公司介绍</p>
<p>Quest Software, Inc. (NASDAQ: QSFT) 是业界领先的应用管理解决方案供应商。致力于通过改善企业关键应用的性能和可用性，降低其运行成本，帮助 IT 专业人员高效率地完成关键业务数据和应用系统的管理工作。</p>
<p>Quest公司的全线产品不仅可以管理包括Oracle、IBM 和Microsoft在内的数据库应用，也为包括Oracle E-Business Suite、Siebel eBusiness Applications、mySAP.com、Microsoft Exchange 及 PeopleSoft等企业级应用系统提供了最佳的管理方案。</p>
<p>Quest面向Oracle的管理工具专门为数据库的开发人员和管理人员而设计，从不同的视角帮助相关人员检查可能的性能问题。其产品专业化强，设计细腻，易于使用，被全世界广大用户所使用，在同类产品中具有绝对领先的技术和市场优势。相关产品系列分为性能维护管理、高可用性管理及应用开发管理三部分。</p>
<p>Quest产品1999年进入中国。在短短的时间内，已经被包括北京电信、哈尔滨电信、Motorola、东方资产、北京地税、新疆移动、浙江移动、湖北电信、浙江电信及大唐电信等大批企业用户采用,并以其适用性和高品质博得了用户的赞誉。</p>
<p>Quest公司成立于1987年，总部位于加州Irvine，全球员工总数超过2000名，产品用户达到120，000多个。Quest公司网址为：http://www.quest.com。</p>
<p>本文出自 51CTO.COM技术博客</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeidea.com/blog/2009/03/12/%e4%bb%8b%e7%bb%8d-oracle%e6%95%b0%e6%8d%ae%e5%ba%93%e5%a4%8d%e5%88%b6%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88shareplex-for-oracle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何彻底删除Windows上的 Oracle(用于oracle8,8i,9i,10g)</title>
		<link>http://www.codeidea.com/blog/2009/03/12/%e5%a6%82%e4%bd%95%e5%bd%bb%e5%ba%95%e5%88%a0%e9%99%a4windows%e4%b8%8a%e7%9a%84-oracle%e7%94%a8%e4%ba%8eoracle88i9i10g/</link>
		<comments>http://www.codeidea.com/blog/2009/03/12/%e5%a6%82%e4%bd%95%e5%bd%bb%e5%ba%95%e5%88%a0%e9%99%a4windows%e4%b8%8a%e7%9a%84-oracle%e7%94%a8%e4%ba%8eoracle88i9i10g/#comments</comments>
		<pubDate>Thu, 12 Mar 2009 11:36:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[oracle]]></category>
		<category><![CDATA[删除]]></category>

		<guid isPermaLink="false">http://www.codeidea.com/blog/?p=316</guid>
		<description><![CDATA[  如果Oracle安装在Windows上，那么删除起来特别麻烦，以下列出具体步骤： 软件环境： windows 2000、ORACLE 8.1.7；ORACLE安装路径为：C：\ORACLE 实现方法： 1、开始－＞设置－＞控制面板－＞管理工具－＞服务 停止所有Oracle服务。 2、开始－＞程序－＞Oracle &#8211; OraHome81－＞Oracle Installation ProdUCts－＞ Universal Installer 卸装所有Oracle产品， 但Universal Installer本身不能被删除 3、运行regedit，选择 HKEY_LOCAL_MACHINE－＞SOFTWAREORACLE，按del键删除这个入口。 4、运行regedit，选择 HKEY_LOCAL_MACHINE－＞SYSTEM－＞CurrentControlSet－＞Services，滚动 这个列表，删除所有Oracle入口。 5、运行refedit，选择 HKEY_LOCAL_MACHINE－＞SYSTEM－＞CurrentControlSet－＞Services－＞Eventlog－＞Application，删除所有Oracle入口。 6、开始－＞设置－＞控制面板－＞系统－＞高级－＞环境变量 删除环境变量CLASSPATH和PATH中有关Oracle的设定 7、从桌面上、STARTUP（启动）组、程序菜单中，删除所有有关Oracle的组和图标 8、删除Program Files\Oracle目录 9、重新启动计算机，重起后才能完全删除Oracle所在目录,也可以用processxp工具把有oci.dll的进程删除，这样不用重新启动就可以删除oracle目录了。 10、删除与Oracle有关的文件，选择Oracle所在的缺省目录C：\Oracle，删除这个入口目录及所有子目录，并从Windows 2000目录（一般为C：\WINNT）下删除以下文 件ORACLE.INI、oradim73.INI、oradim80.INI、oraodbc.ini等等。 11、WIN.INI文件中若有[ORACLE]的标记段，删除该段 12、如有必要，删除所有Oracle相关的ODBC的DSN 13、到事件查看器中，删除Oracle相关的日志 说明： 如果有个别DLL文件无法删除的情况，则不用理会，重新启动，开始新的安装，安装时，选择一个新的目录，则，安装完毕并重新启动后，老的目录及文件就可以删除掉了。]]></description>
			<content:encoded><![CDATA[<p> </p>
<p>如果Oracle安装在Windows上，那么删除起来特别麻烦，以下列出具体步骤：</p>
<p>软件环境：</p>
<p>windows 2000、ORACLE 8.1.7；ORACLE安装路径为：C：\ORACLE</p>
<p>实现方法：</p>
<p>1、开始－＞设置－＞控制面板－＞管理工具－＞服务 停止所有Oracle服务。</p>
<p>2、开始－＞程序－＞Oracle &#8211; OraHome81－＞Oracle Installation ProdUCts－＞ Universal Installer 卸装所有Oracle产品，</p>
<p>但Universal Installer本身不能被删除</p>
<p><span id="more-316"></span></p>
<p>3、运行regedit，选择 HKEY_LOCAL_MACHINE－＞SOFTWAREORACLE，按del键删除这个入口。</p>
<p>4、运行regedit，选择 HKEY_LOCAL_MACHINE－＞SYSTEM－＞CurrentControlSet－＞Services，滚动 这个列表，删除所有Oracle入口。</p>
<p>5、运行refedit，选择 HKEY_LOCAL_MACHINE－＞SYSTEM－＞CurrentControlSet－＞Services－＞Eventlog－＞Application，删除所有Oracle入口。</p>
<p>6、开始－＞设置－＞控制面板－＞系统－＞高级－＞环境变量 删除环境变量CLASSPATH和PATH中有关Oracle的设定</p>
<p>7、从桌面上、STARTUP（启动）组、程序菜单中，删除所有有关Oracle的组和图标</p>
<p>8、删除Program Files\Oracle目录</p>
<p>9、重新启动计算机，重起后才能完全删除Oracle所在目录,也可以用processxp工具把有oci.dll的进程删除，这样不用重新启动就可以删除oracle目录了。</p>
<p>10、删除与Oracle有关的文件，选择Oracle所在的缺省目录C：\Oracle，删除这个入口目录及所有子目录，并从Windows 2000目录（一般为C：\WINNT）下删除以下文 件ORACLE.INI、oradim73.INI、oradim80.INI、oraodbc.ini等等。</p>
<p>11、WIN.INI文件中若有[ORACLE]的标记段，删除该段</p>
<p>12、如有必要，删除所有Oracle相关的ODBC的DSN</p>
<p>13、到事件查看器中，删除Oracle相关的日志</p>
<p>说明： 如果有个别DLL文件无法删除的情况，则不用理会，重新启动，开始新的安装，安装时，选择一个新的目录，则，安装完毕并重新启动后，老的目录及文件就可以删除掉了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeidea.com/blog/2009/03/12/%e5%a6%82%e4%bd%95%e5%bd%bb%e5%ba%95%e5%88%a0%e9%99%a4windows%e4%b8%8a%e7%9a%84-oracle%e7%94%a8%e4%ba%8eoracle88i9i10g/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle 8.1.7.4升级Oracle 10.2(未测试)</title>
		<link>http://www.codeidea.com/blog/2009/03/12/oracle-8174%e5%8d%87%e7%ba%a7oracle-102%e6%9c%aa%e6%b5%8b%e8%af%95/</link>
		<comments>http://www.codeidea.com/blog/2009/03/12/oracle-8174%e5%8d%87%e7%ba%a7oracle-102%e6%9c%aa%e6%b5%8b%e8%af%95/#comments</comments>
		<pubDate>Thu, 12 Mar 2009 11:04:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://www.codeidea.com/blog/?p=308</guid>
		<description><![CDATA[    Oracle提供了升级工具让用户可以将Database从低版本升级到更高的版本,8i可以直接升级到10G,但 8i必须是8.1.7.4(含)以上的版本,8.1.7.0是不被支持的.Oracle提供了两种升级方法,用向导升级和手工升级,以下分别介绍本人升级的过程. 一.    向导升级 1.      首先,应该备份8i 数据库(当然,你也可以选择不备份，不要怕丢工作) 2.      安装Oracle 10G在和8i不同的Home下,选择不要创建数据库 3.      以SysDBA的身份,登入到8i数据库, SQL&#62;Spool info.log SQL&#62;@ORACLE_HOME/rdbms/admin/utlu102i.sql SQL&#62;Spool off 4.      查看 info.log,按照LOG上的提示,将RBS修改到符合要求,其它警告可以不去修改,在Upgrade的过程中系统会提示,点确定会由升级程序修改. 5.      在开始找到Oracle菜单的数据库升级工具,点击运行 6.      根据向导提示升级(因为之前已经备份,升级时选择已经备份,不再需要升级程序帮你备份),在确认窗口,要选择确定,继续,是等肯定按钮以完成升级动作. 如果你的初始化参数正确,一般情况会顺利结束升级动作,如果过程中出现错误,就要将DB复原,用手动升级了.我在升级一台数据库时曾遇到Ora-00064错误而终至升级. 二,手动升级   1. 首先,应该备份8i 数据库   2. 安装Oracle 10G在和8i不同的Home下,选择不要创建数据库   3. 以SysDBA的身份,登入到8i数据库, SQL&#62;Spool info.log SQL&#62;@ORACLE_HOME/rdbms/admin/utlu102i.sql SQL&#62;Spool  off 4.   [...]]]></description>
			<content:encoded><![CDATA[<p>    Oracle提供了升级工具让用户可以将Database从低版本升级到更高的版本,8i可以直接升级到10G,但 8i必须是8.1.7.4(含)以上的版本,<strong><span style="color: #ff0000;">8.1.7.0是不被支持的</span></strong>.Oracle提供了两种升级方法,用向导升级和手工升级,以下分别介绍本人升级的过程.</p>
<p>一.    向导升级</p>
<p>1.      首先,应该备份8i 数据库(当然,你也可以选择不备份，不要怕丢工作)</p>
<p>2.      安装Oracle 10G在和8i不同的Home下,选择不要创建数据库</p>
<p>3.      以SysDBA的身份,登入到8i数据库,</p>
<p>SQL&gt;Spool info.log</p>
<p><span id="more-308"></span></p>
<p>SQL&gt;@ORACLE_HOME/rdbms/admin/utlu102i.sql</p>
<p>SQL&gt;Spool off</p>
<p>4.      查看 info.log,按照LOG上的提示,将RBS修改到符合要求,其它警告可以不去修改,在Upgrade的过程中系统会提示,点确定会由升级程序修改.</p>
<p>5.      在开始找到Oracle菜单的数据库升级工具,点击运行</p>
<p>6.      根据向导提示升级(因为之前已经备份,升级时选择已经备份,不再需要升级程序帮你备份),在确认窗口,要选择确定,继续,是等肯定按钮以完成升级动作.</p>
<p>如果你的初始化参数正确,一般情况会顺利结束升级动作,如果过程中出现错误,就要将DB复原,用手动升级了.我在升级一台数据库时曾遇到Ora-00064错误而终至升级.</p>
<p>二,手动升级</p>
<p>  1. 首先,应该备份8i 数据库</p>
<p>  2. 安装Oracle 10G在和8i不同的Home下,选择不要创建数据库</p>
<p>  3. 以SysDBA的身份,登入到8i数据库,</p>
<p>SQL&gt;Spool info.log</p>
<p>SQL&gt;@ORACLE_HOME/rdbms/admin/utlu102i.sql</p>
<p>SQL&gt;Spool  off</p>
<p>4.        Copy 8i的初始化参数文件到 10G Home正确的位置</p>
<p>5.        Copy密码文件到 10G Home正确的位置</p>
<p>6.        根据info.log的提示,修改10G下的初始化参数文件,info.log会建议哪些参数修改为哪个值,那些参数已经不再需要,请删除之,那些参数是新的,需要增加,请按照建议修改</p>
<p>7.        根据info.log修改redo log, Datafile, Rbs等的大小</p>
<p>8.        Shutdown 8i数据库</p>
<p>9.        停止原数据库的服务</p>
<p>10.    用oradim删除 Sid</p>
<p>11.    用你修改过的参数文件建立新的数据库实例(oradim)</p>
<p>12.    以SysDBA的身份进入Sqlplus,将数据库启动到upgrade状态</p>
<p>SQL&gt;startup upgrade</p>
<p>   我在启动时遇到Ora-00064的错误,修改初始化参数文件,修改过数个参数后重新运行成功,因此不知到是那个参数起了效果,大家可以试一下.</p>
<p>13.    Create tablespace SySaux</p>
<p>CREATE TABLESPACE sysaux DATAFILE &#8216;sysaux01.dbf&#8217;</p>
<p>         SIZE 500M REUSE</p>
<p>         EXTENT MANAGEMENT LOCAL</p>
<p>         SEGMENT SPACE MANAGEMENT AUTO</p>
<p>         ONLINE;</p>
<p>14.    SQL&gt;@C:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\catupgrd.sql</p>
<p>15.    SQL&gt;@C:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\utlu102s.sql</p>
<p>16.    SQL&gt;shutdown immediate</p>
<p>17.    SQL&gt;startup</p>
<p>18.    SQL&gt;@C:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\olstrig.sql</p>
<p>19.    SQL&gt;@C:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\utlrp.sql</p>
<p>20.    停止8i的监听器服务</p>
<p>21.    创建 10G的监听器服务</p>
<p> </p>
<p>升级完成</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeidea.com/blog/2009/03/12/oracle-8174%e5%8d%87%e7%ba%a7oracle-102%e6%9c%aa%e6%b5%8b%e8%af%95/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>密码保护：军卫医院系统oracle8.1.7.0升级到Oracle 10g 10.2.0.0</title>
		<link>http://www.codeidea.com/blog/2009/03/12/%e5%86%9b%e5%8d%ab%e5%8c%bb%e9%99%a2%e7%b3%bb%e7%bb%9foracle8170%e5%8d%87%e7%ba%a7%e5%88%b0oracle-10g-10200/</link>
		<comments>http://www.codeidea.com/blog/2009/03/12/%e5%86%9b%e5%8d%ab%e5%8c%bb%e9%99%a2%e7%b3%bb%e7%bb%9foracle8170%e5%8d%87%e7%ba%a7%e5%88%b0oracle-10g-10200/#comments</comments>
		<pubDate>Thu, 12 Mar 2009 10:57:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[oracle]]></category>
		<category><![CDATA[817]]></category>
		<category><![CDATA[oracle 10g]]></category>
		<category><![CDATA[军卫]]></category>
		<category><![CDATA[升级]]></category>
		<category><![CDATA[数据库]]></category>

		<guid isPermaLink="false">http://www.codeidea.com/blog/?p=303</guid>
		<description><![CDATA[无法提供摘要。这是一篇受保护的文章。]]></description>
			<content:encoded><![CDATA[<form action="http://www.codeidea.com/blog/wp-pass.php" method="post">
<p>这是一篇受密码保护的文章。您需要提供访问密码：</p>
<p><label for="pwbox-303">密码：<br />
<input name="post_password" id="pwbox-303" type="password" size="20" /></label><br />
<input type="submit" name="Submit" value="提交" /></p></form>
]]></content:encoded>
			<wfw:commentRss>http://www.codeidea.com/blog/2009/03/12/%e5%86%9b%e5%8d%ab%e5%8c%bb%e9%99%a2%e7%b3%bb%e7%bb%9foracle8170%e5%8d%87%e7%ba%a7%e5%88%b0oracle-10g-10200/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>升级oracle 10g 10.2.0.0到更高版本的步骤</title>
		<link>http://www.codeidea.com/blog/2009/03/12/%e5%8d%87%e7%ba%a7oracle-10g-10200%e5%88%b0%e6%9b%b4%e9%ab%98%e7%89%88%e6%9c%ac%e7%9a%84%e6%ad%a5%e9%aa%a4/</link>
		<comments>http://www.codeidea.com/blog/2009/03/12/%e5%8d%87%e7%ba%a7oracle-10g-10200%e5%88%b0%e6%9b%b4%e9%ab%98%e7%89%88%e6%9c%ac%e7%9a%84%e6%ad%a5%e9%aa%a4/#comments</comments>
		<pubDate>Thu, 12 Mar 2009 10:55:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://www.codeidea.com/blog/?p=305</guid>
		<description><![CDATA[  SPOOL d:\oracle\product\10.2.0\upgrade.log &#62;@d:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\catupgrd.sql SPOOL off 检查升级后各组件状态 @d:\oracle\product\10.2.0\db_1\rdbms\admin\utlu102s.sql  运行脚本utlrp.sql编译所有invaild的对象 SQL&#62;@d:\oracle\product\10.2.0\db_1\rdbms\admin/utlrp.sql    执行完毕后执行查询所有重新编译错误 SQL&#62; select * from utl_recomp_errors; 或者 select object_name from dba_objects where status=&#8217;INVALID&#8217;;   SQL&#62; SELECT count(*) FROM dba_objects WHERE status=&#8217;INVALID&#8217;; 如果结果显示为“0”，表示升级成功。如果大于0，则重新运行catupgrd.sql脚本，直至没有无效对象。   执行检查： SQL&#62; select name from v$database确认ORACLE_SID正确，为oral SQL&#62; show user确认当前使用者为SYS SQL&#62; select tablespace_name, bytes from dba_data_files对系统表空间大小进行确认。 SQL&#62; @f:\oracle\product\10.2.0\db_1/rdbms/admin/catalog.sql 创建字典   检查tempfile select [...]]]></description>
			<content:encoded><![CDATA[<p> </p>
<p>SPOOL d:\oracle\product\10.2.0\upgrade.log</p>
<p>&gt;@d:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\catupgrd.sql</p>
<p>SPOOL off</p>
<p>检查升级后各组件状态</p>
<p>@d:\oracle\product\10.2.0\db_1\rdbms\admin\utlu102s.sql</p>
<p><span id="more-305"></span></p>
<p> 运行脚本utlrp.sql编译所有invaild的对象</p>
<p>SQL&gt;@d:\oracle\product\10.2.0\db_1\rdbms\admin/utlrp.sql </p>
<p> </p>
<p>执行完毕后执行查询所有重新编译错误</p>
<p>SQL&gt; select * from utl_recomp_errors;</p>
<p>或者</p>
<p>select object_name from dba_objects where status=&#8217;INVALID&#8217;;</p>
<p> </p>
<p>SQL&gt; SELECT count(*) FROM dba_objects WHERE status=&#8217;INVALID&#8217;;</p>
<p>如果结果显示为“0”，表示升级成功。如果大于0，则重新运行catupgrd.sql脚本，直至没有无效对象。</p>
<p> </p>
<p>执行检查：</p>
<p>SQL&gt; select name from v$database确认ORACLE_SID正确，为oral</p>
<p>SQL&gt; show user确认当前使用者为SYS</p>
<p>SQL&gt; select tablespace_name, bytes from dba_data_files对系统表空间大小进行确认。</p>
<p>SQL&gt; @f:\oracle\product\10.2.0\db_1/rdbms/admin/catalog.sql 创建字典</p>
<p> </p>
<p>检查tempfile</p>
<p>select name from v$tempfile</p>
<p> </p>
<p>SQL&gt;shutdown immediate</p>
<p>SQL&gt;startup</p>
<p>数据库启动成功</p>
<p>重启监听器，升级成功。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codeidea.com/blog/2009/03/12/%e5%8d%87%e7%ba%a7oracle-10g-10200%e5%88%b0%e6%9b%b4%e9%ab%98%e7%89%88%e6%9c%ac%e7%9a%84%e6%ad%a5%e9%aa%a4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

