
本文将重点向您介绍如何利用飞康CDP恢复Oracle 11g 服务器及其数据库。同时,将帮助您进一步了解如何利用连续、实时的日志和定时的快照将数据简单、快速、精细的恢复到任意时间点。
当用户的Oracle 11g的磁盘或分区已经受到飞康CDP的保护,飞康CDP的DiskSafe将为用户提供多种数据恢复途径。用户可以将数据恢复到原始磁盘或是其它磁盘,创建系统和数据的副本也变得非常简单。然而,最好的恢复方法就是根据你的恢复对象进行恢复。下面将介绍几种典型的数据恢复场景和Oracle特定恢复的场景。
场景1: 恢复磁盘上的一个或多个文件
如果你不小心删除了磁盘上的一个文件,或者你需要从一些已经修改过的文件中找回一些旧的信息,最简单的恢复方法是加载一个包含了丢失的文件或是原始文件的快照视图。在文件被删除或是被修改之前的时间段产生的任何快照视图都可以被选择加载。加载了快照视图以后,只要将你需要的文件拷贝到你需要的位置就行了。
加载一个快照就是创建了一个单独的虚拟磁盘。加载的快照是镜像的精确视图,当快照创建的时候它就已经存在了。由于加载的快照由快照区里的当前镜像和变化数据组成,因此不再需要额外的磁盘空间。
下面的屏幕截图显示,在/01上加载的Oracle 磁盘sdb。
1. 列出当前的sdb快照并选择一个需要加载的快照做为TimeView。
2. 用CDP调取TimeView (下图):
#
3. 在当前磁盘中找出TimeView 并将其加载到服务器上:
4. 浏览TimeView并从中找到你丢失的数据,将其拷贝到需要的位置,然后卸载这个TimeView:
场景2: 恢复非系统盘或分区
这种情况的恢复与上一种场景的恢复非常相似:加载相应的TimeView,将整个磁盘或分区恢复到原始盘或是其它磁盘。
注意:如果将本地磁盘或分区恢复到一个新的磁盘,而这个磁盘的容量大于主磁盘,你必须手动的对新磁盘执行解除保护-再添加保护的动作,从而使新磁盘可以遵循已经设定的保护策略。
场景3: 恢复系统磁盘或分区
如果需要恢复的是常用于启动的系统磁盘或分区,可以利用DiskSafe恢复盘来完成。对于硬盘或是 *** 作系统出现故障,或者磁盘、 *** 作系统已经进行了修理或替换的情况,这种恢复方式非常有用。
一旦服务器从DiskSafe恢复盘进行启动,你可以访问CDP管理器,并通过CDP管理器上的镜像或选定的快照恢复整个磁盘或分区。数据可以被恢复到原始盘或是其它的磁盘。
场景4: 恢复Oracle数据库对象
如果数据库对象(表)发生损毁或删除,最简单的办法是利用Oracle备份服务器加载包含原始对象的快照视图进行恢复。打开数据库,从中导出原始对象并转存文件,最后将该文件导入到所运行的生产数据库中。
注意:Oracle 11g 具备回收站功能:如果你意外的删除了某个表,实际它只是被放入了回收站,你可以执行“撤消”命令将表找回。
场景5: 完整恢复Oracle数据库时间点
如果是由于磁盘故障引发一个或者多个数据文件丢失,你可能就需要整个数据库了。这种情况下,最佳的方式是加载故障前的最后一个快照,从而将数据恢复到新的磁盘。
然而,一个已经加载的快照并不能作为工作磁盘使用,因为当快照被卸载时,这个被加载的快照上所发生的所有变化都将会丢失。也就是说,你只能从加载的快照中复制Oracle 数据到生产磁盘。你的RTO将完全根据从TimeView (快照)向生产存储复制数据所需的时间而定。
如果你的数据库很大,你需要缩短RTO,利用CDP的复制功能是非常好的选择。利用CDP的复制功能,可以在本地或远程的服务器上为受保护磁盘保留一份视图拷贝。如果主站点的主磁盘发生故障,二级站点的复制磁盘可以立即被提升为主磁盘,并分配给Oracle服务器进行加载,数据库可以在几乎不停机的情况下立即恢复生产运行。数据库将处于完成最后一次完整复制时的状态。
如果用最后一次快照恢复数据库,那么这个快照从创建以后到磁盘故障发生之间所提交的交易将全部丢失。对于大多数企业来说,这都是不能接受的。有一种方法可以帮你恢复这部分数据丢失:通过CDP镜像,将快照创建以后到磁盘故障发生之间所提交的交易生成可回放的日志记录文件,你可以利用这些可回放的日志记录文件实现完整恢复。然后,用Oracle 的恢复命令找回需要的SCN就可以了。
1、Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出。2、设置deferred_segment_creation 参数为FALSE后,无论是空表还是非空表,都分配segment。
在sqlplus中,执行如下命令:
SQL>alter system set deferred_segment_creation=false
查看:
SQL>show parameter deferred_segment_creation
该值设置后只对后面新增的表产生作用,对之前建立的空表不起作用。
3、可以使用手工为空表分配Extent的方式,来解决导出之前建立的空表的问题。说明如下:
3.1 使用ALLOCATE EXTENT的说明
使用ALLOCATE EXTENT可以为数据库对象分配Extent。其语法如下:
-----------
ALLOCATE EXTENT { SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer }
-----------
可以针对数据表、索引、物化视图等手工分配Extent。
ALLOCATE EXTENT使用样例:
ALLOCATE EXTENT
ALLOCATE EXTENT(SIZE integer [K | M])
ALLOCATE EXTENT(DATAFILE 'filename')
ALLOCATE EXTENT(INSTANCE integer)
ALLOCATE EXTENT(SIZE integer [K | M] DATAFILE 'filename')
ALLOCATE EXTENT(SIZE integer [K | M] INSTANCE integer)
针对数据表 *** 作的完整语法如下:
-----------
ALTER TABLE [schema.]table_name ALLOCATE EXTENT [({ SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer})]
-----------
故,需要构建如下样子简单的SQL命令:
-----------
alter table aTabelName allocate extent
-----------
3.2 构建对空表分配空间的SQL命令,
查询当前用户下的所有空表(一个用户最好对应一个默认表空间)。命令如下:
-----------
SQL>select table_name from user_tables where NUM_ROWS=0
-----------
根据上述查询,可以构建针对空表分配空间的命令语句,如下:
-----------
SQL>Select 'alter table '||table_name||' allocate extent' from user_tables where num_rows=0
-----------
批量输出上述生成的SQL语句,建立C:\createsql.sql,其内容如下:
-----------
set heading off
set echo off
set feedback off
set termout on
spool C:\allocate.sql
Select 'alter table '||table_name||' allocate extent' from user_tables where num_rows=0
spool off
-----------
执行C:\createsql.sql,命令如下:
-----------
SQL>@ C:\createsql.sql
-----------
执行完毕后,得到C:\allocate.sql文件。
打开该文件会看到,已经得到对所有空表分配空间的命令SQL语句。
3.4 执行SQL命令,对空表分配空间:
执行C:\allocate.sql,命令如下:
-----------
SQL>@ C:\allocate.sql
-----------
执行完毕,表已更改。
3.4 此时执行exp命令,即可把包括空表在内的所有表,正常导出。
另外:Oracle11g中,对密码是大小写敏感的,即密码中的字母是区分大小写的。
在Oracle10g中及以前,密码中的字母大小写无所谓。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)