excl拷贝出去,如何恢复计算excl公式大全

保持登录。
单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.
在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。
所有提交的信息确保安全。
当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。
单击提交则表示您同意developerWorks
的条款和条件。 .
所有提交的信息确保安全。
developerWorks 社区:
我的概要信息
选择语言:
对于传统的操作系统来说,普通的 I/O 操作一般会被内核缓存,这种 I/O 被称作缓存 I/O。本文所介绍的文件访问机制不经过操作系统内核的缓存,数据直接在磁盘和应用程序地址空间进行传输,所以该文件访问的机制称作为直接 I/O。Linux 中就提供了这样一种文件访问机制,对于那种将 I/O 缓存存放在用户地址空间的应用程序来说,直接 I/O 是一种非常高效的手段。本文将基于 2.6.18 版本的内核来讨论 Linux 中直接 I/O 的技术的设计与实现。
, 软件工程师, IBM
黄晓晨,IBM system Z 自动化技术支持软件工程师。
直接 I/O 的动机在介绍直接 I/O 之前,这一小节先介绍一下为什么会出现直接 I/O 这种机制,即传统的 I/O 操作存在哪些缺点。什么是缓存 I/O (Buffered I/O)缓存 I/O 又被称作标准 I/O,大多数文件系统的默认 I/O 操作都是缓存 I/O。在 Linux 的缓存 I/O 机制中,操作系统会将 I/O 的数据缓存在文件系统的页缓存( page cache )中,也就是说,数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。缓存 I/O 有以下这些优点:
缓存 I/O 使用了操作系统内核缓冲区,在一定程度上分离了应用程序空间和实际的物理设备。
缓存 I/O 可以减少读盘的次数,从而提高性能。当应用程序尝试读取某块数据的时候,如果这块数据已经存放在了页缓存中,那么这块数据就可以立即返回给应用程序,而不需要经过实际的物理读盘操作。当然,如果数据在应用程序读取之前并未被存放在页缓存中,那么就需要先将数据从磁盘读到页缓存中去。对于写操作来说,应用程序也会将数据先写到页缓存中去,数据是否被立即写到磁盘上去取决于应用程序所采用的写操作机制:如果用户采用的是同步写机制( synchronous writes ), 那么数据会立即被写回到磁盘上,应用程序会一直等到数据被写完为止;如果用户采用的是延迟写机制( deferred writes ),那么应用程序就完全不需要等到数据全部被写回到磁盘,数据只要被写到页缓存中去就可以了。在延迟写机制的情况下,操作系统会定期地将放在页缓存中的数据刷到磁盘上。与异步写机制( asynchronous writes )不同的是,延迟写机制在数据完全写到磁盘上的时候不会通知应用程序,而异步写机制在数据完全写到磁盘上的时候是会返回给应用程序的。所以延迟写机制本身是存在数据丢失的风险的,而异步写机制则不会有这方面的担心。缓存 I/O 的缺点在缓存 I/O 机制中,DMA 方式可以将数据直接从磁盘读到页缓存中,或者将数据从页缓存直接写回到磁盘上,而不能直接在应用程序地址空间和磁盘之间进行数据传输,这样的话,数据在传输过程中需要在应用程序地址空间和页缓存之间进行多次数据拷贝操作,这些数据拷贝操作所带来的 CPU 以及内存开销是非常大的。对于某些特殊的应用程序来说,避开操作系统内核缓冲区而直接在应用程序地址空间和磁盘之间传输数据会比使用操作系统内核缓冲区获取更好的性能,下边这一小节中提到的自缓存应用程序就是其中的一种。自缓存应用程序( self-caching applications)对于某些应用程序来说,它会有它自己的数据缓存机制,比如,它会将数据缓存在应用程序地址空间,这类应用程序完全不需要使用操作系统内核中的高速缓冲存储器,这类应用程序就被称作是自缓存应用程序( self-caching applications )。数据库管理系统是这类应用程序的一个代表。自缓存应用程序倾向于使用数据的逻辑表达方式,而非物理表达方式;当系统内存较低的时候,自缓存应用程序会让这种数据的逻辑缓存被换出,而并非是磁盘上实际的数据被换出。自缓存应用程序对要操作的数据的语义了如指掌,所以它可以采用更加高效的缓存替换算法。自缓存应用程序有可能会在多台主机之间共享一块内存,那么自缓存应用程序就需要提供一种能够有效地将用户地址空间的缓存数据置为无效的机制,从而确保应用程序地址空间缓存数据的一致性。对于自缓存应用程序来说,缓存 I/O 明显不是一个好的选择。由此引出我们这篇文章着重要介绍的 Linux 中的直接 I/O 技术。Linux 中的直接 I/O 技术非常适用于自缓存这类应用程序,该技术省略掉缓存 I/O 技术中操作系统内核缓冲区的使用,数据直接在应用程序地址空间和磁盘之间进行传输,从而使得自缓存应用程序可以省略掉复杂的系统级别的缓存结构,而执行程序自己定义的数据读写管理,从而降低系统级别的管理对应用程序访问数据的影响。在下面一节中,我们会着重介绍 Linux 中提供的直接 I/O 机制的设计与实现,该机制为自缓存应用程序提供了很好的支持。Linux 2.6 中的直接 I/O 技术Linux 2.6 中提供的几种文件访问方式所有的 I/O 操作都是通过读文件或者写文件来完成的。在这里,我们把所有的外围设备,包括键盘和显示器,都看成是文件系统中的文件。访问文件的方法多种多样,这里列出下边这几种 Linux 2.6 中支持的文件访问方式。直接 I/O 技术的特点直接 I/O 的优点
直接 I/O 最主要的优点就是通过减少操作系统内核缓冲区和应用程序地址空间的数据拷贝次数,降低了对文件读取和写入时所带来的 CPU 的使用以及内存带宽的占用。这对于某些特殊的应用程序,比如自缓存应用程序来说,不失为一种好的选择。如果要传输的数据量很大,使用直接 I/O 的方式进行数据传输,而不需要操作系统内核地址空间拷贝数据操作的参与,这将会大大提高性能。直接 I/O 潜在可能存在的问题
直接 I/O 并不一定总能提供令人满意的性能上的飞跃。设置直接 I/O 的开销非常大,而直接 I/O 又不能提供缓存 I/O 的优势。缓存 I/O 的读操作可以从高速缓冲存储器中获取数据,而直接 I/O 的读数据操作会造成磁盘的同步读,这会带来性能上的差异 , 并且导致进程需要较长的时间才能执行完;对于写数据操作来说,使用直接 I/O 需要 write() 系统调用同步执行,否则应用程序将会不知道什么时候才能够再次使用它的 I/O 缓冲区。与直接 I/O 读操作类似的是,直接 I/O 写操作也会导致应用程序关闭缓慢。所以,应用程序使用直接 I/O 进行数据传输的时候通常会和使用异步 I/O 结合使用。总结Linux 中的直接 I/O 访问文件方式可以减少 CPU 的使用率以及内存带宽的占用,但是直接 I/O 有时候也会对性能产生负面影响。所以在使用直接 I/O 之前一定要对应用程序有一个很清醒的认识,只有在确定了设置缓冲 I/O 的开销非常巨大的情况下,才考虑使用直接 I/O。直接 I/O 经常需要跟异步 I/O 结合起来使用,本文对异步 I/O 没有作详细介绍,有兴趣的读者可以参看 Linux 2.6 中相关的文档介绍。
参考资料 关于数据库管理系统使用直接 I/O 进行性能调优请参考 developerWorks 上的文章 。在 Understanding the Linux Kernel(3rdEdition) 中,有关于 Linux 中直接  I/O  的介绍。上可以找到 Linux 上零拷贝技术中关于用户地址空间访问技术的介绍。Linux 内核源代码中包含了直接 I/O 的具体实现,本文中引用的内核代码来自于 2.6.18.1 版本的内核。Linux 内核情景分析 ( 上 ) 一书的文件系统一章详细描述了 Linux 中文件系统调用。 在
寻找为 Linux 开发人员(包括 )准备的更多参考资料,查阅我们 。 在 developerWorks 上查阅所有
和 。 随时关注 developerWorks 和。 欢迎加入 。
developerWorks: 登录
标有星(*)号的字段是必填字段。
保持登录。
单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件。
在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。
所有提交的信息确保安全。
选择您的昵称
当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。昵称长度在 3 至 31 个字符之间。
您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。
标有星(*)号的字段是必填字段。
(昵称长度在 3 至 31 个字符之间)
单击提交则表示您同意developerWorks 的条款和条件。 .
所有提交的信息确保安全。
IBM PureSystems(TM) 系列解决方案是一个专家集成系统
通过学习路线图系统掌握软件开发技能
软件下载、试用版及云计算
static.content.url=/developerworks/js/artrating/SITE_ID=10Zone=LinuxArticleID=607900ArticleTitle=Linux 中直接 I/O 机制的介绍publish-date=新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
空间积分0 信誉积分110 UID阅读权限10积分114帖子精华可用积分116 专家积分0 在线时间19 小时注册时间最后登录
白手起家, 积分 114, 距离下一级还需 86 积分
帖子主题精华可用积分116 专家积分0 在线时间19 小时注册时间最后登录
论坛徽章:0
本帖最后由 帅哥露小缝 于
23:41 编辑
数据库本身有3个控制文件的,有次出现数据库关闭后不能启动了:然后有人修改spfile文件来启动数据库,control_files只留了一个控制文件.后来将spfile文件的control_files恢复成3个控制文件的,在打开数据库时,就报ORA-00214:错误,其中一个控制文件和其他两个控制文件版本信息不一致.本来想通过拷贝覆盖的方式来恢复,可是控制文件放在裸设备上的,没办法直接拷贝,除了重建控制文件,还有什么法子?
因为那一个控制文件是可用的,如果编辑spfile,只保留一个控制文件,数据库是可以打开的,所以只要能从这一个控制文件恢复另外另外两个控制文件就可以了.
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
空间积分0 信誉积分110 UID阅读权限10积分114帖子精华可用积分116 专家积分0 在线时间19 小时注册时间最后登录
白手起家, 积分 114, 距离下一级还需 86 积分
帖子主题精华可用积分116 专家积分0 在线时间19 小时注册时间最后登录
论坛徽章:0
用dd if=ctl_1 of=ctl_2的方法也不行,命令执行后,就死在那儿不动了,最后只好ctrl ^C结束
你问哥有什么招?灵犀一指帅到爆,不服就单挑
空间积分0 信誉积分110 UID阅读权限10积分114帖子精华可用积分116 专家积分0 在线时间19 小时注册时间最后登录
白手起家, 积分 114, 距离下一级还需 86 积分
帖子主题精华可用积分116 专家积分0 在线时间19 小时注册时间最后登录
论坛徽章:0
查了一下:可能是dd拷贝的方式不对:不同的UNIX对裸设备的管理不完全相同,特别要注意的是某些UNIX在每个裸设备的头部要保留一定的空间,应用程序在使用裸设备时不可以覆盖这一部分,否则会对裸设备造成损坏。所以一个裸设备的实际可用空间是分配给裸设备的空间再减去这部分操作系统保留空间。下面是常用UNIX的OS Reserved Size列表:
UNIX     OS Reserved Size
------------ & && &&&----------------
SUN Solaris        0
HP-UX          0
IBM AIX         4k
Tru64 UNIX       64k
Linux          0
UNIX上读写裸设备不能使用cp, cpio, tar等命令,必须用dd,下面是几个dd常用参数的简单说明,更详细的信息请参考UNIX使用手册或用命令man dd。
dd [ operand=value ... ]
if=file 指定输入文件,缺省值是标准输入
of=file 指定输出文件,缺省值是标准输出
bs=n 设置输入和输出的块大小为n字节,也可以用“k”作单位
skip=n 在拷贝之前跳过n个输入块,缺省值是0
seek=n 在拷贝之前从输出文件首部跳过n块,缺省值是0
count=n 指定拷贝的块数,缺省拷贝到输入文件结束
从文件系统迁移到裸设备时,按下表公式确定dd的参数
& && & | OS_RESERVED_SIZE&0& && & | OS_RESERVED_SIZE=0
----------+------------------------------------------+---------------------------------
bs& & | OS_RESERVED_SIZE& && && &|&&1024k or larger
seek&&|&&1& && && && && && && && &&&|&&0
从裸设备迁移到文件系统时,按下表公式确定dd的参数,min表示二者之中取较小的
& && & | OS_RESERVED_SIZE&0& && && && && &&&| OS_RESERVED_SIZE=0
----------+---------------------------------------------------------+------------------
bs& &&&| min(db_block_size,OS_RESERVED_SIZE) |&&db_block_size
skip& &|&&OS_RESERVED_SIZE /bs& && && && && &|&&0
count&&|&&file_size /bs& && && && && && && && && &|&&file_size /bs复制代码数据库经常使用在裸设备上面,因为这样对数据库来说,绕过OS的cache达到连续的读写性能会更好,正因为这样,我们会经常有需求,需要将数据文件从锣设备拷贝到文件系统或者是从文件系统拷贝到裸设备。
1、使用dd进行拷贝
dd可以实现从裸设备到文件系统或者是文件系统到锣设备的拷贝,但是使用dd拷贝的时候,要注意裸设备的头部保留大小,下面是常用UNIX的OS Reserved Size列表:
代码:--------------------------------------------------------------------------------
UNIX     OS Reserved Size
------------ ----------------
SUN Solaris     0
HP-UX       0
IBM AIX      4k
Tru64 UNIX     64k
Linux        0
.--------------------------------------------------------------------------------
注意:在aix中,如果使用big VG,并且使用-O T创建的lv,是没有4k大小的头部保留区域的。
然后就是要确定dd的count数目,在从裸设备拷贝到文件系统的时候可以用到,假定数据文件的块大小为8K的话,count数目可以认为是 dba_data_files中的blocks加1,这是因为ORACLE建立DATAFILE时,在命令中SIZE指定的大小之外,还要在文件头另加一个BLOCK,叫作“Oracle OS Header Block”,里面保存有这个文件的逻辑块大小和文件块数等信息。这一点并不是在 RAW DEVICE上建DATAFILE特有的,如果你在文件系统上建一个DATAFILE,指定SIZE 1000k的话,你用ls -l或dir命令看到的文件大小将是1008k (DB_BLOCK_SIZE=8K)。如
代码:--------------------------------------------------------------------------------
SQL&SELECT bytes, blocks, bytes/blocks db_block_size, bytes+bytes/blocks file_size
FROM dba_data_files WHERE file_name=''/dev/rlv_data'';
BYTES  BLOCKS  DB_BLOCK_SIZE FILE_SIZE
----------& &&&--------& && &&&-------------& && && & ---------
4194304  512    8192     & & 4202496
.--------------------------------------------------------------------------------
所以,从裸设备dd到文件系统的命令为:
代码:--------------------------------------------------------------------------------
AIX$ dd if=/dev/rlv_data f=/u01/oradata/test.dbf bs=4k skip=1 count=1026
1026+0 records in
1026+0 records out
Tru64$ dd if=/dev/rlv_data f=/u01/oradata/test.dbf bs=8k skip=8 count=513
513+0 records in
513+0 records out
Other$ dd if=/dev/rlv_data f=/u01/oradata/test.dbf bs=8k count=513
513+0 records in
513+0 records out
.--------------------------------------------------------------------------------
与此对应的从文件系统到裸设备的命令为:
代码:--------------------------------------------------------------------------------
AIX$ dd if=/u01/oradata/test.dbf f=/dev/rlv_data bs=4k seek=1
1026+0 records in
1026+0 records out
Tru64$ dd if=/u01/oradata/test.dbf f=/dev/rlv_data bs=64k seek=1
64+1 records in
64+1 records out
Other$ dd if=/u01/oradata/test.dbf f=/dev/rlv_data bs=1024k
4+1 records in
4+1 records out
.--------------------------------------------------------------------------------
从文件系统到裸设备可以不指定count数目,但是必须保证裸设备大小大于或等于文件大小+一个数据块大小+保留空间大小(RAW DEVICE SIZE&= BD_FILE_SIZE + OS_RESERVED_SIZE + DB_BLOCK_SIZE)
注意,如果aix没有头部保留区域的big vg的lv,可以参考other的命令(第三个命令)。
还可以直接用rman来拷贝:
使用rman来进行拷贝
使用rman来拷贝数据文件相对就简单多了,可以用Rman 来轻松搞定裸设备/文件系统之间数据文件的迁移。在传统方法里面,我们必须对于每个 Unix 不同的Block 大小,OS 卷管理的overhead 的值作计算,才能非常小心的用dd 来做这些拷贝和移动,但是现在在Rman 的帮助下,我们可以完全忽略这些不同的地方,在所有Unix 平台/NT 平台上直接在Oracle 内部实现这种数据。
如,从文件系统拷贝到裸设备
代码:--------------------------------------------------------------------------------
rman&sql ''alter tablespace test offline'';
rman&copy datafile ''/u01/test/datafile/test01.dbf'' to ''/dev/rlvorarbs'';
.--------------------------------------------------------------------------------
从裸设备拷贝到文件系统
代码:--------------------------------------------------------------------------------
rman&sql ''alter tablespace test offline'';
rman&copy datafile ''/dev/rlvrawtest'' to ''/u01/test/datafile/test01.dbf'';
.--------------------------------------------------------------------------------
值得注意的是,rman拷贝的一方必须是数据库,因为rman只有连接到数据库才能进行拷贝,另外,以上的offline不是必须的,但是,如果想要一致性的文件,则需要加入offline关键字。
在数据库的迁移方面,我们可以采用rman把文件从数据库中拷贝到文件系统,然后从文件系统dd到新的数据库;或者是采用rman备份,把备份restore到新的数据库即可。
如果仅仅是在数据库内部进行数据文件的迁移(换位置),都可以单独用dd或者rman完成,但是文件迁移完成后,别忘记用如下命令更新控制文件:
代码:--------------------------------------------------------------------------------
SQL& alter database rename file ''old file'' to ''new file'';
.--------------------------------------------------------------------------------
这里的更详细一些:
利用dd命令实现raw db到file系统db的转换!
特别需要主要的就是要清楚的知道各类文件(ctl,dbf,redo)文件头占用了几个block,当然还要知道各类文件他们的block的大小和单位!
下面文件raw__convert_fs.sql 中记录的是一个raw db到file系统db的大致过程!
[oracle@xys orcl]$ more raw_convert_fs.sql
SQL& @ dbf.sql
FILE_NAME BYTES TABLESPACE BLOCKS BYTES+BYTES/BLOCKS
---------------- ---------- ---------- ---------- ------------------
/dev/raw/raw1
SYSTEM 992
/dev/raw/raw3
UNDOTBS1 592
/dev/raw/raw2
SYSAUX 312
/dev/raw/raw6 5242880 USERS 640 5251072
/dev/raw/raw14 5242880 TRANS 640 5251072
SQL& ! dd if=/dev/raw/raw14 of=trans.dbf bs=8k count=641
SQL& spool raw_convert_fs.sql append
SQL& ! dd if=/dev/raw/raw6 of=users01.dbf bs=8k count=641
SQL& ! dd if=/dev/raw/raw2 of=sysaux01.dbf bs=8k count=15361
SQL& @ dbf.sql
FILE_NAME BYTES TABLESPACE BLOCKS BYTES+BYTES/BLOCKS
---------------- ---------- ---------- ---------- ------------------
/dev/raw/raw1
SYSTEM 992
/dev/raw/raw3
UNDOTBS1 592
/dev/raw/raw2
SYSAUX 312
/dev/raw/raw6 5242880 USERS 640 5251072
/dev/raw/raw14 5242880 TRANS 640 5251072
SQL& ! dd if=/dev/raw/raw3 of=undotbs01.dbf bs=8k count=19201
SQL& ! dd if=/dev/raw/raw1 of=system01.dbf bs=8k count=38401
SQL& desc v$
Name Null? Type
----------------------------------------- -------- ----------------------------
STATUS VARCHAR2(7)
NAME VARCHAR2(513)
IS_RECOVERY_DEST_FILE VARCHAR2(3)
BLOCK_SIZE NUMBER
FILE_SIZE_BLKS NUMBER
SQL& select name , block_size , file_size_blks from v$
--------------------------------------------------------------------------------
BLOCK_SIZE FILE_SIZE_BLKS
---------- --------------
/dev/raw/raw7
/dev/raw/raw8
SQL& col name format a20
SQL& select name , block_size , file_size_blks from v$
NAME BLOCK_SIZE FILE_SIZE_BLKS
-------------------- ---------- --------------
/dev/raw/raw7
/dev/raw/raw8
SQL& ! dd if=/dev/raw/raw7 of=control01.ctl bs=16k count=430
SQL& ! dd if=/dev/raw/raw8 of=control02.ctl bs=16k count=430
SQL& host pwd
SQL& host pwd ls -l
SQL& host ls -l
SQL& desc v$
Name Null? Type
----------------------------------------- -------- ----------------------------
GROUP# NUMBER
STATUS VARCHAR2(7)
TYPE VARCHAR2(7)
MEMBER VARCHAR2(513)
IS_RECOVERY_DEST_FILE VARCHAR2(3)
SQL& col member format a20
SQL& select member , bytes/512 from v$
select member , bytes/512 from v$logfile
ERROR at line 1:
ORA-00904: &BYTES&: invalid identifier
SQL& select member from v$
--------------------
/dev/raw/raw9
/dev/raw/raw10
/dev/raw/raw11
SQL& select bytes/512 from v$
----------
SQL& select bytes/ from v$
--------------
SQL& select distinct block_size from v$archived_
BLOCK_SIZE
----------
SQL& ! dd if=/dev/raw/raw9 of=redo01.log bs=512k count=20
SQL& select member from v$
--------------------
/dev/raw/raw9
/dev/raw/raw10
/dev/raw/raw11
SQL& ! dd if=/dev/raw/raw10 of=redo02.log bs=512k count=20
SQL& ! dd if=/dev/raw/raw11 of=redo03.log bs=512k count=20
File created.
--=============================
raw db下各类文件如下:
[oracle@xys orcl]$ sqlplus sys/system@test as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sat Aug 2 22:40:40 2008
Copyright (c) , Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL& col file_name fromat a50
SP2-0158: unknown COLUMN option &fromat&
SQL& col file_name format a50
SQL& select file_name from dba_data_
--------------------------------------------------
/opt/app/oracle/oradata/orcl/system01.dbf
/opt/app/oracle/oradata/orcl/undotbs01.dbf
/opt/app/oracle/oradata/orcl/sysaux01.dbf
/opt/app/oracle/oradata/orcl/users01.dbf
/opt/app/oracle/oradata/orcl/trans.dbf
SQL& select name from v$
--------------------------------------------------------------------------------
/opt/app/oracle/oradata/orcl/control01.ctl
/opt/app/oracle/oradata/orcl/control02.ctl
SQL& select member from v$
--------------------------------------------------------------------------------
/opt/app/oracle/oradata/orcl/redo01.log
/opt/app/oracle/oradata/orcl/redo02.log
/opt/app/oracle/oradata/orcl/redo03.log
转化之后db_name并没有发生变化,因此要想在同一台os上启动转化后的db,需要创建bdump,cdump,udmp等各类文件以及需要编辑参数文件创建口令文件。
转换为文件系统 db各类文件如下:
SQL& connect sys/system@orcl as sysdba
Connected.
SQL& col file_name format a50
SQL& select file_name from dba_data_
--------------------------------------------------
/opt/app/oracle/oradata/orcl/system01.dbf
/opt/app/oracle/oradata/orcl/undotbs01.dbf
/opt/app/oracle/oradata/orcl/sysaux01.dbf
/opt/app/oracle/oradata/orcl/users01.dbf
/opt/app/oracle/oradata/orcl/trans.dbf
SQL& select name from v$
--------------------------------------------------------------------------------
/opt/app/oracle/oradata/orcl/control01.ctl
/opt/app/oracle/oradata/orcl/control02.ctl
SQL& select member from v$
--------------------------------------------------------------------------------
/opt/app/oracle/oradata/orcl/redo01.log
/opt/app/oracle/oradata/orcl/redo02.log
/opt/app/oracle/oradata/orcl/redo03.log
空间积分0 信誉积分110 UID阅读权限10积分114帖子精华可用积分116 专家积分0 在线时间19 小时注册时间最后登录
白手起家, 积分 114, 距离下一级还需 86 积分
帖子主题精华可用积分116 专家积分0 在线时间19 小时注册时间最后登录
论坛徽章:0
很晚了,不搞了,明天再恢复吧,恢复完了,再来报告一下结果
你问哥有什么招?灵犀一指帅到爆,不服就单挑
空间积分0 信誉积分110 UID阅读权限10积分114帖子精华可用积分116 专家积分0 在线时间19 小时注册时间最后登录
白手起家, 积分 114, 距离下一级还需 86 积分
帖子主题精华可用积分116 专家积分0 在线时间19 小时注册时间最后登录
论坛徽章:0
本帖最后由 帅哥露小缝 于
19:57 编辑
数据库今天恢复了,嘿嘿,恢复方法如下:当前有三个控制文件,/dev/raw/raw5,/dev/raw/raw6,/dev/raw/raw7,控制文件/dev/raw/raw5版本与其他两个控制文件版本不一致,/dev/raw/raw5与当前检查点信息是一致的,所以昨天可以先用/dev/raw/raw5启动数据库.
今天上班后,用上面帖子中的方法,查询控制文件的信息:select name , block_size , file_size_blks from v$
显示 block_size , file_size_blks,结果为/dev/raw/raw5,
然后关闭数据库,执行dd if=/dev/raw/raw5 of=/dev/raw/raw6 bs=16k count=614和dd if=/dev/raw/raw5 of=/dev/raw/raw7 bs=16k count=614,重新将/dev/raw/raw6,/dev/raw/raw7加入到启动参数中,启动数据库正常了
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处}

我要回帖

更多关于 excl公式大全 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信