我们常常需要对数据进行迁移
迁移到更加高级的主机上
迁移到远程的机房上
迁移到不同的平台下……
一exp/imp
这也算是最常用最简单的方法了一般是基于应用的owner级做导出导入
操作方法为在新库建立好owner和表空间停老库的应用在老库做exp user/pwd owner=XXX file=exp_xxxdmp log=exp_xxxlog buffer=传dmp文件到新库在新库做imp user/pwd fromuser=XXX touser=XXX file=exp_xxxdmp log=imp_xxxlog ignore=y
优缺点优点是可以跨平台使用;缺点是停机时间长停机时间为从exp到网络传输到新库再加上imp的时间
二存储迁移
这种情况下数据文件控制文件日志文件spfile都在存储上(一般情况下是裸设备)我们可以直接把存储挂到新机器上然后在新机器上启动数据库
操作方法将老库的pfile(因为里面有指向裸设备的spfile链接)tnsnamesoralistenerora密码文件传到新库的对应位置将存储切至新机或者用文件拷贝或dd的方式复制数据文件启动数据库
优缺点优点是该迁移方式非常简单主要的工作是主机工程师的工作dba只需配合即可停机时间为当库切存储起库的时间缺点是要求新老库都是同一平台是相同的数据库版本
三利用data guard迁移
用dg我们不仅可以用来做容灾物理的dg我们还可以作为迁移的方式
操作方法可见或者edatafile/或者其他相关网文注意switch over之后可以将dg拆掉去掉log_archive_dest_FAL_SERVERFAL_CLIENTstandby_file_management参数另外还要注意如果用rman做dg注意手工添加tempfile
优缺点优点是停机时间短停机时间为switch over的时间缺点主机必须双份存储必须双份
四用rman做迁移
rman比较适合于跨文件系统的迁移如同平台下的不同文件系统
操作方法
停第三方的归档备份如legato或dp
backup数据库
在一次周末的课程试验中频繁的看到 Data file init write 等待事件
在这里做一点记录说明以下是来自跟蹤文件的记录信息
以下是引用片段
WAIT#:nam=Datafileinitwriteela=count=intr=timeout=obj#=tim=
WAIT#:nam=Datafileinitwriteela=count=intr=timeout=obj#=tim=
WAIT#:nam=Datafileinitwriteela=count=intr=timeout=obj#=tim=
WAIT#:nam=Datafileinitwriteela=count=intr=timeout=obj#=tim=
WAIT#:nam=Datafileinitwriteela=count=intr=timeout=obj#=tim=
WAIT#:nam=Datafileinitwriteela=count=intr=timeout=obj#=tim=
WAIT#:nam=Datafileinitwriteela=count=intr=timeout=obj#=tim=
WAIT#:nam=Datafileinitwriteela=count=intr=timeout=obj#=tim=
WAIT#:nam=Datafileinitwriteela=count=intr=timeout=obj#=tim=
WAIT#:nam=Datafileinitwriteela=count=intr=timeout=obj#=tim=
WAIT#:nam=Datafileinitwriteela=count=intr=timeout=obj#=tim=
WAIT#:nam=Datafileinitwriteela=count=intr=timeout=obj#=tim=
WAIT#:nam=Datafileinitwriteela=count=intr=timeout=obj#=tim=
WAIT#:nam=Datafileinitwriteela=count=intr=timeout=obj#=tim=
测试数据库是Oracleg 实际上这个等待事件也是从Oracle g开始引入的用来标识表空间或数据文件扩展时的等待
Oracle 需要将系统块格式化为Oracle数据块然后才能提供数据库使用
在这个流程处理中Oracle经过如下三个步骤
扩展数据文件
select file# from file$ where ts#=:
更新用户空间限额
update tsq$ set blocks=:maxblocks=:grantor#=:priv=:priv=:priv=: where ts#=: and user#=:
扩展数据段
update seg$ set type#=:blocks=:extents=:minexts=:maxexts=:extsize=:extpct=:user#=:iniexts=:lists=decode(: NULL :)groups=decode(: NULL :) cachehint=: hwmincr=: spare=DECODE(:NULL:)scanhint=: where ts#=: and file#=: and block#=:
这就是Oracleg中空间扩展时内部流程