How to create cow db using acfs snapshot

这篇文章介绍了如何在一个已经安装12c rac的虚拟机上,如何建立acfs文件系统,并且利用acfs snapshot刷一个COW(Copy-On-Write)库出来做测试库。

Highlight Step:

一、给虚拟机增加asm盘,以便建立acfs文件系统

1.创建共享acfs盘,共3个盘,每个盘3G大小:

2.将创建的asm盘attach到虚拟机ol6-121-rac1上

3.将这些共享盘设置为可共享的:

4.进linux系统,为新加的盘进行分区

5. 本文用到是udev的方式使用asm盘,没有使用asmlib。

6.获得上面的信息后,在两个节点的/etc/udev/rules.d/99-oracle-asmdevices.rules文件中,添加如下几行:

7.重启两个节点的udev服务,或者直接重启两个节点:

二、创建acfs文件系统

8. 在两个节点,创建acfs文件系统的mount point

9. 先检查可以用于新建diskgroup的disk

10. 新建diskgroup DG_ACFS

11. 设置compatible为12.1以上

12. 建立volumns

13. 检查设备名称:

14. 建立文件系统:

15. 将acfs文件系统注册到crs:

16. 将acfs文件系统mount到mount point上:

17. 检查状态:

三、在节点1创建数据库在acfs文件系统上。

18. 使用dbca创建一个数据库到acfs文件系统上。注意,storage type的类型要选择file system,并且选择上面建立的mount point处。

具体步骤略。

19. 检查创建好的db,我们这里测试用的db实例名叫acfsdb:

四、在节点1上运行dml的同时,生成snapshot

20. 我们创建snapshot的命令是用acfsutil,我们先来看看当前是没有snapshot的:

21. 我们先来试试创建一个只读(Read-Only, RO)的snapshot:

22. 注意,上述的snapshot的文件,就建立在了你的mount point下有个隐含目录 .ACFS 下:

23. 我们不妨再多建几个snapshot:

24. 可以看到已经建立了4个snapshot了。第一个是只读(RO),后面3个是读写(RW)。区别在于,用acfsutil创建的时候,是否加-w参数。否则,不加-w参数默认是只读的。

ACFS的snapshot功能很强大,不仅可以建立只读,读写,还能把只读和读写之间进行互相convert,另外,还能建立snapshot-of-snapshot,你在acfsutil时加-p参数指定父级snapshot即可。

五、利用上面生成的snapshot,在节点2上拉起来另外一个数据库。

25. 先在节点2上创建一个pfile,可以从节点1拷贝过来,不过有些地方需要修改一下:

记住,必须要加db_unique_name,不然,在一个cluster环境,即使你已经srvctl remove来database信息,但是加同样的instance的时候,还是会报错:

必须通过db_unique_name来解决。

26. 此时,应该是用读写(RW)的snapshot来启动的,如果是read only snapshot的话,不能启动到mount,因为文件只读。在alertlog中,你会看到如下报错:

27. 需要用读写的那个snapshot来启动,我们这边用第四个的snapshot来在节点2上启动:
注,此时pfile中控制文件已经改好成了asfsdb_snap04的那个。

28. 启动到mount后,我们将控制文件中的文件路径信息,也改成到acfsdb_snap04路径:

可以看到,我在一边做snapsnot,一边做dml insert sysdate,恢复出来的t1表的最后记录是15:15:33,也是我的snapshot的创建时间:

最后,再说一下,虽然我们可以snapshot主库,来做cow库,但是更好的一个方法是对dataguard的灾备库来做snapshot,从而刷出来一个cow库。此时也是copy-on-write,且对主库没有丝毫影响。做成架构图,如下:

相关文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据