??xml version="1.0" encoding="utf-8" standalone="yes"?>久久九九有精品国产23百花影院,久久久中文字幕,国内精品综合久久久40phttp://www.shnenglu.com/tbwshc/category/19592.htmltbwzh-cnMon, 23 Jul 2012 04:26:30 GMTMon, 23 Jul 2012 04:26:30 GMT60Oracle容灾Ҏ(gu)的选择 http://www.shnenglu.com/tbwshc/archive/2012/07/22/184604.htmltbwshctbwshcSun, 22 Jul 2012 05:58:00 GMThttp://www.shnenglu.com/tbwshc/archive/2012/07/22/184604.html---- 容灾首先是一个概念,要认识到Z么做容灾Q才能做好容灾。世界上没有卖后(zhn)药的,当灾N临了(jin)Q如果没有行之有效的数据保护、数据恢复的容灾措施Q带来不可预估的损失是无法避免的。类似电(sh)信行业、金融行业,证券行业也是如此Q动辄涉?qing)数以百亿计的资金、涉?qing)庞大的客户量,在系l数据的准确、业务的q箋、关键业务的不中断等斚w更是不容出现M的差错?/span>
 
----目前Q业界具有容灑֊能的常用解决Ҏ(gu)主要包括以下几类Q磁盘阵列复制技术,主要׃些磁盘阵列厂商提供,?/span>EMC SRDF?/span>IBM PPRC ?/span>HP BusinessCopy?/span>HDS TrueCopy{;存储卷复制技术,tb׃些卷理?/span>件厂商提供,?/span>VERITAS VVRQ数据库复制技术,由数据库厂商以及(qing)一些第三方厂商提供Q如DSG RealSyncQ?/span>Quest SharePlex{;应用层复制技术,由各pȝ的应用厂商自己提供?/span>
 
----盘阵列复制技术主要适用于数据中?j)的v量数据复Ӟ此技术用户必需采用支持该功能的盘阵列型号Q而这些阵列大都ؓ(f)高端阵列Q投资非常昂c(din)ƈ且,׃政府行业用户的带宽有限,而磁盘阵列复制技术对带宽的要求又相对很高Q动辄需要上GB的带宽。此外,采用盘阵列复制技术,其目标端无法提供实时数据查询Q由于目标端数据库在复制q程中不能被打开Q难于实C易与查询的分,同时也造成大量投资费。因此,盘阵列复制技术无法满x些行业集中交易系l的容灾需求,使得q些用户难以选择此种解决Ҏ(gu)?/span>
 
----存储卷复制技术主要适用于工作组U的数据复制Q它?/span>CPU资源占用高。同L(fng)于目标端数据无法提供实时数据查询和对带宽的要求高Q得证券等行业用户也难以选择?/span>
 
----而应用层复制技术只适合那些在应用中提供?jin)该技术的应用Q由于它的非标准化、开发和l护工作量大Q得其应用不成熟也不普遍。关键行业对数据的可靠性要求又非常之高Q得关键行业用户也不敢冒然选择此种复制技术?/span>
 
----DSG RealSync属于数据库复制技术,它适用于从工作l、企业到数据中?j)的复刉求,无论pȝ采用什么样的服务器q_、什么样的存储^収ͼ只要?/span>ORACLEpȝ之间的复制即可适用。采?/span>DSG RealSync复制技术,其目标端数据库在复制q程中处于可用状态,帮助关键行业用户实现生pȝ与查询统计报表系l的分离Q其源端pȝ和目标端pȝ可以采用异构的操作系l^台、存储^収ͼ支持选择性复Ӟx持只复制指定?/span>user、指定的Table、指定的行和列,从而节省存储空_(d)提高应用灉|性;支持1对多Q多?/span>1的复制结构,卻I(x)能够多个数据库中的数据复制C个数据库中,能够一个数据库中的不同数据分发C同的数据库中Q也节约带宽和网l资源,其所需带宽一般在?/span>Mbps,几十Mbps?/span>
 
----随着用户容灾意识的逐渐增强Q关键行业也提出?jin)徏设一套高效、可靠、投资回收比高的N备䆾pȝ的需求,以确保系l的数据安全和灾隑֏生时数据的快速恢复?/span>   


tbwshc 2012-07-22 13:58 发表评论
]]>
Oracle临时表在实际开发中的应用详?/title><link>http://www.shnenglu.com/tbwshc/archive/2012/07/08/182184.html</link><dc:creator>tbwshc</dc:creator><author>tbwshc</author><pubDate>Sun, 08 Jul 2012 02:49:00 GMT</pubDate><guid>http://www.shnenglu.com/tbwshc/archive/2012/07/08/182184.html</guid><wfw:comment>http://www.shnenglu.com/tbwshc/comments/182184.html</wfw:comment><comments>http://www.shnenglu.com/tbwshc/archive/2012/07/08/182184.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/tbwshc/comments/commentRss/182184.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/tbwshc/services/trackbacks/182184.html</trackback:ping><description><![CDATA[<p><strong>Oracle临时?/strong>在实际开发中的应用是本文我们主要要介l的内容Q我们知道,SQL Server 在编写查询式?strong>存储q程</strong>的时候,一直都令我Z赞叹。Create procedure ps_procedure_name as select * from table; Select查询语句可以作ؓ(f)SQL Server存储q程的一部分Q直接返回结果集。但在Oracle实现q种形式的存储过E是不合语法的?/p> <p>Z(jin)辑ֈq种目的Q我们需要用Oracle临时表(q是其中一U解x案)(j)?/p> <p>Oracle数据库除?jin)可以保存永久表外,q可以徏立(f)时表temporary tables。Oracle临时表分Z(x)话临时表(ON COMMIT PRESERVE ROWSQ和事务U(f)时表QON COMMIT DELETE ROWSQ?a ><span style="color: #000000">tb</span></a>?x)话U(f)时表是指临时表中的数据只在会(x)话生命周期之中存在,当用户退Z(x)话结束的时候,Oracle自动清除临时表中数据?/p> <p>事务U(f)时表是指临时表中的数据只在事务生命周期中存在。当一个事务结束(commit or rollbackQ,Oracle自动清除临时表中数据。(f)时表中的数据只对当前Session有效Q每个Session都有自己的(f)时数据,q且不能讉K其它Session的(f)时表中的数据?/p> <p><strong>//在数据库建立一个(f)时表Q?/strong></p> <p> </p><pre><ol class="dp-xml"><li id="99vxdbz" class="alt"><span>CREATE GLOBAL TEMPORARY TABLE ESPS.ESPS_EMP_RANK_TEMP  </span></li><li><span>(  </span></li><li id="ph7l9lh" class="alt"><span>COM                VARCHAR2(20 BYTE),  </span></li><li><span>EMPNO             VARCHAR2(20 BYTE),  </span></li><li id="trdb77v" class="alt"><span>EMPNAME          VARCHAR2(100 BYTE),  </span></li><li><span>DEPTNAME         VARCHAR2(300 BYTE),  </span></li><li id="t9fvbdx" class="alt"><span>AMOUNT            NUMBER,  </span></li><li><span>APPROVED_AMOUNT  NUMBER,  </span></li><li id="fd7lp79" class="alt"><span>FOLDING_AMOUNT   NUMBER,  </span></li><li><span>BENEFIT          NUMBER,  </span></li><li id="nj9lrv7" class="alt"><span>EXECUTED_RATE    NUMBER,  </span></li><li><span>FOLDING_RANK     NUMBER,  </span></li><li id="j7htnrt" class="alt"><span>BENEFIT_RANK     NUMBER,  </span></li><li><span>RANK             NUMBER,  </span></li><li id="b7vzlbz" class="alt"><span>TOTAL_RANK       NUMBER  </span></li><li><span>)  </span></li><li id="dj7rdj7" class="alt"><span>//ON COMMIT PRESERVE ROWS         --q里代表的是事务U(f)时表  </span></li><li><span>ON COMMIT PRESERVE ROWS          --q里代表的是?x)话U(f)时表 </span></li></ol></pre> <p> </p> <p>在实际的操作中,我就验证q上面所说的。一开始我使用?jin)事务临时表,数据插入到临时表时Q用commit操作Q结果(f)时表的内Ҏ(gu)IZ(jin)。例如是QINSERT INTO ESPS_EMP_RANK_TEMP select * from tableQcommintQ执行这两段SQL后,相当于没有插入数据?/p> <p>如果我们使用?x)话U(f)时表Q即使用了(jin)commitQ(f)时表中的内容q是存在的。直C(x)话断开Ӟ临时表中的内Ҏ(gu)真正的清I。所以,在实际的开发过E中Q我们因该结合场景,使用不同cd的(f)时表?/p> <p>在徏议提案系l开发的q程中,我用了(jin)?x)话U的临时表。将查询的数据插入到临时表中Qƈ且读取(f)时表的内容,?x)话断开Ӟ临时表中的内容自动清I?nbsp;</p> <p><strong>在C#里面调用的三大步骤:(x)</strong></p> <p>//C#里面定义的一个Stringcd的变量,存储一D动态SQLQ存储过Eؓ(f)Q?/p><pre><ol class="dp-xml"><li id="l7nhtl7" class="alt"><span>ESPS_EMP_RANK_STATISTIS({0},'{1}')  </span></li><li><span>public static string </span><span id="djjd79v" class="attribute">I_EMP_RANK_STATISTIS</span><span> = </span><span id="t977lvx" class="attribute-value">"BEGIN ESPS_EMP_RANK_STATISTIS({0},'{1}'); END;"</span><span>; </span></li></ol></pre> <p> </p> <p>//执行存储q程Q把l果集插入到临时表ESPS_EMP_RANK_TEMP</p> <p> </p><pre><ol class="dp-xml"><li id="p199p9d" class="alt"><span>WAF.COM.Core.OracleHelper. ExecuteNonQuery(conn, CommandType.Text, string.Format(SqlCollector.I_EMP_RANK_STATISTIS, 2,’2011’)); </span></li></ol></pre> <p> </p> <p>//d临时表中保存的结果集</p> <p> </p><pre><ol class="dp-xml"><li id="r7bd79d" class="alt"><span>Oracle DataReader </span><span id="zv9pzjz" class="attribute">dr</span><span> = </span><span id="x9x7t99" class="attribute-value">WAF</span><span>.COM.Core.OracleHelper. ExecuteReader(“select * from ESPS_EMP_RANK_TEMP”) </span></li></ol></pre> <p> </p> <p>关于Oracle临时表在实际开发中的应用的相关知识׃l到q里?jin),希望本次介绍能够?gu)有所收获Q?/p><img src ="http://www.shnenglu.com/tbwshc/aggbug/182184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/tbwshc/" target="_blank">tbwshc</a> 2012-07-08 10:49 <a href="http://www.shnenglu.com/tbwshc/archive/2012/07/08/182184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle临时表和SQL Server临时表的不同点对?/title><link>http://www.shnenglu.com/tbwshc/archive/2012/07/08/182183.html</link><dc:creator>tbwshc</dc:creator><author>tbwshc</author><pubDate>Sun, 08 Jul 2012 02:47:00 GMT</pubDate><guid>http://www.shnenglu.com/tbwshc/archive/2012/07/08/182183.html</guid><wfw:comment>http://www.shnenglu.com/tbwshc/comments/182183.html</wfw:comment><comments>http://www.shnenglu.com/tbwshc/archive/2012/07/08/182183.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/tbwshc/comments/commentRss/182183.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/tbwshc/services/trackbacks/182183.html</trackback:ping><description><![CDATA[<p>Oracle数据库创Z(f)时表的过E以?qing)?strong>SQL Server临时?/strong>的不同点的对比的相关知识是本文我们主要要介绍的内容,接下来就让我们一h?jin)解一下这部分内容吧,希望能够Ҏ(gu)有所帮助?/p> <p><strong>1.?/strong></p> <p>Oracle数据库除?jin)可以保存永久表外,q可以徏立(f)时表temporary tables。这些(f)时表用来保存?sh)个会(x)话SESSION的数据,或者保存在一个事务中需要的数据。当?x)话退出或者用h交commit和回滚rollback事务的时候,临时表的数据自动清空Q但是(f)时表的结构以?qing)元数据q存储在用户的数据字怸?/p> <p><strong>2.详细介绍</strong></p> <p><strong>Oracle临时?/strong>分ؓ(f)?x)话U(f)时表和事务临时表?/p> <p>?x)话U(f)时表是指临时表中的数据只在会(x)话生命周期之中存在,当用户退Z(x)话结束的时候,Oracle自动清除临时表中数据?/p> <p>事务U(f)时表是指临时表中的数据只在事务生命周期中存在。当一个事务结束(commit or rollbackQ,Oracle自动清除临时表中数据?/p> <p>临时表中的数据只对当前Session有效Q每个Session都有自己的(f)时数据,q且不能讉K其它Session的(f)时表中的数据。因此,临时表不需要DML锁?/p> <p>当一个会(x)话结?用户正常退?用户不正帔R?ORACLE实例崩溃)或者一个事务结束的时候,Oracle对这个会(x)话的表执?TRUNCATE 语句清空临时表数?但不?x)清I其它会(x)话(f)时表中的数据.</p> <p>你可以烦(ch)引(f)时表和在临时表基上徏立视?同样,建立在(f)时表上的索引也是临时?也是只对当前?x)话或者事务有? 临时表可以拥有触发器.</p> <p><strong>3.建立临时?/strong></p> <p>临时表的定义Ҏ(gu)有会(x)话SESSION都是可见?但是表中的数据只对当前的?x)话或者事务有?</p> <p>建立Ҏ(gu)Q?/p><pre><ol class="dp-xml"><li id="7fbxrrh" class="alt"><span>1) ON COMMIT DELETE ROWS 定义?jin)徏立事务临时表的?gu).  </span></li><li><span>CREATE GLOBAL TEMPORARY TABLE admin_work_area  </span></li><li id="j7hfbph" class="alt"><span>(startdate DATE,  </span></li><li><span>enddate DATE,  </span></li><li id="fbrbnf7" class="alt"><span>class CHAR(20))  </span></li><li><span>ON COMMIT DELETE ROWS;  </span></li><li id="hdpz7xf" class="alt"><span>EXAMPLE:  </span></li><li><span>SQL</span><span id="7ptn9r9" class="tag">></span><span> CREATE GLOBAL TEMPORARY TABLE admin_work_area  </span></li><li id="f1lzlzp" class="alt"><span>2 (startdate DATE,  </span></li><li><span>3 enddate DATE,  </span></li><li id="7xrdp99" class="alt"><span>4 class CHAR(20))  </span></li><li><span>5 ON COMMIT DELETE ROWS;  </span></li><li id="7p997ln" class="alt"><span>SQL</span><span id="7lzv7jr" class="tag">></span><span> create table permernate( a number);  </span></li><li><span>SQL</span><span id="dpl7jl7" class="tag">></span><span> insert into admin_work_area values(sysdate,sysdate,'temperary table');  </span></li><li id="plfv7vn" class="alt"><span>SQL</span><span id="jlzbf7b" class="tag">></span><span> insert into permernate values(1);  </span></li><li><span>SQL</span><span id="7htvzxf" class="tag">></span><span> commit;  </span></li><li id="f777lnd" class="alt"><span>SQL</span><span id="97rnxp9" class="tag">></span><span> select * from admin_work_area;  </span></li><li><span>SQL</span><span id="979bf9p" class="tag">></span><span> select * from permernate;  </span></li><li id="7xh99jh" class="alt"><span>A  </span></li><li><span>1  </span></li><li id="h7fh799" class="alt"><span>2)ON COMMIT PRESERVE ROWS 定义?jin)创Z(x)话临时表的Ҏ(gu).  </span></li><li><span>CREATE GLOBAL TEMPORARY TABLE admin_work_area  </span></li><li id="nhjx77j" class="alt"><span>(startdate DATE,  </span></li><li><span>enddate DATE,  </span></li><li id="j79799x" class="alt"><span>class CHAR(20))  </span></li><li><span>ON COMMIT PRESERVE ROWS;  </span></li><li id="r7fbnbr" class="alt"><span>EXAMPLE: </span></li></ol></pre> <p> </p> <p>?x)?Q?/p><pre><ol class="dp-xml"><li id="7pbl799" class="alt"><span>SQL</span><span id="phbpz99" class="tag">></span><span> drop table admin_work_area;  </span></li><li><span>SQL</span><span id="xrlfjx7" class="tag">></span><span> CREATE GLOBAL TEMPORARY TABLE admin_work_area  </span></li><li id="97zlnfd" class="alt"><span>2 (startdate DATE,  </span></li><li><span>3 enddate DATE,  </span></li><li id="xr7vffn" class="alt"><span>4 class CHAR(20))  </span></li><li><span>5 ON COMMIT PRESERVE ROWS;  </span></li><li id="7vftv7n" class="alt"><span>SQL</span><span id="7v979lb" class="tag">></span><span> insert into permernate values(2);  </span></li><li><span>SQL</span><span id="7xb9vlb" class="tag">></span><span> insert into admin_work_area values(sysdate,sysdate,'session temperary');  </span></li><li id="97dpb9l" class="alt"><span>SQL</span><span id="9dh7bbj" class="tag">></span><span> commit;  </span></li><li><span>SQL</span><span id="nlxj7tj" class="tag">></span><span> select * from permernate;  </span></li><li id="brv79hx" class="alt"><span>A  </span></li><li><span>----------  </span></li><li id="9n9fzxn" class="alt"><span>1  </span></li><li><span>2  </span></li><li id="xpzvz79" class="alt"><span>SQL</span><span id="zh77t7f" class="tag">></span><span> select * from admin_work_area;  </span></li><li><span>STARTDATE ENDDATE CLASS  </span></li><li id="fn9rdl7" class="alt"><span>---------- ---------- --------------------  </span></li><li><span>17-1?? -03 17-1?? -03 session temperary </span></li></ol></pre> <p> </p> <p>?x)?Q?/p><pre><ol class="dp-xml"><li id="bjf77rh" class="alt"><span>SQL</span><span id="nvh9n7p" class="tag">></span><span> select * from permernate;  </span></li><li><span>A  </span></li><li id="nd9hr7x" class="alt"><span>----------  </span></li><li><span>1  </span></li><li id="97v9xx7" class="alt"><span>2  </span></li><li><span>SQL</span><span id="zpt9h7d" class="tag">></span><span> select * from admin_work_area;  </span></li><li id="fxr777j" class="alt"><span>未选择? </span></li></ol></pre> <p> </p> <p>?x)?看不见会(x)?中(f)时表的数据?/p> <p><strong>4.Oracle临时表和SQL Server临时表异?/strong></p> <p>SQL Server也可以创Z(f)时表。(f)时表与永久表怼Q但临时表存储在tempdb中,当不再用时?x)自动删除?/p> <p>有本地和全局两种cd的(f)时表Q二者在名称、可见性和可用性上均不相同。本C(f)时表的名UC单个数字W号 (#) 打头Q它们仅对当前的用户q接是可见的Q当用户?Microsoft SQL Server实例断开q接时被删除。全局临时表的名称以数学符?(##) 打头Q创建后对Q何用户都是可见的Q当所有引用该表的用户?SQL Server 断开q接时被删除?/p> <p>SQL 语句使用 CREATE TABLE 语句中ؓ(f) table_name 指定的名U引用(f)时表Q?/p><pre><ol class="dp-xml"><li id="77n99zp" class="alt"><span>CREATE TABLE #MyTempTable (cola INT PRIMARY KEY)  </span></li><li><span>INSERT INTO #MyTempTable VALUES (1) </span></li></ol></pre> <p> </p> <p>如果本地临时表由存储q程创徏或由多个用户同时执行的应用程序创建,?SQL Server 必须能够区分׃同用户创建的表。ؓ(f)此,SQL Server 在内部ؓ(f)每个本地临时表的表名q加一个数字后~。存储在 tempdb 数据库的 sysobjects 表中的(f)时表Q其全名?CREATE TABLE 语句中指定的表名和系l生成的数字后缀l成。ؓ(f)?jin)允许追加后~Qؓ(f)本地临时表指定的表名 table_name 不能过116 个字W?/p> <p>除非使用 DROP TABLE 语句昑ּ除去临时表,否则临时表将在退出其作用域时ql自动除去:(x)</p> <p>当存储过E完成时Q将自动除去在存储过E中创徏的本C(f)时表。由创徏表的存储q程执行的所有嵌套存储过E都可以引用此表。但调用创徏此表的存储过E的q程无法引用此表?/p> <p>所有其它本C(f)时表在当前会(x)话结束时自动除去?/p> <p>全局临时表在创徏此表的会(x)话结束且其它d停止对其引用时自动除厅RQ务与表之间的兌只在单个 Transact-SQL 语句的生存周期内保持。换a之,当创建全局临时表的?x)话l束Ӟ最后一条引用此表的Transact-SQL语句完成后,自动除L表?/p> <p>例如Q如果创建名?employees 的表Q则M人只要在数据库中有用该表的安全权限可以用该表,除非它已删除。如果创建名?#employees 的本C(f)时表Q只有?zhn)能对该表执行操作且在断开q接时该表删除。如果创建名?##employees 的全局临时表,数据库中的Q何用户均可对该表执行操作。如果该表在(zhn)创建后没有其他用户使用Q则当?zhn)断开q接时该表删除。如果该表在(zhn)创建后有其他用户用,?SQL Server在所有用h开q接后删除该表?/p> <p>在存储过E或触发器中创徏的本C(f)时表与在调用存储q程或触发器之前创徏的同名(f)时表不同。如果查询引用(f)时表Q而同时有两个同名的(f)时表Q则不定义针对哪个表解析该查询?a ><span style="color: #000000">tb</span></a>嵌套存储q程同样可以创徏与调用它的存储过E所创徏的(f)时表同名的(f)时表。嵌套存储过E中对表名的所有引用都被解释ؓ(f)是针对该嵌套q程所创徏的表Q例如:(x)</p> <p> </p><pre><ol class="dp-xml"><li id="ndhdzzn" class="alt"><span>CREATE PROCEDURE Test2  </span></li><li><span>AS  </span></li><li id="7tddp79" class="alt"><span>CREATE TABLE #t(x INT PRIMARY KEY)  </span></li><li><span>INSERT INTO #t VALUES (2)  </span></li><li id="rz77dt7" class="alt"><span>SELECT </span><span id="h99d99l" class="attribute">Test2Col</span><span> = </span><span id="dl9rph7" class="attribute-value">x</span><span> FROM #t  </span></li><li><span>GO  </span></li><li id="ll7z779" class="alt"><span>CREATE PROCEDURE Test1  </span></li><li><span>AS  </span></li><li id="f79xdn9" class="alt"><span>CREATE TABLE #t(x INT PRIMARY KEY)  </span></li><li><span>INSERT INTO #t VALUES (1)  </span></li><li id="n79fl9d" class="alt"><span>SELECT </span><span id="n799nvp" class="attribute">Test1Col</span><span> = </span><span id="97r9tb9" class="attribute-value">x</span><span> FROM #t  </span></li><li><span>EXEC Test2  </span></li><li id="jptfrhb" class="alt"><span>GO  </span></li><li><span>CREATE TABLE #t(x INT PRIMARY KEY)  </span></li><li id="9tdrdt7" class="alt"><span>INSERT INTO #t VALUES (99)  </span></li><li><span>GO  </span></li><li id="v779d79" class="alt"><span>EXEC Test1  </span></li><li><span>GO  </span></li></ol></pre> <p> </p> <p>下面是结果集Q?/p><pre><ol class="dp-xml"><li id="lrd7tr1" class="alt"><span>(1 row(s) affected)  </span></li><li><span>Test1Col   </span></li><li id="9xbf9ll" class="alt"><span>-----------   </span></li><li><span>1   </span></li><li id="pvhl7vn" class="alt"><span>(1 row(s) affected)  </span></li><li><span>Test2Col   </span></li><li id="xnh7xxz" class="alt"><span>-----------   </span></li><li><span>2 </span></li></ol></pre> <p> </p> <p>当创建本地或全局临时表时QCREATE TABLE 语法支持?FOREIGN KEY U束以外的其它所有约束定义。如果在临时表中指定 FOREIGN KEY U束Q该语句返回警告信息,指出此约束已被忽略,表仍?x)创建,但不h FOREIGN KEY U束。在 FOREIGN KEY U束中不能引用(f)时表?/p> <p>考虑使用表变量而不使用临时表。当需要在临时表上昑ּ地创建烦(ch)引时Q或多个存储q程或函数需要用表值时Q(f)时表很有用。通常Q表变量提供更有效的查询处理?/p> <p><strong>和Oracle的不同点Q?/strong></p> <p>1. SQL Server临时表是一U?#8221;内存?#8221;,<a ><span style="color: #000000">tb</span></a>表是存储在内存(sh)?ORACLE临时表除非执行DROP TABLE,否则表定义会(x)保留在数据字怸?/p> <p>2. SQL Server临时表不存在cMORACLE临时表事务别上的功能?/p> <p>3.SQL Server本地临时?#) ?ORACLE的会(x)话别(f)时表cM,但是在会(x)话退出的时?ORACLE不会(x)删除表?/p> <p>4.SQL Server的全局临时?##) 是指多个q接׃n同一片内?当没有指针引用该内存区域?SQL Server自动释放全局临时表?/p> <p>5.׃Oracle不是一U内存(sh)的数据库. 所以如果OraclecMSQL Server 频繁的对临时表进行徏立和删除,必定?x)?jing)响性能.所以Oracle?x)保留?f)时表的定义直到用户DROP TABLE?/p> <p>6.在Oracle?如果需要多个用户共享一个表(cMSQL Server的全局临时?#).则可以利用永久表,q且在表中添加一些可以唯一标识用户的列.利用触发器和视图.当用户退出的时?Ҏ(gu)该登陆用L(fng)唯一信息删除相应的表中的数据. q种Ҏ(gu)lOracle带来?jin)一定量的负载?/p> <p> </p> <p>关于Oracle临时表和SQL Server临时表的不同点对比的相关知识׃l到q里?jin),希望本次的介l能够对(zhn)有所收获Q?/p><img src ="http://www.shnenglu.com/tbwshc/aggbug/182183.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/tbwshc/" target="_blank">tbwshc</a> 2012-07-08 10:47 <a href="http://www.shnenglu.com/tbwshc/archive/2012/07/08/182183.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>详解Oracle临时表的几种用法?qing)意?/title><link>http://www.shnenglu.com/tbwshc/archive/2012/07/07/182066.html</link><dc:creator>tbwshc</dc:creator><author>tbwshc</author><pubDate>Sat, 07 Jul 2012 05:26:00 GMT</pubDate><guid>http://www.shnenglu.com/tbwshc/archive/2012/07/07/182066.html</guid><wfw:comment>http://www.shnenglu.com/tbwshc/comments/182066.html</wfw:comment><comments>http://www.shnenglu.com/tbwshc/archive/2012/07/07/182066.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/tbwshc/comments/commentRss/182066.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/tbwshc/services/trackbacks/182066.html</trackback:ping><description><![CDATA[<p>Oracle临时表可以说是提高数据库处理性能的好Ҏ(gu)Q在没有必要存储Ӟ只存储在Oracle临时表空间中。希望本文能对大家有所帮助?/p> <p>1 、前a</p> <p> </p> <p>Oracle Logo</p> <p>目前所有?Oracle 作ؓ(f)数据库支撑^台的应用Q大部分数据量比较庞大的pȝQ即表的数据量一般情况下都是在百万以上的数据量?/p> <p>当然?Oracle 中创建分区是一U不错的选择Q但是当你发C的应用有多张表关联的时候,q且q些表大部分都是比较庞大Q而你兌的时候发现其中的某一张或者某几张表关联之后得到的l果集非常小q且查询得到q个l果集的速度非常快,那么q个时候我考虑?Oracle 中创?#8220;临时?#8221;?/p> <p>我对临时表的理解Q在 Oracle 中创Z张表Q这个表不用于其他的什么功能,主要用于自己的Y件系l一些特有功能才用的Q而当你用完之后表中的数据没用了(jin)?Oracle 的(f)时表创徏之后基本不占用表I间Q如果你没有指定临时?包括临时表的索引)存放的表I的时候,你插入到临时表的数据是存攑֜ ORACLE pȝ的(f)时表I间? TEMP )?/p> <p>2 、(f)时表的创?/p> <p>创徏Oracle 临时表,可以有两U类型的临时表:(x)</p> <p>?x)话U的临时?/p> <p>事务U的临时??/p> <p>1) ?x)话U的临时表因q个临时表中的数据和你的当前?x)话有关p,当你当前SESSION 不退出的情况下,临时表中的数据就q存在,而当你退出当前SESSION 的时候,临时表中的数据就全部没有?jin),当然q个时候你如果以另外一个SESSION 登陆的时候是看不到另外一个SESSION 中插入到临时表中的数据的。即两个不同的SESSION 所插入的数据是互不相干的。当某一个SESSION 退Z后(f)时表中的数据p截断(truncate table Q即数据清空)?jin)。会(x)话的(f)时表创徏Ҏ(gu)Q?/p> <p><br />Create Global Temporary Table Table_Name  (Col1 Type1,Col2 Type2...) On Commit Preserve Rows ; <br />举例Q?/p> <p><br />create global temporary table Student  (Stu_id Number(5),  Class_id Number(5),  Stu_Name Varchar2(8),  Stu_Memo varchar2(200)) on Commit Preserve Rows ; <br />2) 事务U(f)时表是指该(f)时表与事务相养I当进行事务提交或者事务回滚的时候,临时表中的数据将自行被截断,其他的内容和?x)话U的临时表的一?包括退出SESSION 的时候,事务U的临时表也?x)被自动截?。事务临时表的创徏Ҏ(gu)Q?/p> <p><br />Create Global Temporary Table Table_Name  (Col1 Type1,Col2 Type2...) On Commit Delete Rows ; <br />举例Q?/p> <p>create global temporary table Classes  (Class_id Number(5),  Class_Name Varchar2(8),  Class_Memo varchar2(200)) on Commit delete Rows ; 3) 两中cd临时表的区别</p> <p>?x)话U(f)时表采用 on commit preserve rows ;而事务则采?on commit delete rows ;用法上,?x)话U别只有当会(x)话结束(f)时表中的数据才会(x)被截断,而且事务U(f)时表则不是 commit ?rollback 或者是?x)话l束Q?a ><span style="color: #000000">tb</span></a>临时表中的数据都被截断</p> <p>4 )什么时候用(f)时表</p> <p>1 )、当某一?SQL 语句兌的表?2 张及(qing)以上Qƈ且和一些小表关联。可以采用将大表q行分拆q且得到比较?yu)的l果集合存放在(f)时表?/p> <p>2 )、程序执行过E中可能需要存放一些(f)时的数据Q这些数据在整个E序的会(x)话过E中都需要用的等{?/p> <p>3 . 例子Q略</p> <p>4 .临时表的不之处</p> <p>1 )不支?lob 对象Q这也许是设计者基于运行效率的考虑Q但实际应用中确实需要此功能时就无法使用临时表了(jin)?/p> <p>2 )不支持主外键关系</p> <p>所以,׃以上原因Q我们可以自己创Z(f)时表Q以弥补 oracle 临时表的不之处</p> <p>上面的都是本人经q测试的Q但下面是在|上搜烦(ch)到的Ҏ(gu)Q本人具体没有测试过Q不q觉得可行性很强,有时间测试下</p> <p>创徏Ҏ(gu)Q?/p> <p>1 、以常规表的形式创徏临时数据表的表结构,但要在每一个表的主键中加入一?SessionID 列以区分不同的会(x)话?可以?lob 列和d?</p> <p>2 、写一个用h销触发器,在用L(fng)束会(x)话的时候删除本ơ会(x)话所插入的所有记?(SessionID {于本次?x)?ID 的记?) ?/p> <p>3 、程序写入数据时Q要Z当前的?x)?ID(SessionID) 写入表中?/p> <p>4 、程序读取数据时Q只d与当前会(x)?ID 相同的记录即可?/p> <p>功能增强的扩展设计:(x)</p> <p>1 、可以在数据表上建立一个视图,视图对记录的{选条件就是当前会(x)话的SessionID ?/p> <p>2 、数据表中的SessionID 列可以通过Trigger 实现Q以实现对应用层的透明性?/p> <p>3 、高U用户可以访问全局数据Q以实现更加复杂的功能?/p> <p>扩展临时表的优点Q?/p> <p>1 、实C(jin)与Oracle 的基于会(x)话的临时表相同的功能?/p> <p>2 、支持SDO_GEOMETRY {lob 数据cd?/p> <p>3 、支持表间的d键连接,且主外键q接也是Z?x)话的?/p> <p>4 、高U用户可以访问全局数据Q以实现更加复杂的功?/p> <p> </p><img src ="http://www.shnenglu.com/tbwshc/aggbug/182066.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/tbwshc/" target="_blank">tbwshc</a> 2012-07-07 13:26 <a href="http://www.shnenglu.com/tbwshc/archive/2012/07/07/182066.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE联机日志文g丢失或损坏的处理Ҏ(gu)http://www.shnenglu.com/tbwshc/archive/2012/07/07/182065.htmltbwshctbwshcSat, 07 Jul 2012 05:24:00 GMThttp://www.shnenglu.com/tbwshc/archive/2012/07/07/182065.htmlhttp://www.shnenglu.com/tbwshc/comments/182065.htmlhttp://www.shnenglu.com/tbwshc/archive/2012/07/07/182065.html#Feedback0http://www.shnenglu.com/tbwshc/comments/commentRss/182065.htmlhttp://www.shnenglu.com/tbwshc/services/trackbacks/182065.html联机日志分ؓ(f)当前联机日志和非当前联机日志Q非当前联机日志的损坏是比较单的Q一般通过clear命o(h)可以解决问题?/p>

损坏非当前联机日志:(x)
1、启动数据库Q遇到ORA-00312 or ORA-00313错误Q如:
ORA-00313: open failed for members of log group 4 of tbhread 1
ORA-00312: online log 3 thread 1: '/opt/oracle/db04/oradata/ORCL/redo03.log'
从这里我们知道日志组1的数据文件损坏或丢失?br />从报警文件可以看到更详细的信?br />2、查看V$log视图:
SQL> select group#,sequence#,archived,status from v$log;

GROUP# SEQUENCE# ARC STATUS

---------- ---------- --- ----------------

1 54 YES INACTIVE

2 55 NO CURRENT

3 53 YES INACTIVE

可以知道Q该l是非当前状态,而且已经归档?br />3、用CLEAR命o(h)重徏该日志文?br />SQL>alter database clear logfile group 3;
如果是该日志l还没有归档Q则需要用
SQL>alter database clear unarchived logfile group 3;
4、打开数据库,重新备䆾数据?br />SQL>alter database open;
说明Q?br />1)、如果损坏的是非当前的联机日志文Ӟ一般只需要clear可以重日志文gQ但是如果该数据库处于归档状态但该日志还没有归档Q就需要强行clear?br />2)、徏议clearQ特别是clear后作一ơ数据库的全备䆾?br />3)、此Ҏ(gu)适用于归档与非归档数据库?/p>

损坏当前联机日志Q?/p>

归档模式下当前日志的损坏有两U情况,
一、是数据库是正常关闭Q日志文件中没有未决的事务需要实例恢复,当前日志l的损坏可以直接用alter database clear unarchived logfile group n来重建?br />二、是日志l中有活动的事务Q数据库需要媒体恢复,日志l需要用来同步,有两U补救办?br />A. 最好的办法是通过不完全恢复,可以保证数据库的一致性,但是q种办法要求在归档方式下Qƈ且有可用的备?br />B. 通过强制性恢复,但是可能D数据库不一致?br />下面分别用来说明q两U恢复方?br />5.1.2.1 通过备䆾来恢?br />1、打开数据库,?x)遇C个类似的错误
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'D:ORACLEORADATATESTREDO01.LOG'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) pȝ找不到指定的文g

2、查看V$logQ发现是当前日志
SQL> select group#,sequence#,archived,status from v$log;

GROUP# SEQUENCE# ARCHIVED STATUS
---------- ---------- -------- ----------------
1 1 NO CURRENT
2 2 YES INACTIVE
3 3 YES INACTIVE

3、发现clear不成?br />SQL> alter database clear unarchived logfile group 1;
alter database clear unarchived logfile group 1
*
ERROR at line 1:
ORA-01624: log 1 needed for crash recovery of thread 1
ORA-00312: online log 1 thread 1: 'D:ORACLEORADATATESTREDO01.LOG'

4、拷贝有效的数据库的全备份,q不完全恢复数据?br />可以采用获取最q的SCN的办法用until scn恢复或用until cnacel恢复
recover database until cancel
先选择autoQ尽量恢复可以利用的归档日志Q然后重?br />recover database until cancel
q次输入cancelQ完成不完全恢复Q也是说恢复两ơ?br />如:(x)
SQL> recover database until cancel;
Auto
……
SQL> recover database until cancel;
Cancel;
5、利用alter database open resetlogs打开数据?br />说明Q?br />1、这U办法恢复的数据库是一致的不完全恢复,?x)丢失当前联机日志中的事务数?br />2、这U方法适合于归档数据库q且有可用的数据库全备䆾?br />3、恢复成功之后,记得再做一ơ数据库的全备䆾?br />4、徏议联机日志文件一定要实现镜相在不同的盘?sh),避免q种情况的发生,因ؓ(f)M数据的丢失对于生产来说都是不容许的?/p>

如果没有备䆾Q进行强制性恢?br />1、打开数据库,?x)遇C个类似的错误
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'D:ORACLEORADATATESTREDO01.LOG'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) pȝ找不到指定的文g

2、查看V$logQ发现是当前日志
SQL> select group#,sequence#,archived,status from v$log;

GROUP# SEQUENCE# ARCHIVED STATUS
---------- ---------- -------- ----------------
1 1 NO CURRENT
2 2 YES INACTIVE
3 3 YES INACTIVE

3、发现clear不成?br />SQL> alter database clear unarchived logfile group 1;
alter database clear unarchived logfile group 1
*
ERROR at line 1:
ORA-01624: log 1 needed for crash recovery of thread 1
ORA-00312: online log 1 thread 1: 'D:ORACLEORADATATESTREDO01.LOG'

4、把数据库down?br />SQL>shutdown immediate

5、在init<sid>.ora中加入如下参?br />_allow_resetlogs_corruption=TRUE

6、重新启动数据库,利用until cancel恢复
SQL>recover database until cancel;
Cancel
如果出错Q不再理?x),发?
SQL>alter database open resetlogs;

7、数据库被打开后,马上执行一个full export

8、shutdown数据?L_all_resetlogs_corrupt参数

9、重建库

10、importq完成恢?/p>

11、徏议执行一下ANALYZE TABLE ...VALIDATE STRUCTURE CASCADE;
说明Q?br />1、该恢复Ҏ(gu)是没有办法之后的恢复Ҏ(gu)Q一般情况下不要采用Q因Ҏ(gu)可能D数据库的不一?br />2、该Ҏ(gu)也丢失数据,但是丢失的数据没有上一U方法的数据多,主要是未写入数据文g的已提交或未提交数据?br />3、徏议成功后严格执行以上??1步,完成数据库的(g)查与分析
4、全部完成后做一ơ数据库的全备䆾
5、徏议联机日志文件一定要实现镜相在不同的盘?sh),避免q种情况的发生,因ؓ(f)M数据的丢失对于生产来说都是不容许的?/p>

tbwshc 2012-07-07 13:24 发表评论
]]>
69Ʒþþþ9999APGF| ˾þô߽Ʒ| þùƷվ| þù޾Ʒ鶹| þ99Ʒþþþ| ޾þþþþ77777| պþëƬ| Ʒþþþþ| þ˾Ʒԭ| Ļ˾Ʒþò | ޾ƷþþþĻ| þþƷѹƬС| þþƷһպAV| 99þùѸ| þþƷŷƬ| Ʒ99þþþþլС˵| þþƷа| þþƷ| 94þù׾Ʒ| ȫɫƴɫƬѾþþ| ɫվþav| 97þóƷ2021| Ʒ˾Ʒþþ| Ļ˾þ| Ļþþþ| þ߿ۿƷ㽶| ŷСþþþþþ | þùƵ99Ӱ| һɫþۺ| þֻоƷҳ| þþþ| ȫþվ| þþۺϾɫۺ̾| þ޾ƷAV| žžþþƷר| þ޾ƷĻ| ɫ99þþþø߳ۺӰԺ| ޾ƷŮþþ| þҹɫƷwww| Ʒþþþþù91| ƷþþþþþþþӰԺ|