原文作者:阿兰·富勒
原文链接:
https://blog.dbi-services.com/important-dbca-parameter-if-you-plan-to-use-storage-snapshot-cloning-in-asm/
我目前正在处理一个客户项目是使用存储快照创建数据库克隆。优点是显而易见的,因为使用存储快照克隆不仅节省空间,而且与完整克隆相比速度也非常快。
这篇文章不是要详细解释怎么实现快照克隆技术,它指出在使用 dbca 创建源数据库时要考虑的重要一点。
简要概述如何使用 asm 完成快照克隆:
设置源数据库为备份模式
在存储级别创建整个 asm 磁盘组的快照
取消源数据库的备份模式
测试服务器上存在lun的快照
使用重命名实用程序重命名磁盘组
asm 以新名称挂载磁盘组
在 asm 中调整 db_unique_name
为数据库创建新的控制文件
使用open resetlogs打开数据库
我想在这里重点是“在 asm 中调整 db_unique_name”。例如,如果您在磁盘组 data上创建一个新db,这个db 的 asm 中的目录结构如下所示:
data/prod_site1
data/prod_site1/controlfile
data/prod_site1/datafile
data/prod_site1/onlinelog
data/prod_site1/tempfile
如果我们假设我们克隆的数据库应该命名为 test01,且我们已将 asm 中的磁盘组从 data重命名为 data_test,那么在挂载新磁盘组后,该磁盘组上的目录结构如下所示:
data_test/prod_site1
data_test/prod_site1/controlfile
data_test/prod_site1/datafile
data_test/prod_site1/onlinelog
data_test/prod_site1/tempfile
在我们用数据库名test01创建新的控制文件之前,我们必须在asm中将db_unique_name目录从prod_site1重命名为test01_site1。
在asm中没有mv命令,所以目录必须在asm实例上用sql语句进行调整。工作原理如下:
sql>
alter diskgroup data_test rename directory ' data_test/prod_site1' to ' data_test/test01_site1';
error at line 1:
ora-15032: not all alterations performed
ora-15177: cannot operate on system aliases
在这里有一个问题,在 asm 中有两种类型的目录。“系统生成(y)”和“手动创建(n)”。
如果我在 asmcmd 中查询目录,我会看到,我使用 dbca 创建的数据库具有“系统生成”名称。
asmcmd> ls -la
type redund striped time sys name
y asm/
y prod_site1/
当 oracle 创建目录时,它始终是系统生成的,而当在 asm 中使用 mkdir 手动创建时,它是“非系统生成的”。
您必须知道“系统生成的目录”永远不能重命名。这在 asm 中是不可能的,并且没有解决方法。
因为我们使用 dbca 创建了源数据库,所以目录 prod_site1 “系统生成”的,因此我们无法将数据文件的路径更改为我们的新名称 test01_site1。
一种可能性是添加新的控制文件并仍然用旧的 db_unique_name 作为路径。这样数据库可以被启动,如果您之后查询 v$datafile,仍然会在那里看到错误的db_unique_name。
为了纠正这个问题,我们可以强制在线移动数据文件,但缺点是我们在 asm 中复制了整个数据库,这正是我们想要通过快照克隆来防止的。
alter database move datafile {datafile_path} to ' data_test';
那么这个问题的m6米乐安卓版下载的解决方案是什么?
在创建源db (prod)时,我们必须确保dbca不会将目录创建为“系统生成的”,这样在克隆之后,我们就有可能在新的磁盘组上重命名它。
在dbca中有一个参数
-datafiledestination
如果在 dbca create database 语句期间显式设置此参数,在asm中创建的目录是“手动生成的”,因此可以稍后重命名。