数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Oracle数据库迁移几种方式


发布日期:2021年05月25日
 
Oracle数据库迁移几种方式
我们常常需要对数据进行迁移迁移到更加高级的主机上迁移到远程的机房上迁移到不同的平台下……

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中空间扩展时内部流程

上一篇:OracleUndoRedo通俗理解

下一篇:通过Oracle动态性能视图采集查询调优数