??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产成人精品无码区二本,日韩色视频一区二区三区亚洲,亚洲男人av香蕉爽爽爽爽http://m.tkk7.com/larry/articles/140495.htmllarryjavalarryjavaTue, 28 Aug 2007 06:34:00 GMThttp://m.tkk7.com/larry/articles/140495.htmlhttp://m.tkk7.com/larry/comments/140495.htmlhttp://m.tkk7.com/larry/articles/140495.html#Feedback0http://m.tkk7.com/larry/comments/commentRss/140495.htmlhttp://m.tkk7.com/larry/services/trackbacks/140495.html阅读全文

larryjava 2007-08-28 14:34 发表评论
]]>
两个sql server数据库同步数?转脓) http://m.tkk7.com/larry/articles/132700.htmllarryjavalarryjavaFri, 27 Jul 2007 02:01:00 GMThttp://m.tkk7.com/larry/articles/132700.htmlhttp://m.tkk7.com/larry/comments/132700.htmlhttp://m.tkk7.com/larry/articles/132700.html#Feedback0http://m.tkk7.com/larry/comments/commentRss/132700.htmlhttp://m.tkk7.com/larry/services/trackbacks/132700.html  不是使用写sql 的方式来实现Q而是采用Q?span>强制订阅实现数据库同步操作,大量和批量的数据可以用数据库的同步机制处理?br>  
说明Q?br>  为方便操?所有操作均在发布服务器(分发服务?上操?q用推模式Q在客户机器使用强制订阅方式?br>
试通过Q?br>Q=1:环境
服务器环?
机器名称Q?serverDB
操作pȝQWindows 2000 Server
数据库版本:SQL 2000 Server 企业?

 

客户?br>机器名称QJoy
操作pȝQWindows 2000 Server
数据库版本:SQL 2000 Server 企业?br>
Q=2:建用户帐?br>在服务器端徏立域用户帐号
我的电脑理->本地用户和组->用户->建立
UserNameQJoy
UserPwdQJoy

==3:重新启动服务器MSSQLServer
我的电脑->控制面版->理工具->服务->MSSQLServer 服务
(更改为:域用户帐?我们新徏的joy用户 .\joy,密码:joy)

Q=4:安装分发服务?br>A:配置分发服务?br>工具->复制->配置发布、订阅服务器和分?>下一?>下一?所有的均采用默认配|?
B:配置发布服务?br>工具->复制->创徏和管理发?>选择要发布的数据?pubs)->下一?>快照发布->下一?>
选择要发布的内容->下一?>下一?>下一?>完成
C:强制配置订阅服务?推模?拉模式与此雷?
工具->复制->配置发布、订阅服务器和分?>订阅服务?>新徏->SQL Server数据?>输入客户端服务器名称(joy)->使用SQL Server w䆾验证(sa,sa)->定->应用->定
D:初始化订?br>复制监视?>发布服务?serverDB)->双击订阅->强制新徏->下一?>选择启用的订阅服务器->joy->
下一?>下一?>下一?>下一?>完成

Q=6:试数据
--在服务器执行:
选择表storesQ手动或者通过sql语句修改其中的数据,insert ,update ,delete均可?br>
复制监视?>发布服务?serverDB)->->快照->启动代理E序
                                      ->ZLP:SZ(强制)->启动同步处理

L看同步的 joy:stores 是否插入了一条新的记?/p>

试完毕Q通过?/p>

Q=7修改数据库的同步旉,一般选择夜晚执行数据库同步处?br>(具体操作? :D


〔注意说明?/strong>
服务器一端不能以(local)q行数据的发布与分发,需要先删除注册Q然后新建注册本地计机名称

卸蝲方式Q工?>复制->止发布->是在"ZehuaDb"上静止发?卸蝲所有的数据库同步配|服务器

注意Q发布服务器、分发服务器中的SQLServerAgent服务必须启动
      采用推模? "D:\Microsoft SQL Server\MSSQL\REPLDATA\unc" 目录文g可以不设|共?br>      拉模?则需要共享~!

量数据库同步可以采用触发器实现,同步单表卛_?br>
Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q?br>配置q程中可能出现的问题

在SQL Server 2000里设|和使用数据库复制之前,应先查相关的几台SQL Server服务器下面几Ҏ否满I
   
    1、MSSQLserver和Sqlserveragent服务是否是以域用戯n份启动ƈq行的(.\administrator用户也是可以的)
   
        如果d用的是本地系l帐户localQ将不具备网l功能,会生以下错?
       
        q程未能q接到Distributor '@Server name'
       
      (如果您的服务器已l用了SQL Server全文索服? 请不要修改MSSQLserver和Sqlserveragent服务的local启动?br>       会照成全文检索服务不能用。请换另外一台机器来做SQL Server 2000里复制中的分发服务器?   
       
      修改服务启动的登录用P需要重新启动MSSQLserver和Sqlserveragent服务才能生效?nbsp;  
       
    2、检查相关的几台SQL Server服务器是否改q名U?需要srvid=0的本地机器上srvname和datasource一?
   
       在查询分析器里执?
         use master
         select srvid,srvname,datasource from sysservers   
        
       如果没有srvid=0或者srvid=0Q也是本机器)但srvname和datasource不一? 需要按如下Ҏ修改:

  USE master
        GO
        -- 讄两个变量
        DECLARE @serverproperty_servername  varchar(100),
                @servername    varchar(100)
        -- 取得Windows NT 服务器和与指定的 SQL Server 实例兌的实例信?br>        SELECT @serverproperty_servername = CONVERT(varchar(100), SERVERPROPERTY('ServerName'))
        -- q回q行 Microsoft SQL Server 的本地服务器名称
        SELECT @servername = CONVERT(varchar(100), @@SERVERNAME)
        -- 昄获取的这两个参数
        select @serverproperty_servername,@servername
        --如果@serverproperty_servername和@servername不同(因ؓ你改q计机名字),再运行下面的
        --删除错误的服务器?br>        EXEC sp_dropserver @server=@servername
        --d正确的服务器?br>        EXEC sp_addserver @server=@serverproperty_servername, @local='local'

修改q项参数Q需要重新启动MSSQLserver和Sqlserveragent服务才能生效?nbsp;  
      
       q样一来就不会在创建复制的q程中出?8482?8483错误了?br>
3、检查SQL Server企业理器里面相关的几台SQL Server注册名是否和上面W二炚w介绍的srvname一?br>   
        不能用IP地址的注册名?br>       
      Q我们可以删掉IP地址的注册,新徏以SQL Server理员别的用户注册的服务器名)
       
       q样一来就不会在创建复制的q程中出?4010?0084?8456?8482?8483错误了?nbsp;  
       
    4、检查相关的几台SQL Server服务器网l是否能够正常访?br>   
        如果pingLIP地址可以Q但pingL名不通的时候,需要在   
       
            winnt\system32\drivers\etc\hosts   (WIN2000)
            windows\system32\drivers\etc\hosts (WIN2003)
           
               文g里写入数据库服务器IP地址和主机名的对应关pR?br>               
 例如Q?nbsp;   
               

           127.0.0.1       localhost
           192.168.0.35    oracledb    oracledb
           192.168.0.65    fengyu02    fengyu02
           202.84.10.193   bj_db       bj_db   

 或者在SQL Server客户端网l实用工具里建立别名Q例?


     5、系l需要的扩展存储q程是否存在(如果不存在,需要恢?:

         sp_addextendedproc 'xp_regenumvalues',@dllname ='xpstar.dll'
         go
         sp_addextendedproc 'xp_regdeletevalue',@dllname ='xpstar.dll'
         go
         sp_addextendedproc 'xp_regdeletekey',@dllname ='xpstar.dll'
         go             
         sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll' 

     接下来就可以用SQL Server企业理器里[复制]-> 右键选择
        ->[配置发布、订阅服务器和分发]的图形界面来配置数据库复制了



larryjava 2007-07-27 10:01 发表评论
]]>
sql Server性能优化(转脓) http://m.tkk7.com/larry/articles/132699.htmllarryjavalarryjavaFri, 27 Jul 2007 02:00:00 GMThttp://m.tkk7.com/larry/articles/132699.htmlhttp://m.tkk7.com/larry/comments/132699.htmlhttp://m.tkk7.com/larry/articles/132699.html#Feedback0http://m.tkk7.com/larry/comments/commentRss/132699.htmlhttp://m.tkk7.com/larry/services/trackbacks/132699.html1?用程序中Q保证在实现功能的基上,量减少Ҏ据库的访问次敎ͼ通过搜烦参数Q尽量减对表的讉K行数,最化l果集,从而减ȝl负担;能够分开的操作尽量分开处理Q提高每ơ的响应速度Q在数据H口使用SQLӞ量把用的索引攑֜选择的首列;法的结构尽量简单;在查询时Q不要过多地使用通配W如SELECT * FROM T1语句Q要用到几列选择几列如:SELECT COL1,COL2 FROM T1Q在可能的情况下量限制量l果集行数如QSELECT TOP 300 COL1,COL2,COL3 FROM T1,因ؓ某些情况下用h不需要那么多的数据的。不要在应用中用数据库游标Q游标是非常有用的工P但比使用常规的、面向集的SQL语句需要更大的开销Q按照特定顺序提取数据的查找?/p>

2?nbsp;  避免使用不兼容的数据cd。例如float和int、char和varchar、binary和varbinary是不兼容的。数据类型的不兼容可能优化器无法执行一些本来可以进行的优化操作。例?
SELECT name FROM employee WHERE salary Q?60000
在这条语句中,如salary字段是money型的,则优化器很难对其q行优化,因ؓ60000是个整型数。我们应当在~程时将整型转化成ؓ钱币?而不要等到运行时转化?

3?nbsp;  量避免在WHERE子句中对字段q行函数或表辑ּ操作Q这导致引擎放弃用烦引而进行全表扫描。如Q?
SELECT * FROM T1 WHERE F1/2=100
应改?
SELECT * FROM T1 WHERE F1=100*2

SELECT * FROM RECORD WHERE SUBSTRING(CARD_NO,1,4)=’5378’
应改?
SELECT * FROM RECORD WHERE CARD_NO LIKE ‘5378%’

SELECT member_number, first_name, last_name  FROM members
WHERE DATEDIFF(yy,datofbirth,GETDATE()) > 21
应改?
SELECT member_number, first_name, last_name  FROM members
WHERE dateofbirth < DATEADD(yy,-21,GETDATE())
卻IM对列的操作都导致表扫描Q它包括数据库函数、计表辑ּ{等Q查询时要尽可能操作移至等号右辏V?/p>

4?nbsp;  避免使用!=或<Q、IS NULL或IS NOT NULL、IN QNOT IN{这L操作W?因ؓq会使系l无法用烦?而只能直接搜索表中的数据。例?
SELECT id FROM employee WHERE id != 'B%'
优化器将无法通过索引来确定将要命中的行数,因此需要搜索该表的所有行?br> 
5?nbsp;  量使用数字型字D,一部分开发h员和数据库管理h员喜Ƣ把包含数g息的字段
设计为字W型Q这会降低查询和q接的性能Qƈ会增加存储开销。这是因为引擎在处理查询和连接回逐个比较字符串中每一个字W,而对于数字型而言只需要比较一ơ就够了?/p>

6?nbsp;  合理使用EXISTS,NOT EXISTS子句。如下所C:
1.SELECT SUM(T1.C1)FROM T1 WHERE(
(SELECT COUNT(*)FROM T2 WHERE T2.C2=T1.C2>0)
2.SELECT SUM(T1.C1) FROM T1WHERE EXISTS(
  SELECT * FROM T2 WHERE T2.C2=T1.C2)
两者生相同的l果Q但是后者的效率昄要高于前者。因为后者不会生大量锁定的表扫描或是烦引扫描?br>如果你想校验表里是否存在某条U录Q不要用count(*)那样效率很低Q而且费服务器资源。可以用EXISTS代替。如Q?br>IF (SELECT COUNT(*) FROM table_name WHERE column_name = 'xxx')
可以写成Q?br>IF EXISTS (SELECT * FROM table_name WHERE column_name = 'xxx')

l常需要写一个T_SQL语句比较一个父l果集和子结果集Q从而找到是否存在在父结果集中有而在子结果集中没有的记录Q如Q?br>1.SELECT a.hdr_key  FROM hdr_tbl a---- tbl a 表示tbl用别名a代替
WHERE NOT EXISTS (SELECT * FROM dtl_tbl b WHERE a.hdr_key = b.hdr_key)

2.SELECT a.hdr_key  FROM hdr_tbl a
LEFT JOIN dtl_tbl b ON a.hdr_key = b.hdr_key  WHERE b.hdr_key IS NULL

3.SELECT hdr_key  FROM hdr_tbl
WHERE hdr_key NOT IN (SELECT hdr_key FROM dtl_tbl)
      三种写法都可以得到同h的l果Q但是效率依ơ降低?/p>

7?nbsp;  量避免在烦引过的字W数据中Q用非打头字母搜烦。这也得引擎无法利用烦引?nbsp;
见如下例子:
SELECT * FROM T1 WHERE NAME LIKE ‘%L%’
SELECT * FROM T1 WHERE SUBSTING(NAME,2,1)=’L’
SELECT * FROM T1 WHERE NAME LIKE ‘L%’
即NAME字段建有索引Q前两个查询依然无法利用索引完成加快操作Q引擎不得不对全表所有数据逐条操作来完成Q务。而第三个查询能够使用索引来加快操作?/p>

8?nbsp;  分利用连接条Ӟ在某U情况下Q两个表之间可能不只一个的q接条gQ这时在  WHERE 子句中将q接条g完整的写上,有可能大大提高查询速度?br>例:
SELECT SUM(A.AMOUNT) FROM ACCOUNT A,CARD B WHERE A.CARD_NO = B.CARD_NO
SELECT SUM(A.AMOUNT) FROM ACCOUNT A,CARD B WHERE A.CARD_NO = B.CARD_NO  AND A.ACCOUNT_NO=B.ACCOUNT_NO
W二句将比第一句执行快得多?/p>

9?nbsp;   消除对大型表行数据的序存取
      管在所有的查列上都有烦引,但某些Ş式的WHERE子句优化器用顺序存取。如Q?br>SELECT * FROM orders WHERE (customer_num=104  AND order_num>1001) OR
order_num=1008
解决办法可以使用q来避免顺序存取:
SELECT Q?FROM orders WHERE customer_num=104 AND order_num>1001
UNION
SELECT Q?FROM orders WHERE order_num=1008
q样p利用索引路径处理查询?/p>

10?避免困难的正规表辑ּ
      LIKE关键字支持通配W匹配,技术上叫正规表辑ּ。但q种匚w特别耗费旉。例如:SELECT * FROM customer WHERE zipcode LIKE “98_ _ _”
即在zipcode字段上徏立了索引Q在q种情况下也q是采用序扫描的方式。如
果把语句改ؓSELECT Q?FROM customer WHERE zipcode >“98000”Q在执行查询
时就会利用烦引来查询Q显然会大大提高速度?br>11?使用视图加速查?br>把表的一个子集进行排序ƈ创徏视图Q有时能加速查询。它有助于避免多重排?br>操作Q而且在其他方面还能简化优化器的工作。例如:
SELECT cust.nameQrcvbles.balanceQ?#8230;…other columns
FROM custQrcvbles
WHERE cust.customer_id = rcvlbes.customer_id
AND rcvblls.balance>0
AND cust.postcode>“98000”
ORDER BY cust.name
如果q个查询要被执行多次而不止一ơ,可以把所有未付款的客h出来攑֜一?br>视图中,q按客户的名字进行排序:
CREATE VIEW DBO.V_CUST_RCVLBES
AS
SELECT cust.nameQrcvbles.balanceQ?#8230;…other columns
FROM custQrcvbles
WHERE cust.customer_id = rcvlbes.customer_id
AND rcvblls.balance>0
ORDER BY cust.name

然后以下面的方式在视图中查询Q?
SELECT Q?FROM  V_CUST_RCVLBES
WHERE postcode>“98000”
视图中的行要比主表中的行,而且物理序是所要求的顺序,减少了磁?br>I/OQ所以查询工作量可以得到大幅减少?/p>

12?能够用BETWEEN的就不要用IN
SELECT * FROM T1 WHERE ID IN (10,11,12,13,14)
ҎQ?br>SELECT * FROM T1 WHERE ID BETWEEN 10 AND 14
因ؓIN会ɾpȝ无法使用索引,而只能直接搜索表中的数据?/p>

13?DISTINCT的就不用GROUP BY
      SELECT OrderID  FROM Details WHERE UnitPrice > 10 GROUP BY OrderID
      可改为:
      SELECT DISTINCT OrderID FROM Details WHERE UnitPrice > 10
     

14?nbsp;  部分利用索引
      1.SELECT employeeID, firstname, lastname
FROM names
WHERE dept = 'prod' or city = 'Orlando' or division = 'food'

      2.SELECT employeeID, firstname, lastname FROM names WHERE dept = 'prod'
UNION ALL
SELECT employeeID, firstname, lastname FROM names WHERE city = 'Orlando'
UNION ALL
SELECT employeeID, firstname, lastname FROM names WHERE division = 'food'
如果dept 列徏有烦引则查询2可以部分利用索引Q查?则不能?/p>

15?nbsp;  能用UNION  ALL׃要用UNION
UNION  ALL不执行SELECT DISTINCT函数Q这样就会减很多不必要的资?/p>

16?nbsp;  不要写一些不做Q何事的查?br>如:SELECT COL1 FROM T1 WHERE 1=0
    SELECT COL1 FROM T1 WHERE COL1=1 AND COL1=2
q类ȝ不会q回Ml果集,但是会消耗系l资源?/p>

17?nbsp; 量不要用SELECT INTO语句?br>SELECT INOT 语句会导致表锁定Q阻止其他用戯问该表?/p>

18?必要时强制查询优化器使用某个索引
     SELECT * FROM T1 WHERE nextprocess = 1 AND processid IN (8,32,45)
ҎQ?br>SELECT * FROM T1 (INDEX = IX_ProcessID) WHERE nextprocess = 1 AND processid IN (8,32,45)
则查询优化器会利用索引IX_ProcessID 执行查询?br>    
19?nbsp; 虽然UPDATE、DELETE语句的写法基本固定,但是q是对UPDATE语句l点Q?br>a) 量不要修改主键字段?br>b) 当修改VARCHAR型字D|Q尽量用相同长度内容的gѝ?br>c) 量最化对于含有UPDATE触发器的表的UPDATE操作?br>d) 避免UPDATE要复制到其他数据库的列?br>e) 避免UPDATE建有很多索引的列?br>f) 避免UPDATE在WHERE子句条g中的列?/p>


上面我们提到的是一些基本的提高查询速度的注意事?但是在更多的情况?往往需要反复试验比较不同的语句以得到最x案。最好的Ҏ当然是测试,看实现相同功能的SQL语句哪个执行旉最,但是数据库中如果数据量很,是比较不出来的,q时可以用查看执行计划,卻I把实现相同功能的多条SQL语句考到查询分析器,按CTRL+L看查所利用的烦引,表扫描次敎ͼq两个对性能影响最大)QM上看询成本百分比卛_?br>单的存储q程可以用向D动生成:在企业管理器工具栏点击运行向导图标,点击”数据?#8221;?#8221;创徏存储q程向导”。复杂存储过E的调试Q在查询分析器左边的对象览器(没有Q按F8Q选择要调试的存储q程,点右键,点调试,输入参数执行Q出C个Q动工hQ上面有单步执行Q断点设|等?/p>

larryjava 2007-07-27 10:00 发表评论
]]>
【{载】oracle备䆾与恢复精华资?/title><link>http://m.tkk7.com/larry/articles/121745.html</link><dc:creator>larryjava</dc:creator><author>larryjava</author><pubDate>Mon, 04 Jun 2007 01:25:00 GMT</pubDate><guid>http://m.tkk7.com/larry/articles/121745.html</guid><wfw:comment>http://m.tkk7.com/larry/comments/121745.html</wfw:comment><comments>http://m.tkk7.com/larry/articles/121745.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/larry/comments/commentRss/121745.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/larry/services/trackbacks/121745.html</trackback:ping><description><![CDATA[<div> <p><font size=3><span>冷备?/span><font face="Times New Roman"><span><span>...................................................................................................................... </span></span><span>1</span></font></font></p> <p><font size=3><span><font face="Times New Roman">1</font></span><span>、备份步骤:</span><font face="Times New Roman"><span><span>................................................................................................... </span></span><span>1</span></font></font></p> <p><font size=3><span><font face="Times New Roman">2</font></span><span>、恢复步骤:</span><font face="Times New Roman"><span><span>................................................................................................... </span></span><span>2</span></font></font></p> <p><font size=3><span>热备?/span><font face="Times New Roman"><span><span>...................................................................................................................... </span></span><span>2</span></font></font></p> <p><font size=3><span><font face="Times New Roman">1</font></span><span>、备份步骤:</span><font face="Times New Roman"><span><span>................................................................................................... </span></span><span>2</span></font></font></p> <p><font size=3><span><font face="Times New Roman">2</font></span><span>、恢复步骤:</span><font face="Times New Roman"><span><span>................................................................................................... </span></span><span>4</span></font></font></p> <p><font size=3><span><font face="Times New Roman">Windows</font></span><span>q_?/span><span><font face="Times New Roman">oracle</font></span><span>备䆾</span><font face="Times New Roman"><span>(Veritas BE)<span>...................................................................... </span></span><span>5</span></font></font></p> <p><font size=3><span><font face="Times New Roman">1</font></span><span>、需要的数据Q?/span><font face="Times New Roman"><span><span>............................................................................................... </span></span><span>5</span></font></font></p> <p><font size=3><span><font face="Times New Roman">2</font></span><span>、恢复过E:</span><font face="Times New Roman"><span><span>................................................................................................... </span></span><span>5</span></font></font></p> <p><font size=3><span>例子Q(|上原资料)</span><font face="Times New Roman"><span><span>............................................................................................... </span></span><span>7</span></font></font></p> <p><font size=3><span><font face="Times New Roman">1.<span>    </span></font></span><span>?/span><span><font face="Times New Roman">Oracle</font></span><span>的热备䆾重徏数据?/span><font face="Times New Roman"><span><span>..................................................................... </span></span><span>7</span></font></font></p> <p><font size=3><span><font face="Times New Roman">2.<span>    </span>Oracle9i RMAN </font></span><span>备䆾及恢复步?/span><font face="Times New Roman"><span><span>................................................................ </span></span><span>12</span></font></font></p> <p><span><font face="Times New Roman" size=3> </font></span></p> <h2><a name=_Toc134852034></a><a name=_Toc132594698><span><span>冷备?/span></span></a></h2> <h3><a name=_Toc134852035></a><a name=_Toc132594699><span><span><font face="Times New Roman" size=5>1</font></span></span></a><span><span><span><font size=5>、备份步骤:</font></span></span></span></h3> <p><font face=宋体><span>冷备份具有很多优良特性,快速,方便Q以及高效。一ơ完整的冷备份步骤是Q?/span></font></p> <p><span><font face=宋体>  </font></span><span>1</span><span><font face=宋体>Q首先关闭数据库Q?/font></span><span>shutdown normal</span><font face=宋体><span>Q?/span></font></p> <p><span><font face=宋体>  </font></span><span>2</span><font face=宋体><span>Q拷贝相x件到安全区域Q利用操作系l命令拷贝数据库的所有的数据文g、日志文件、控制文件、参数文件、口令文件等Q包括\径)Q?/span></font></p> <p><span><font face=宋体>  </font></span><span>3</span><span><font face=宋体>Q重新启动数据库Q?/font></span><span>startup</span><font face=宋体><span>Q?/span></font></p> <p><font face=宋体><span>  以上的步骤可以用一个脚本来完成操作Q?/span></font></p> <p><span>      su – oracle < sqlplus /nolog <br>      connect / as sysdba<br>      shutdown immediate;<br>      !cp </span><span><font face=宋体>文g</font></span><span>   </span><span><font face=宋体>备䆾位置Q所有的日志、数据、控制及参数文gQ?/font></span><span>;<br>      startup;<br>      exit;</span></p> <h3><a name=_Toc134852036></a><a name=_Toc132594700><span><span><font face="Times New Roman" size=5>2</font></span></span></a><span><span><span><font size=5>、恢复步骤:</font></span></span></span></h3> <p><font size=3><span>恢复的时候,相对比较单了Q我停掉数据库,文件拷贝回相应位置Q重启数据库可以了Q当然也可以用脚本来完成?/span></font></p> <h2><a name=_Toc134852037></a><a name=_Toc132594701><span><span>热备?/span></span></a></h2> <h3><a name=_Toc134852038></a><a name=_Toc132594702><span><span><font face="Times New Roman" size=5>1</font></span></span></a><span><span><span><font size=5>、备份步骤:</font></span></span></span></h3> <p><font face=宋体><span>当需要做一个精度比较高的备份,而且我们的数据库不可能停掉(许讉K量)Ӟq个情况下,我们需要归档方式下的备份,是下面讨论的热备䆾。热备䆾可以非常_的备份表I间U和用户U的数据Q由于它是根据归档日志的旉轴来备䆾恢复的,理论上可以恢复到前一个操作,甚至是前一U的操作。具体步骤如下:</span></font></p> <p><span><font face=宋体>  </font></span><span>1</span><span><font face=宋体>Q通过视图</font></span><span>v$database,</span><span><font face=宋体>查看数据库是否在</font></span><span>Archive</span><span><font face=宋体>模式?/font></span><span>:<br><br>        SQL> select log_mode from v$database;<br><br></span><span><font face=宋体>  如果不是</font></span><span>Archive</span><font face=宋体><span>模式</span></font></p> <p><span><font face=宋体>  则设定数据库q行于归档模式下Q?/font></span><span>SQL>shutdown immediate<br><br>        SQL>startup mount<br>        SQL> alter database archivelog;<br>        SQL> alter database open;<br><br></span><span><font face=宋体>  如果</font></span><span>Automaticarchival</span><span><font face=宋体>昄?/font></span><span>“Enabled”</span><span><font face=宋体>Q则数据库归档方式ؓ自动归档。否则需要手工归档,或者将归档方式修改动归档,如:</font></span><span><br></span><span><font face=宋体>  正常</font></span><span>shutdown</span><span><font face=宋体>数据库,在参数文件中</font></span><span>init.ora</span><span><font face=宋体>中加入如下参?/font></span><span><br><br>        SQL>shutdown immediate<br><br></span><span><font face=宋体>  修改</font></span><span>init.ora</span><span><font face=宋体>Q?/font></span><span><br><br>        LOG_ARCHIVE_START=TRUE<br>        LOG_ARCHIVE_DEST1=ORACLE_HOME/admin/o816/arch(</span><span><font face=宋体>归档日值存放位|可以自己定?/font></span><span>)<br>        SQL>startup<br><br></span><span><font face=宋体>  然后Q重新启动数据库Q此?/font></span><span>Oracle</span><span><font face=宋体>数据库将以自动归档的方式工作?/font></span><span>Archive</span><span><font face=宋体>模式下。其中参?/font></span><span>LOG_ARCHIVE_DEST1</span><span><font face=宋体>是指定的归档日志文g的\径,?/font></span><span>Oracle</span><span><font face=宋体>数据库文件存在不同的盘Q一斚w减少盘</font></span><span>I/O</span><span><font face=宋体>竞争Q另外一斚w也可以避免数据库文g所在硬盘毁坏之后的文g丢失。归档\径也可以直接指定为磁带等其它物理存储讑֤Q但可能要考虑d速度、可写条件和性能{因素?/font></span><span>       </span></p> <p><span><font face=宋体>  注意Q当数据库处?/font></span><span>ARCHIVE</span><span><font face=宋体>模式下时Q一定要保证指定的归档\径可写,否则数据库就会挂P直到能够归档所有归档信息后才可以用。另外,为创Z个有效的备䆾</font></span><span>,</span><span><font face=宋体>当数据库在创建时</font></span><span>,</span><span><font face=宋体>必须履行一个全数据库的冷备?/font></span><span>,</span><span><font face=宋体>是说数据库需要运行在归档方式</font></span><span>,</span><span><font face=宋体>然后正常关闭数据?/font></span><span>,</span><span><font face=宋体>备䆾所有的数据库组成文件。这一备䆾是整个备份的基础</font></span><span>,</span><font face=宋体><span>因ؓ该备份提供了一个所有数据库文g的拷贝。(体现了冷备䆾与热备䆾的合作关p,以及强大的能力)</span></font></p> <p><span><font face=宋体>  </font></span><span>2</span><span><font face=宋体>Q备份表I间文gQ?/font></span><span> </span></p> <p><span>        a,</span><span><font face=宋体>首先Q修改表I间文g为备份模?/font></span><span>  ALTER TABLESPACE tablespace_name BEGIN BACKUP;</span></p> <p><span>        b,</span><span><font face=宋体>然后Q拷贝表I间文g到安全区?/font></span><span> !CP tablespace_name D_PATH;</span></p> <p><span>        c,</span><span><font face=宋体>最后,表I间的备份模式关?/font></span><span>    ALTER TABLESPACE tablespace_name END BACKUP;</span></p> <p><span><font face=宋体>  </font></span><span>3</span><font face=宋体><span>Q对归档日志文g的备份:</span></font></p> <p><span>        </span><span><font face=宋体>停止归档q程Q-</font></span><span>></span><span><font face=宋体>备䆾归档日志文gQ-</font></span><span>></span><font face=宋体><span>启动归档q程</span></font></p> <p><span>        </span><span><font face=宋体>如果日志文档比较多,我们它们写入一个文件成Z个恢复的参考:</font></span><span>$   files `ls <</span><span><font face=宋体>归档文g路径</font></span><span>>/arch*.dbf`;export files</span></p> <p><span><font face=宋体>  </font></span><span>4</span><span><font face=宋体>Q备份控制文?/font></span><span>:<br><br>        SQL> alter database backup controlfile to 'controlfile_back_name</span><span><font face=宋体>Q一般用</font></span><st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="20" Month="11" Year="2004"><span>2004-11-20</span></st1:chsdate><span><font face=宋体>的方式)</font></span><span>' reuse;</span></p> <p><span><font face=宋体>  当然Q我们也可以上面的东东写ؓ一个脚本,在需要的时候执行就可以?/font></span><span>:</span></p> <p><font face=宋体><span>  脚本范例Q?/span></font></p> <p><span>        su – oracle < sqlplus /nolog <br>        connect / as sysdba<br>        ALTER TABLESPACE tablespace_name BEGIN BACKUP</span></p> <p><span>        !CP tablespace_name D_PATH</span></p> <p><span>        ALTER TABLESPACE tablespace_name END BACKUP<br>   <br>        alter database backup controlfile to 'controlfile_back_name</span><span><font face=宋体>Q一般用</font></span><st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="20" Month="11" Year="2004"><span>2004-11-20</span></st1:chsdate><span><font face=宋体>的方式)</font></span><span>' reuse;</span></p> <p><span>        !files `ls <</span><span><font face=宋体>归档文g路径</font></span><span>>/arch*.dbf`;export files</span></p> <h3><a name=_Toc134852039></a><a name=_Toc132594703><span><span><font face="Times New Roman" size=5>2</font></span></span></a><span><span><span><font size=5>、恢复步骤:</font></span></span></span></h3> <p><font face=宋体><span>  热备份的恢复Q对于归档方式数据库的恢复要求不但有有效的日志备份还</span><span>要求有一个在归档方式下作的有效的全库备䆾</span><span>。归档备份在理论上可以无数据丢失Q但是对于硬件以及操作h员的要求都比较高。在我们使用归档方式备䆾的时候,全库物理备䆾也是非常重要的。归档方式下数据库的恢复要求从全备䆾到失败点所有的日志都要完好无缺?/span></font><span><br><br>        </span><span><font face=宋体>恢复步骤Q?/font></span><span>LOG_ARCHIVE_DEST_1<br>                     shutdown</span><span><font face=宋体>数据库?/font></span><span><br>                     </span><span><font face=宋体>全备䆾的数据文件放到原来系l的目录中?/font></span><span><br>                     </span><span><font face=宋体>全备䆾到失败点的所有归档日志放到参?/font></span><span>LOG_ARCHIVE_DEST_1</span><span><font face=宋体>所指定的位|?/font></span><span><br>                     </span><span><font face=宋体>利用</font></span><span>sqlplus</span><span><font face=宋体>登陆到空实例。(</font></span><span>connect / as sysdba</span><span><font face=宋体>Q?/font></span><span><br>                     </span><span><font face=宋体>然后</font></span><span>  startup mount<br>                            set autorecovery on<br>                            recover database;<br>                            alter database open;</span></p> <p><font face=宋体><span>q样Q热恢复q完工?/span></font></p> <h2><a name=_Toc134852040></a><a name=_Toc132594704><span><span><font face=Arial>Windows</font></span></span></a><span><span><span>q_?/span><span><font face=Arial>oracle</font></span></span></span><span><span><span>备䆾</span><span><font face=Arial>(Veritas BE)</font></span></span></span></h2> <p><font size=3><span>通过</span><span><font face="Times New Roman">Backup Exec</font></span><span>实施</span><span><font face="Times New Roman">Oracle</font></span><span>N恢复很简单?/span></font></p> <h3><a name=_Toc134852041></a><a name=_Toc132594705><span><span><font face="Times New Roman" size=5>1</font></span></span></a><span><span><span><font size=5>、需要的数据Q?/font></span></span></span></h3> <p><font face=宋体><span>1</span><span>?span>FULL CLOSED</span>备䆾</span></font></p> <p><font face=宋体><span>shutdown</span><span>数据库(不要?span>shutdown abort</span>关闭Q,实施一个文件备䆾Q备份全部的<span>Oracle</span>相关文gQ包?span>Windows</span>pȝ文gQ系l状态和<span>Oracle</span>E序文g和数据文件等内容?/span></font></p> <p><span><font face=宋体>q个冷备份对于快速恢?span>Oracle</span>数据库系l非常关键,如果没有它,pȝ被破坏后只能重新安装再恢复,q要比直接恢复冷备䆾慢得多,也更复杂?/font></span></p> <p><span><font face=宋体>每当数据库或表单的物理结构或逻辑l构有变化时都应该重新创个冷备䆾?/font></span></p> <p><font face=宋体><span>2. FULL ONLINE</span><span>备䆾</span></font></p> <p><span><font face=宋体>q个备䆾要通过<span>Backup Exec Agent for Oracle Server</span>来完成,要备份全部表I间Q归档日志和控制文gQ通过q种方式备䆾Q?span>Oracle</span>会将所有缓存内容写入文Ӟ?span>online redo log</span>做归档,所以数据库备䆾中包含的是备份时数据库的x点信息,完整而且有效。以后做恢复Ӟ可以恢复到最后一?span>FULL ONLINE</span>备䆾的状态?/font></span></p> <h3><a name=_Toc134852042></a><a name=_Toc132594706><span><span><font face="Times New Roman" size=5>2</font></span></span></a><span><span><span><font size=5>、恢复过E:</font></span></span></span></h3> <p><font face=宋体><span>1. </span><span>重新安装<span>Windows</span>pȝ?span>Remote Agent for Windows Server</span>Qؓ恢复<span>Oracle</span>服务器准备环境?/span></font></p> <p><font face=宋体><span>2. </span><span>恢复最后一?span>FULL CLOSED</span>备䆾Q重新启动计机?/span></font></p> <p><span><font face=宋体>此时<span>Windows</span>pȝQ?span>Oracle</span>数据库系l都是完整的Q只?span>Oracle</span>数据库中可能不是最新的数据?span>Backup Exec Agent for Oracle Server</span>也不用重新安装了?/font></span></p> <p><font face=宋体><span>3. </span><span>?span>SQLPlus</span>?span>SYS</span>?span>sysdba</span>w䆾q接到数据库pȝQ关闭数据库?nbsp;</span></font></p> <p><span><font face=宋体>shutdown immediate + < enter ></font></span></p> <p><font face=宋体><span>4. </span><span>通过介质服务器恢复最新的<span>FULL ONLINE</span>备䆾Q恢复作业属性的高选项中,保选中?span>“Restore over Existing files</span>Q覆盖现存文Ӟ<span>” </span>选项?/span></font></p> <p><span><font face=宋体>要想成功的恢复数据库Q在最后一?span>FULL CLOSED</span>备䆾之后的所?span>redo log</span>必须都已l成功归档ƈ备䆾。少了哪一个,数据库就无法恢复到最后的<span>FULL ONLI NE</span>备䆾时的状态?/font></span></p> <p><span><font face=宋体>通过<span>Oracle</span>?span>alert log</span>可以看到数据库的恢复需要哪些归档日志,以及你应该把它们恢复C么位|?/font></span></p> <p><font face=宋体><span>5. </span><span>恢复完成后,?span>SYS</span>用户?span>sysdba</span>w䆾q接到数据库Q将数据库加载到<span>mount</span>阶段Q?/span></font></p> <p><span><font face=宋体>startup mount + < enter ></font></span></p> <p><span><font face=宋体>6. </font></span><span><font face=宋体>数据?span>mount</span>完成后,执行<span>recover</span>q程Q?/font><span><br><br><font face=宋体>recover database using backup controlfile + < enter ></font></span></span></p> <p><span><font face=宋体>数据库会提示你需要哪些日志:</font></span></p> <p><span><font face=宋体>ORA-00279: Change 36579 generated at needed for thread 1<br><br>ORA-00289: Suggestion : \Oracle_Home\Oradata\\%SID%T00036579.ARC<br><br>ORA-00280: {=Suggested | filename | AUTO | FROM logsource | CANCEL}</font></span></p> <p><span><font face=宋体>最单的Ҏ是选自动恢复:</font><span><font face=宋体> <br><br>auto + < enter ></font></span></span></p> <p><span><font face=宋体>pȝ会在<span>init.ora</span>文g中定义的位置上查找所有必需的日志ƈ依次应用它们Q最后一个要应用的日志是<span>online redo log</span>Q实际上它ƈ不包括Q何的<span>transaction</span>Q只有一?span>SCN</span>Q可以略q,但是自动恢复q程会因为找不到相应的文件而报错:</font></span></p> <p><span><font face=宋体>ORA-00308: cannot open archived log<br><br>E:\ORACLE\ORADATA\KIMSTAD\ARCHIVE\KIMSTADT00036949.ARC'<br><br>ORA-27041: unable to open file<br><br>OSD-04002: unable to open file<br><br>O/S-Error: (OS 2) The system cannot find the file specified.</font></span></p> <p><span><font face=宋体>为此输入以下命oQ?span>until cancel</span>参数使我们可以在需要的时候中止恢复过E)Q?/font><span><br><br><font face=宋体>recover database until cancel using backup controlfile + </font></span></span></p> <p><span><font face=宋体>q样在数据库恢复的最后阶D再ơ提C前面的错误Ӟ我们可以中止恢复过E:</font><span><br><br><font face=宋体>cancel + < enter ></font></span></span></p> <p><span><font face=宋体>q时除了最后一?span>online redo log</span>以外Q所有的<span>commit transaction</span>都已l提交到数据库之中了Q完成后会显C:</font><span><br><br><font face=宋体>Media recovery canceled</font></span></span></p> <p><span><font face=宋体>实际上恢复过E已l正常完成了?/font></span></p> <p><span><font face=宋体>最后是打开数据库ƈ同步日志序列P</font><span><br><br><font face=宋体>alter database open resetlogs + < enter ></font></span></span></p> <p><span><font face=宋体>xQ?span>Oracle</span>数据库被成功恢复到最后一?span>Full Online</span>备䆾?/font></span></p> <p><font size=3><strong><span><font face="Times New Roman"> </font></span></strong><strong><span>说明Q?/span></strong><span><font face="Times New Roman">Oracle 8i</font></span><span>可以?/span><span><font face="Times New Roman">internal</font></span><span>账号完成</span><span><font face="Times New Roman">DBA</font></span><span>操作?/span><span><font face="Times New Roman">9i</font></span><span>取消?/span><span><font face="Times New Roman">internal</font></span><span>账号Q?/span><span><font face="Times New Roman">SYS</font></span><span>账号代替它了。ؓ了以</span><span><font face="Times New Roman">DBA</font></span><span>w䆾dQ启?/span><span><font face="Times New Roman">SQL Plus</font></span><span>时应该加</span><span><font face="Times New Roman">nolog</font></span><span>参数Q进入之后再dQ?/span><span><font face="Times New Roman">connect username/password as sysdba</font></span><span>?/span></font></p> <p><span><font face="Times New Roman" size=3> </font></span></p> <h2><a name=_Toc134852043></a><a name=_Toc132594707><span><span>例子Q?/span></span></a><span><span>Q网上原资料Q?/span></span></h2> <h3><a name=_Toc134852044></a><a name=_Toc132594708><span><span><span><font face="Times New Roman"><font size=5>1.</font><span>      </span></font></span></span><font size=5><span>?/span><span><font face="Times New Roman">Oracle</font></span></font></span></a><span><span><span><font size=5>的热备䆾重徏数据?/font></span></span></span></h3> <p><span>Z验我为公司开发的</span><span><font face="Times New Roman">Oracle</font></span><span>数据库在U自动备份系l,我根?#8220;</span><span><font face="Times New Roman">Oracle</font></span><span>数据库在U自动备份系l?#8221;产生的备份文件来重徏和恢?/span><span><font face="Times New Roman">Oracle</font></span><span>数据库。ؓ了让大家׃n其方法和步骤Q也适合于用其它方式?/span><span><font face="Times New Roman">Oracle</font></span><span>做的热备份进行重建数据库Q现整理如下?/span><span><br><br></span><strong><span>一、系l环?/span></strong><span><br><br></span><span>本次试所使用的系l环境如下:</span><span><br><br><span><font face="Times New Roman">1</font></span></span><span>Q?/span><span><font face="Times New Roman"> </font></span><span>g环境</span><span><br><br></span><span>服务器:</span><span><font face="Times New Roman">Dell PowerEdge 1300 (CPU</font></span><span>Q?/span><span><font face="Times New Roman">P</font></span><span>?/span><span><font face="Times New Roman"> 550MHz </font></span><span>内存Q?/span><span><font face="Times New Roman">128MB </font></span><span>盘Q?/span><span><font face="Times New Roman">36GB)<br><br><span>2</span></font></span><span>Q?/span><span><font face="Times New Roman"> </font></span><span>软g环境</span><span><br><br></span><span>操作pȝQ?/span><span><font face="Times New Roman">UnixWare 7.1<br><br></font></span><span>数据库: </span><span><font face="Times New Roman">Oracle <st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899">8.1.6</st1:chsdate> for Unix </font></span><span>企业版,</span><span><font face="Times New Roman">SID</font></span><span>Q?/span><span><font face="Times New Roman">ora816<br><br>Oracle</font></span><span>安装路径Q?/span><span><font face="Times New Roman">/home/oracle<br><br></font></span><span>备䆾文gQ所有数据库文g、控制文件、初始化文g、数据库备䆾以来的所有归档日志文件?/span><span><br><br></span><strong><span>二、恢复步?/span></strong><span><br><br></span><span>下面Ҏ从用户处带回来的备䆾数据Q在一台新的服务器重徏</span><span><font face="Times New Roman">Oracle</font></span><span>数据库。其详细步骤如下Q?/span><span><font face="Times New Roman"> <br><br><span>1. </span></font></span><span>创徏数据库恢复用的环境</span><span><br></span><span><br></span><span>在新?/span><span><font face="Times New Roman">Dell</font></span><span>服务器上Q安装与原来的数据库服务器相同的操作pȝ</span><span><font face="Times New Roman">UnixWare 7.1</font></span><span>Q然后安装与原数据库相同版本?/span><span><font face="Times New Roman">Oracle 8.1.6 for Unix </font></span><span>企业版?/span><span><br><br><span><font face="Times New Roman">2. </font></span></span><span>删除新服务器上的</span><span><font face="Times New Roman">Oracle</font></span><span>实例</span><span><br><br></span><span>启动新数据库服务器上?/span><span><font face="Times New Roman">Oracle</font></span><span>Q在</span><span><font face="Times New Roman">sqlplus</font></span><span>中,查找到数据库文g的\径,q保存在当前路径下的文g</span><span><font face="Times New Roman">file_name.txt</font></span><span>中:</span><span><br><br><font face="Times New Roman">$ sqlplus system/manager<br><br>SQL> spool file_name.txt<br><br>SQL> select file_name from sys.dba_data_files;<br><br>SQL> spool end<br><br>SQL>exit<br><br></font></span><span>关闭新服务器?/span><span><font face="Times New Roman">Oracle</font></span><span>Q然后根据文?/span><span><font face="Times New Roman">file_name.txt</font></span><span>中的路径Q删除新装的</span><span><font face="Times New Roman">Oracle</font></span><span>实例的所有数据库文g?/span><span><br><br></span><span>注:从本步开始所有操作都是用</span><span><font face="Times New Roman">Oracle</font></span><span>用户d操作pȝQ?/span><span><font face="Times New Roman">Unix</font></span><span>Q后q行。文中所有的黑色_体</span><span><font face="Times New Roman">5</font></span><span>号字W?/span><span><font face="Times New Roman">(</font></span><span>标题除外</span><span><font face="Times New Roman">)</font></span><span>的语句可以直接执行,黑色倾斜_体</span><span><font face="Times New Roman">5</font></span><span>号字W的语句需要修改后执行?/span><span><br><br><span><font face="Times New Roman">3. </font></span></span><span>恢复数据库文?/span><span><br><br></span><span>把备份的所有数据库文g?/span><span><font face="Times New Roman">Ftp</font></span><span>上传新的数据库服务器中的相同路径下。如果原来的路径已不存在Q可以拷贝到其他路径下,恢复时详l处理方法见步骤</span><span><font face="Times New Roman">7</font></span><span>?/span><span><font face="Times New Roman"><2></font></span><span>?/span><span><br><br><span><font face="Times New Roman">4. </font></span></span><span>恢复初始化参数文?/span><span><br></span><span><br></span><span>把备份的</span><span><font face="Times New Roman">initSID.ora</font></span><span>文g?/span><span><font face="Times New Roman">Ftp</font></span><span>上传到新数据库服务器?/span><span><font face="Times New Roman">Oracle</font></span><span>实例?/span><span><font face="Times New Roman">initSID.ora</font></span><span>文g位置Q覆盖之。其位置一般在</span><span><font face="Times New Roman">$ORACLE_HOME/dbs</font></span><span>目录下?/span><span><br><br><span><font face="Times New Roman">5. </font></span></span><span>恢复控制文g</span><span><br></span><span><br></span><span>把备份的</span><span><font face="Times New Roman">ControlFile.bak</font></span><span>文g?/span><span><font face="Times New Roman">Ftp</font></span><span>上传到新数据库服务器?/span><span><font face="Times New Roman">Oracle</font></span><span>实例的各个镜像\径下Qƈ按初始化参数文g</span><span><font face="Times New Roman">initSID.ora</font></span><span>中的该项的位|和名称命名?/span><span><br><br><font face="Times New Roman">control_files = ("/home/oracle/app/oracle/oradata/ora816/control01.ctl", "/home/oracle/app/oracle/oradata/ora816/control02.ctl","/home/oracle/app/oracle/oradata/ora816/control03.ctl")<br><br></font></span><span>其\径如有变动,在初始化参数文g</span><span><font face="Times New Roman">initSID.ora</font></span><span>中修改如上内容的路径和名Uͼ使其实际路径与该参数的\径一致?/span><span><font face="Times New Roman"> <br><br><span>6. </span></font></span><span>恢复归档日志文g</span><span><br><br></span><span>把数据库备䆾后的归档日志?/span><span><font face="Times New Roman">Ftp</font></span><span>上传到新数据库服务器的相同\径下。\径如有变动可以根据初始化参数文g</span><span><font face="Times New Roman">initSID.ora</font></span><span>中如下位|进行修改,使其实际路径与该参数的\径一致?/span><span><br><br><font face="Times New Roman">log_archive_dest_1 = "location=/home/oracle/app/oracle/admin/ora816/arch"<br><br><br><br><span>7. </span></font></span><span>恢复数据?/span><span><br><br></span><span>l过以上</span><span><font face="Times New Roman">6</font></span><span>个步骤,把所有的备䆾文g已经上传C新数据库服务器中。下面开始根据这些文件恢复ƈ启动数据库,先在操作pȝ的提C符下做如下操作Q?/span><span><br><br><font face="Times New Roman">$svrmgrl<br><br>SVRMGR>connect internal<br><br>SVRMGR>startup mount<br><br><1> </font></span><span>创徏口o文g</span><span><br><br></span><span>如果原来的数据库配置了口令文Ӟq且?/span><span><font face="Times New Roman">mount</font></span><span>数据库时报如下错误:</span><span><br><br><font face="Times New Roman">ORA-01990: error opening password file '/home/oracle/app/oracle/product/8.1.6/dbs/orapw'<br><br></font></span><span>可以?/span><span><font face="Times New Roman">/home/oracle/app/oracle/product/8.1.6/dbs/</font></span><span>路径下,用以下命令创建口令文Ӟ</span><span><br><br><font face="Times New Roman">orapwd<br><br></font></span><span>其用法如下:</span><span><br><br><font face="Times New Roman">Usage: orapwd file=<fname> password=<password> entries=<users><br><br>where<br><br>file - name of password file (mand),</font></span><span>Q口令文件的命名方式为:</span><span><font face="Times New Roman">orapwSID</font></span><span>Q?/span><span><br><br><font face="Times New Roman">password - password for SYS and INTERNAL (mand),<br><br>entries - maximum number of distinct DBA and OPERs (opt),<br><br>There are no spaces around the equal-to (=) character.<br><br></font></span><span>例如Q?/span><span><font face="Times New Roman"> orapwd file=orapwora816 password=manager<br><br></font></span><span>然后重新执行如下语句</span><span><font face="Times New Roman">mount</font></span><span>数据库:</span><span><br><br><font face="Times New Roman">SVRMGR>startup mount</font></span><span>?/span><span><br><br><font face="Times New Roman"><2> </font></span><span>修改数据库文件的路径</span><span><br><br></span><span>如果在上q的步骤</span><span><font face="Times New Roman">3</font></span><span>中修改了恢复的数据库文g的\径,可以用如下语句对数据库文仉新命?/span><span><font face="Times New Roman"> </font></span><span>Q?/span><span><br><br><font face="Times New Roman">alter database rename file 'old_file' to 'new_file';<br><br></font></span><span>如把原来路径</span><span><font face="Times New Roman">/home/oracle/app/oracle/oradata/ora816</font></span><span>下的文g</span><span><font face="Times New Roman">system01.dbf</font></span><span>改到?/span><span><font face="Times New Roman">/u21/oracle/app/oracle/oradata/ora816</font></span><span>下:</span><span><br><br><font face="Times New Roman">SVRMGR>alter database rename file<br><br>'/home/oracle/app/oracle/oradata/ora816/system01.dbf' <br><br>to '/u21/oracle/app/oracle/oradata/ora816/system01.dbf';<br><br></font></span><span>按照上面的方法把所有修改\径的数据库文仉新命名?/span><span><br><br><font face="Times New Roman"><3> </font></span><span>Ҏ控制文g和归档日志文件恢复数据库</span><span><br><br></span><span>下面开始用控制文g和归档日志文件恢复数据库Q?/span><span><br><br><font face="Times New Roman">SVRMGR>recover database using backup controlfile until cancel;<br><br></font></span><span>出现如下提示Q?/span><span><br><br><font face="Times New Roman">ORA-00279: change 50971 generated at 08/23/2002 09:21:27 needed for thread 1<br><br>ORA-00289: suggestion: /home/oracle/app/oracle/admin/ora8/arch/arch_1_399.arc<br><br>ORA-00280: change 50971 for thread 1 is in sequence #399<br><br>Specify log: {<RET>=suggested | filename | AUTO | CANCEL}</font></span><span>输入Q?/span><span><br><br><font face="Times New Roman">auto<br><br></font></span><span>如果有如下提C,则表C成功?/span><span><br><br><font face="Times New Roman">ORA-00279: change 51007 generated at 08/23/2002 11:23:13 needed for thread 1<br><br>ORA-00289: suggestion: /home/oracle/app/oracle/admin/ora8/arch/arch_1_400.arc<br><br>ORA-00280: change 51007 for thread 1 is in sequence #400<br><br>ORA-00278: log file '/home/oracle/app/oracle/admin/ora8/arch/arch_1_399.arc' noy<br><br>Log applied.<br><br></font></span><span>意外处理Q如果其它提C可能是需要的日志文g不存在,?/span><span><font face="Times New Roman">ORA-00289</font></span><span>中该文g是否存在?/span><span><br><br></span><span>直到出现如下提示Q?/span><span><br><br><font face="Times New Roman">ORA-00279: change 51011 generated at 08/23/2002 11:23:45 needed for thread 1<br><br>ORA-00289: suggestion: /home/oracle/app/oracle/admin/ora8/arch/arch_1_401.arc<br><br>ORA-00280: change 51011 for thread 1 is in sequence #401<br><br>ORA-00278: log file '/home/oracle/app/oracle/admin/ora8/arch/arch_1_400.arc' noy<br><br>ORA-00308: cannot open archived log '/home/oracle/app/oracle/admin/ora8/arch<br><br>/arch_1_401.arc'<br><br>ORA-27037: unable to obtain file status<br><br>Intel SVR4 UNIX Error: 2: No such file or directory<br><br>Additional information: 3<br><br><4> </font></span><span>重置日志</span><span><br><br><font face="Times New Roman">SVRMGR>alter database open resetlogs;<br><br></font></span><span>意外处理Q如果提C创建日志的路径不存在,按提C\径创建目录。然后再重置日志?/span><span><br><br><font face="Times New Roman"><5> </font></span><span>重启数据库,完成恢复</span><span><br><br><font face="Times New Roman">SVRMGR>shutdown immediate<br><br>SVRMGR>startup <br><br>ORACLE instance started.<br><br>Total System Global Area 123437040 bytes<br><br>Fixed Size 69616 bytes<br><br>Variable Size 106418176 bytes<br><br>Database Buffers 16777216 bytes<br><br>Redo Buffers 172032 bytes<br><br>Database mounted.<br><br>Database opened. <br><br></font></span><span>数据库正常打开Q数据库重徏恢复成功?/span></p> <p><span><font face="Times New Roman"> </font></span></p> <h3><a name=_Toc134852045></a><a name=_Toc132594709><span><font face="Times New Roman"><span><span><font size=5>2.</font><span>      </span></span></span><span><font size=5>Oracle9i RMAN </font></span></font></span></a><span><span><span><font size=5>备䆾及恢复步?/font></span></span></span></h3> <p><span><font face="Times New Roman"> </font></span></p> <p><span>在这里没有讨论多么深入的</span><span>RMAN</span><span>技术,也没有告诉大家这样去~写备䆾脚本Q这q不是我的初P我只x我会的写出来Q和大家一起学习,一赯步,谢谢?/span><span><br><br>1</span><span>、切换服务器归档模式Q如果已l是归档模式可蟩q此步:</span><span><br>%sqlplus /nolog     (</span><span>启动</span><span>sqlplus)<br>SQL> conn / as sysdba     (</span><span>?/span><span>DBA</span><span>w䆾q接数据?/span><span>)<br>SQL> shutdown immediate;     (</span><span>立即关闭数据?/span><span>)<br>SQL> startup mount     (</span><span>启动实例q加载数据库Q但不打开</span><span>)<br>SQL> alter database archivelog;     (</span><span>更改数据库ؓ归档模式</span><span>)<br>SQL> alter database open;     (</span><span>打开数据?/span><span>)<br>SQL> alter system archive log start;     (</span><span>启用自动归档</span><span>)<br>SQL> exit     (</span><span>退?/span><span>)<br><br>2</span><span>、连接:</span><span><br>%rman target=rman/rman@mydb     (</span><span>启动恢复理?/span><span>)<br><br>3</span><span>、基本设|:</span><span><br>RMAN> configure default device type to disk;    (</span><span>讄默认的备份设备ؓ盘</span><span>)<br>RMAN> configure device type disk parallelism 2;     (</span><span>讄备䆾的ƈ行别,通道?/span><span>)<br>RMAN> configure channel 1 device type disk fromat '/backup1/backup_%U';     (</span><span>讄备䆾的文件格式,只适用于磁盘设?/span><span>)<br>RMAN> configure channel 2 device type disk fromat '/backup2/backup_%U';     (</span><span>讄备䆾的文件格式,只适用于磁盘设?/span><span>)<br>RMAN> configure controlfile autobackup on;     (</span><span>打开控制文g与服务器参数文g的自动备?/span><span>)<br>RMAN> configure controlfile autobackup format for device type disk to '/backup1/ctl_%F';     (</span><span>讄控制文g与服务器参数文g自动备䆾的文件格?/span><span>)<br><br>4</span><span>、查看所有设|:</span><span><br>RMAN> show all<br><br>5</span><span>、查看数据库Ҏ报表Q?/span><span><br>RMAN> report schema;<br><br>6</span><span>、备份全库:</span><span><br>RMAN> backup database plus archivelog delete input;     (</span><span>备䆾全库及控制文件、服务器参数文g与所有归档的重做日志Qƈ删除旧的归档日志</span><span>)<br><br>7</span><span>、备份表I间Q?/span><span><br>RMAN> backup tablespace system plus archivelog delete input;     (</span><span>备䆾指定表空间及归档的重做日志,q删除旧的归档日?/span><span>)<br><br>8</span><span>、备份归档日志:</span><span><br>RMAN> backup archivelog all delete input;<br><br>9</span><span>、复制数据文Ӟ</span><span><br>RMAN> copy datafile 1 to '/oracle/dbs/system.copy';<br><br>10</span><span>、查看备份和文g复本Q?/span><span><br>RMAN> list backup;<br><br>11</span><span>、验证备份:</span><span><br>RMAN> validate backupset 3;<br><br>12</span><span>、从自动备䆾中恢复服务器参数文gQ?/span><span><br>RMAN> shutdown immediate;     (</span><span>立即关闭数据?/span><span>)<br>RMAN> startup nomount;     (</span><span>启动实例</span><span>)<br>RMAN> restore spfile to pfile '/backup1/mydb.ora' from autobackup;     (</span><span>从自动备份中恢复服务器参数文?/span><span>)<br><br>13</span><span>、从自动备䆾中恢复控制文Ӟ</span><span><br>RMAN> shutdown immediate;     (</span><span>立即关闭数据?/span><span>)<br>RMAN> startup nomount;     (</span><span>启动实例</span><span>)<br>RMAN> restore controlfile to '/backup1' from autobackup;     (</span><span>从自动备份中恢复控制文g</span><span>)<br><br>13</span><span>、恢复和复原全数据库Q?/span><span><br>RMAN> shutdown immediate;     (</span><span>立即关闭数据?/span><span>)<br>RMAN> exit     (</span><span>退?/span><span>)<br>%mv /oracle/dbs/tbs_12.f /oracle/dbs/tbs_12.bak     (</span><span>数据文仉命名</span><span>)<br>%mv /oracle/dbs/tbs_13.f /oracle/dbs/tbs_13.bak     (</span><span>数据文仉命名</span><span>)<br>%mv /oracle/dbs/tbs_14.f /oracle/dbs/tbs_14.bak     (</span><span>数据文仉命名</span><span>)<br>%mv /oracle/dbs/tbs_15.f /oracle/dbs/tbs_15.bak     (</span><span>数据文仉命名</span><span>)<br>%rman target=rman/rman@mydb     (</span><span>启动恢复理?/span><span>)<br>RMAN> startup pfile=/oracle/admin/mydb/pfile/initmydb.ora     (</span><span>指定初始化参数文件启动数据库</span><span>)<br>RMAN> restore database;     (</span><span>q原数据?/span><span>)<br>RMAN> recover database;     (</span><span>恢复数据?/span><span>)<br>RMAN> alter database open;     (</span><span>打开数据?/span><span>)<br><br>14</span><span>、恢复和复原表空_</span><span><br>RMAN> sql 'alter tablespace users offline immediate';     (</span><span>表I间脱机</span><span>)<br>RMAN> exit     (</span><span>退出恢复管理器</span><span>)<br>%mv /oracle/dbs/users01.dbf /oracle/dbs/users01.bak     (</span><span>表I间重命?/span><span>)<br>%rman target=rman/rman@mydb     (</span><span>启动恢复理?/span><span>)<br>RMAN> restore tablespace users;     (</span><span>q原表空?/span><span>)<br>RMAN> recover tablespace users;     (</span><span>恢复表空?/span><span>)<br>RMAN> sql 'alter tablespace users online';     (</span><span>表I间联机</span><span>)<br><br>15</span><span>、增量备份与恢复Q?/span><span><br></span><span>W一天的增量基本备䆾Q?/span><span><br>RMAN> backup incremental level=0 database plus archivelog delete input;<br></span><span>W二天的增量差异备䆾Q?/span><span><br>RMAN> backup incremental level=2 database plus archivelog delete input;<br></span><span>W三天的增量差异备䆾Q?/span><span><br>RMAN> backup incremental level=2 database plus archivelog delete input;<br></span><span>W四天的增量差异备䆾Q?/span><span><br>RMAN> backup incremental level=1 database plus archivelog delete input;<br></span><span>W五天的增量差异备䆾Q?/span><span><br>RMAN> backup incremental level=2 database plus archivelog delete input;<br></span><span>W六天的增量差异备䆾Q?/span><span><br>RMAN> backup incremental level=2 database plus archivelog delete input;<br></span><span>W七天的增量差异备䆾Q?/span><span><br>RMAN> backup incremental level=0 database plus archivelog delete input;<br><br></span><span>增量恢复Q?/span><span><br>RMAN> shutdown immediate;<br>RMAN> exit<br>%mv /oracle/dbs/tbs_12.f /oracle/dbs/tbs_12.bak<br>%mv /oracle/dbs/tbs_13.f /oracle/dbs/tbs_13.bak<br>%mv /oracle/dbs/tbs_14.f /oracle/dbs/tbs_14.bak<br>%mv /oracle/dbs/tbs_15.f /oracle/dbs/tbs_15.bak<br>%rman target=rman/rman@mydb<br>RMAN> startup pfile=/oracle/admin/mydb/pfile/initmydb.ora<br>RMAN> restore database;<br>RMAN> recover database;<br>RMAN> alter database open;</span></p> </div> <img src ="http://m.tkk7.com/larry/aggbug/121745.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/larry/" target="_blank">larryjava</a> 2007-06-04 09:25 <a href="http://m.tkk7.com/larry/articles/121745.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>优化--让你的SQLq行速度明显提高http://m.tkk7.com/larry/articles/116663.htmllarryjavalarryjavaFri, 11 May 2007 01:55:00 GMThttp://m.tkk7.com/larry/articles/116663.htmlhttp://m.tkk7.com/larry/comments/116663.htmlhttp://m.tkk7.com/larry/articles/116663.html#Feedback0http://m.tkk7.com/larry/comments/commentRss/116663.htmlhttp://m.tkk7.com/larry/services/trackbacks/116663.html W者在工作实践中发玎ͼ不良的SQL往往来自于不恰当的烦引设计、不充䆾的连接条件和不可优化的where子句。在对它们进行适当的优化后Q其q行速度有了明显地提高!下面我将从这三个斚w分别q行ȝQ(Z更直观地说明问题Q所有实例中的SQLq行旉均经q测试,不超q1U的均表CZؓQ?lt; 1U)?Q?br>
一、不合理的烦引设?/strong>
  例:表record?20000行,试看在不同的索引下,下面几个 SQL的运行情况:
  1.在date上徏有一非个集索引

select count(*) from record where date >
''19991201'' and date < ''19991214''and amount >
2000 (25U?
select date,sum(amount) from record group by date
(55U?
select count(*) from record where date >
''19990901'' and place in (''BJ'',''SH'') (27U?


  分析Q?
  date上有大量的重复|在非集索引下,数据在物理上随机存放在数据页上,在范围查找时Q必L行一ơ表扫描才能扑ֈq一范围内的全部行?


  2.在date上的一个群集烦?br>

select count(*) from record where date >
''19991201'' and date < ''19991214'' and amount >
2000 Q?4U)
select date,sum(amount) from record group by date
Q?8U)
select count(*) from record where date >
''19990901'' and place in (''BJ'',''SH'')Q?4U)


  分析Q?
  在群集烦引下Q数据在物理上按序在数据页上,重复g排列在一P因而在范围查找Ӟ可以先找到这个范围的h点,且只在这个范围内扫描数据,避免了大范围扫描Q提高了查询速度?


  3.在placeQdateQamount上的l合索引

select count(*) from record where date >
''19991201'' and date < ''19991214'' and amount >
2000 Q?6U)
select date,sum(amount) from record group by date
Q?7U)
select count(*) from record where date >
''19990901'' and place in (''BJ, ''SH'')Q?lt; 1U)


  分析Q?
  q是一个不很合理的l合索引Q因为它的前导列是placeQ第一和第二条SQL没有引用placeQ因此也没有利用上烦引;W三个SQL使用了place?br>

  4.在dateQplaceQamount上的l合索引

select count(*) from record where date >
''19991201'' and date < ''19991214'' and amount >
2000(< 1U?
select date,sum(amount) from record group by date
Q?1U)
select count(*) from record where date >
''19990901'' and place in (''BJ'',''SH'')Q?lt; 1U)


  分析Q?
  q是一个合理的l合索引。它date作ؓ前导列,使每个SQL都可以利用烦引,q且在第一和第三个SQL中Ş成了索引覆盖Q因而性能辑ֈ了最优?


  5.ȝQ?
  ~省情况下徏立的索引是非集索引Q但有时它ƈ不是最佳的Q合理的索引设计要徏立在对各U查询的分析和预上。一般来_

  ?有大量重复倹{且l常有范围查?

  Qbetween, >,< Q?gt;=,< =Q和order by、group by发生的列Q可考虑建立集索引Q?

  ?l常同时存取多列Q且每列都含有重复值可考虑建立l合索引Q?

  ?l合索引要尽量关键查询形成索引覆盖Q其前导列一定是使用最频繁的列?/p>

二、不充䆾的连接条?/strong>

  例:表card?896行,在card_no上有一个非聚集索引Q表account?91122行,?account_no上有一个非聚集索引Q试看在不同的表q接条g下,两个SQL的执行情况:

select sum(a.amount) from account a,
card b where a.card_no = b.card_noQ?0U)



  SQL改ؓQ?

select sum(a.amount) from account a,
card b where a.card_no = b.card_no and a.
account_no=b.account_noQ?lt; 1U)


  分析Q?
  在第一个连接条件下Q最x询方案是account作外层表Qcard作内层表Q利用card上的索引Q其I/Oơ数可由以下公式估算为:
  外层表account上的22541?Q外层表account?91122?内层表card上对应外层表W一行所要查扄3)=595907ơI/O

  在第二个q接条g下,最x询方案是card作外层表Qaccount作内层表Q利用account上的索引Q其I/Oơ数可由以下公式估算为:
  外层表card上的1944?Q外层表card?896?内层表account上对应外层表每一行所要查扄4)= 33528ơI/O

  可见Q只有充份的q接条gQ真正的最x案才会被执行?


  ȝQ?
  1.多表操作在被实际执行前,查询优化器会Ҏq接条gQ列出几l可能的q接Ҏq从中找出系l开销最的最x案。连接条件要充䆾考虑带有索引的表、行数多的表Q内外表的选择可由公式Q外层表中的匚w行数*内层表中每一ơ查扄ơ数定Q乘U最ؓ最x案?

  2.查看执行Ҏ的方?- 用set showplanonQ打开showplan选项Q就可以看到q接序、用何U烦引的信息Q想看更详细的信息,需用sa角色执行dbcc(3604,310,302)?


三、不可优化的where子句

  1.例:下列SQL条g语句中的列都建有恰当的烦引,但执行速度却非常慢Q?

select * from record where
substring(card_no,1,4)=''5378''(13U?
select * from record where
amount/30< 1000Q?1U)
select * from record where
convert(char(10),date,112)=''19991201''Q?0U)


  分析Q?
  where子句中对列的M操作l果都是在SQLq行旉列计算得到的,因此它不得不q行表搜索,而没有用该列上面的索引Q如果这些结果在查询~译时就能得刎ͼ那么可以被SQL优化器优化,使用索引Q避免表搜烦Q因此将SQL重写成下面这P

select * from record where card_no like
''5378%''Q?lt; 1U)
select * from record where amount
< 1000*30Q?lt; 1U)
select * from record where date= ''1999/12/01''
Q?lt; 1U)


  你会发现SQL明显快v来!

  2.例:表stuff?00000行,id_no上有非群集烦引,L下面q个SQLQ?

select count(*) from stuff where id_no in(''0'',''1'')Q?3U)


  分析Q?
  where条g中的''in''在逻辑上相当于''or''Q所以语法分析器会将in (''0'',''1'')转化为id_no =''0'' or id_no=''1''来执行。我们期望它会根据每个or子句分别查找Q再结果相加,q样可以利用id_no上的索引Q但实际上(Ҏ showplanQ?它却采用?OR{略"Q即先取出满x个or子句的行Q存入时数据库的工作表中,再徏立唯一索引以去掉重复行Q最后从q个临时表中计算l果。因此,实际q程没有利用id_no上烦引,q且完成旉q要受tempdb数据库性能的媄响?

  实践证明Q表的行数越多ぷ鞅淼男阅芫驮讲睿眘tuff?20000行时Q执行时间竟辑ֈ220U!q不如将or子句分开Q?

select count(*) from stuff where id_no=''0''
select count(*) from stuff where id_no=''1''


  得到两个l果Q再作一ơ加法合。因为每句都使用了烦引,执行旉只有3U,?20000行下Q时间也只有4U。或者,用更好的ҎQ写一个简单的存储q程Q?

create proc count_stuff as
declare @a int
declare @b int
declare @c int
declare @d char(10)
begin
select @a=count(*) from stuff where id_no=''0''
select @b=count(*) from stuff where id_no=''1''
end
select @c=@a+@b
select @d=convert(char(10),@c)
print @d


  直接出l果Q执行时间同上面一样快Q?

  ȝQ?br>
  可见Q所谓优化即where子句利用了烦引,不可优化卛_生了表扫描或额外开销?

  1.M对列的操作都导致表扫描Q它包括数据库函数、计表辑ּ{等Q查询时要尽可能操作移至等号右辏V?

  2.in、or子句怼使用工作表,使烦引失效;如果不生大量重复|可以考虑把子句拆开Q拆开的子句中应该包含索引?

  3.要善于用存储过E,它SQL变得更加灉|和高效?

  从以上这些例子可以看出,SQL优化的实质就是在l果正确的前提下Q用优化器可以识别的语句Q充份利用烦引,减少表扫描的I/Oơ数Q尽量避免表搜烦的发生。其实SQL的性能优化是一个复杂的q程Q上q这些只是在应用层次的一U体玎ͼ深入研究q会涉及数据库层的资源配|、网l层的流量控制以及操作系l层的M设计?



larryjava 2007-05-11 09:55 发表评论
]]>
վ֩ģ壺 ɫһ| ߹ۿëƬ| ޾ƷѹۿƵ| Ʒһģʽ| ޳avѿ| baoyu777Ƶ| þþӰԺ޾Ʒ| ˳߹ۿվƷ| Ƶ߹ۿ| ºձѹۿ | Ļѹۿַ| ۺľƷ| aaaƵѹۿ| Ʒ޸жƪ| һƬaƵѹۿ| ɫþƷƵ| 츾þþ| þþƷƵѲ| þþƷAVþþ| ˬִ̼߳Ƶ | ۺϹ˶¼| ƬվɫƬ| ޹ƷþþþϼС| ͼƬ| ɫwwwƷƵѿ| ˳վ߹ۿ| ŮˬƵ| Ƶ| 69˾ƷƵ| þù| ˾þô߽| ֻˬڵƵ| ѵȫһ¼| һ| avƬ߹ۿ| ͤͤѸ| ҹƬ߹ۿ| СƵ߲| ߹ۿ| 91Ƶѿ| ŮһһˬƵ|