﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-勤奋、严谨、求实、创新-文章分类-数据库</title><link>http://www.cnitblog.com/lionsir/category/303.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Sep 2011 08:07:12 GMT</lastBuildDate><pubDate>Wed, 28 Sep 2011 08:07:12 GMT</pubDate><ttl>60</ttl><item><title>用Linux完成Oracle自动物理备份</title><link>http://www.cnitblog.com/Lionsir/articles/907.html</link><dc:creator>葡萄</dc:creator><author>葡萄</author><pubDate>Tue, 12 Jul 2005 17:19:00 GMT</pubDate><guid>http://www.cnitblog.com/Lionsir/articles/907.html</guid><wfw:comment>http://www.cnitblog.com/Lionsir/comments/907.html</wfw:comment><comments>http://www.cnitblog.com/Lionsir/articles/907.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/Lionsir/comments/commentRss/907.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/Lionsir/services/trackbacks/907.html</trackback:ping><description><![CDATA[Oracle数据库提供了几种数据备份方法，但用得最多的还是使用exp进行逻辑备份，而物理备份（包括联机备份和脱机备份）过程用得并不多。其主要原因是物理备份过程比较复杂，不易掌握。本文以Oracle数据库在Linux下自动物理备份（脱机备份）的实现为例描述物理备份的操作步骤，希望能帮助更多的Oracle数据库管理员了解这一物理备份过程，避免不必要的数据丢失。 <BR><BR>　　本文的目标是通过执行一Shell脚本来完成Oracle数据库自动备份的全过程，而且能够在当前目录下生成其压缩文件。具体实现步骤如下： <BR><BR>1．以Oracle用户身份登录到Linux系统下。 <BR><BR>2．建立database.srcipt文件，以便生成备份数据库的一些参数信息并保存在文件database.parm中。 <BR><BR>　　这些信息对于以后恢复数据库具有重要的参考作用，所以在物理备份的过程中，需要保存这些信息，也可以把其他一些重要的信息写在这个脚本里。 <BR><BR>$vi database.srcipt <BR>spool database.parm <BR>--这是当前备份数据库的系统参数列表 <BR>select * from v$parameter; <BR>--这是当前备份数据库的字符集部分参数 <BR>select * from props$; <BR>--这是当前备份数据库数据文件存储位置及名称 <BR>select * from v$datafile; <BR>--这是当前备份数据库控制文件存储位置及名称 <BR>select * from v$controlfile; <BR>--这是当前备份数据库日志文件存储位置及名称 <BR>select * from v$logfile; <BR>--可以在这里添加其他一些重要信息 <BR>--开始生成备份shell文件，可参考backup.sh <BR>spool off <BR>spool backup.sh <BR>select 'cp '||name || ' backup/' from v$datafile ; <BR>select 'cp '||name || ' backup/' from v$controlfile ;<BR>select 'cp '||member || ' backup/' from v$logfile;<BR>spool off <BR>shutdown immediate <BR>exit <BR>!<BR><BR><BR><BR>3．修改上一步中生成的backup.sh文件，并执行它来完成数据库文件的操作系统备份。为清晰起见，将这段脚本命名为文件alterbackup.sh。 <BR><BR>$vi alterbackup.sh <BR>echo “该脚本完成把数据库数据文件、控制文件、日志文件的复制到当前目录的过程” <BR>cat backup.sh|grep ‘cp /’&gt;c.sh <BR>#该语句把backup.sh中所有以“cp /”开头的语句提取出来生成新的文件c.sh <BR>rm backup.sh <BR>mv c.sh backup.sh <BR>chmod +x backup.sh <BR>. backup.sh <BR>#注意：点号“.”与backup.sh之间有一空格<BR><BR><BR><BR>4．建立数据库启动脚本，以便完成备份之后启动数据库，将这段脚本命名为startup.script。 <BR><BR>$vi startup.script <BR>spool StartStatus.readme <BR>--开始启动数据库 <BR>startup <BR>--数据库启动完成，可以查看StartStatus.readme文件检查数据库启动情况 <BR>spool off <BR>exit <BR>!<BR><BR><BR><BR>5．为节省磁盘空间和复制到其他存储位置，建立Shell文件gzip.script来完成备份数据文件的压缩。注意生成备份文件时，在文件名中注明时间。 <BR><BR>$vi gzip.sh <BR>echo “开始进行备份文件的压缩过程” <BR>thedate=‘date + %Y.%m.%d.%H.%M’ <BR>#注意：字符串前后都有一个反引号，不是单引号 <BR>outfile=$thedate <BR>tar -cvf backup$outfile.tar backup/* <BR>#将备份到backup目录下的所有文件生成一档案文件 <BR>gzip backup$outfile.tar <BR>#把档案文件进行压缩，以节省硬盘空间 <BR>rm -R backup #删除那些没有压缩的文件<BR><BR><BR><BR>6．把上面第2步到第5步生成的内容组织成一个Shell文件begin.sh，但这之前还需要先运行以下命令： <BR><BR>$chmod +x alterbackup.sh <BR>$chmod +x gzip.sh <BR>$vi begin.sh <BR>echo “开始进行数据库的自动物理备份过程，该Shell将在当前目录下生成backup.gz文件，<BR>该文件中包含数据库的一些参数信息及数据库的物理文件……” <BR>mkdir backup <BR>sqlplus internal/oracle &lt; database.srcipt <BR>. alterbackup.sh <BR>sqlplus internal/oracle &lt; startup.script <BR>. gzip.sh <BR>echo “数据库自动进行物理备份过程结束，请在当前目录下检查backup.tar.gz”<BR><BR><BR><BR>7．增加数据库参数文件的备份语句。 <BR><BR>　　数据库参数文件通常存储在“ORACLE/ADMIN/数据库名/pfile/”目录下，其文件命名规则为“init+数据库名.ora”，数据库名缺省名称为orcl，可根据数据库安装名称来进行修改。如果不知道该文件存储在什么位置，可使用下面命令进行查找： <BR><BR>$find $ORACLE_HOME -name ‘initorcl.ora’<BR><BR><BR><BR>　　该语句可能显示出/u01/app/oracle/product/8.1.7/dbs/initorcl.ora，由于在Linux中有一种链接文件，所以要查看显示出的文件是不是链接文件，如果是，还需要进一步查看其原始文件。 <BR><BR>$ll /u01/app/oracle/product/8.1.7/dbs/initorcl.ora<BR><BR><BR><BR>　　本例中显示出该文件是一个链接文件，它指向/u01/app/oracle/admin/orcl/pfile/initorcl.ora。为此，可以修改第3步的alterbackup.sh，修改结果如下（粗体显示，该语句需要根据数据库安装情况进行修改）： <BR><BR>…… <BR>chmod +x backup.sh <BR>cp /u01/app/oracle/admin/orcl/pfile/initorcl.ora backup/initorcl.ora <BR>. backup.sh <BR>#注意：点号“.”与backup.sh之间有一空格<BR><BR><BR><BR>8．在准备进行备份时，先使用“ls -l（或ll）”命令检查当前目录下，此时应该有这样几个文件：alterbackup.Sh，begin.sh，database.script，gzip.sh，startup.script。 <BR><BR>　　此后，还应执行命令： <BR><BR>$chmod +x begin.sh<BR><BR><BR><BR>　　如果一切完成，就可以执行begin.sh来完成备份过程了: <BR><BR>. begin.sh <BR>#注意begin.sh与前面点号之前有一空格。<BR><BR><BR><BR>　　以后每次需要做备份时，只需运行begin.sh即可。这里也可以使用crontab自动完成按计划备份，有关如何使用crontab，请参考相关资料，也可在网上查询，本文不再做介绍。 <BR><BR>　　使用此方法进行物理备份过程，不仅备份了数据库的数据文件，也同时记录了数据库的一些重要信息（第2步的database.parm文件中），这对于以后恢复数据是非常重要的。最后要提醒读者注意的是，本文提供的方法要求有足够大的剩余磁盘空间（尽管最后只保留了备份文件的压缩文件），这个缺撼留给读者去弥补。<img src ="http://www.cnitblog.com/Lionsir/aggbug/907.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/Lionsir/" target="_blank">葡萄</a> 2005-07-13 01:19 <a href="http://www.cnitblog.com/Lionsir/articles/907.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>