缩短Oracle数据库迁移过程中的停机时间(二)
用起来非常便利,如下所示:
命令如下:
imp sys/password file=structure.dmp constraints=y indexes=y full=y ignore=y \
show=y indexfile=indexes.sql
上面的例子对单独的和约束索引创建都产生了SQL 数据定义语言(DDL)命令(对于关键约束限制和唯一约束限制,一些索引也暗含被创建)。请注意参数show=y,它指定了不能对数据库做改变,导出文件 仅仅是从头至尾扫描一遍,其间发生的任何索引创建都被存储到使用indexfile选项指定的indexes.sql脚本中。
接下来,我们可以使用一个文本编辑器打开这个SQL脚本,然后用NOLOGGING代替LOGGING并对每个大索引创建命令添加PARALLEL 子句。我们也可以在脚本开始处使用更改会话命令来修改某些参数,比如sort_area_size 和 db_file_multiblock_read_count,这两个参数能极大地增加创建索引的速度(更多信息请参见数据库性能调优部分)。修改好以 后,使用sqlplus来运行该脚本。
命令如下:
sqlplus sys/password @indexes.sql
索引文件(indexfile)包含独立索引和外键约束或唯一性约束所需的索引,但是不包含约束限制定义本身。为了创建并激活这些约束限制,我们必须再次对structure.dmp运行导入过程,命令如下:
命令如下:
imp sys/password file=structure.dmp constraints=y indexes=n full=y ignore=y
在上面的命令中我们设置了indexes=n,因为它们在前面的步骤中已经被创建了。同时,因为所有所需的索引都已经存在,创建索引约束应该完成的非常快,由于无需对唯一键/主键创建索引
4.验证自从数据库结构导出后源数据库中没有对象定义被改变(于步骤2或步骤3同时进行)
* 查询上面所述的dba_segments并将任何新对象迁移到新数据库中去,如果合适的话(例如使用企业管理器或者Toad来析取单个对象的“数据定义语 言”)。不应该有很多新对象或者根本就不应该有新对象,因为数据库结构导出后由于程序服务器的配置就应该被冻结而不能改变。这个任务通常可以和数据迁移或 索引创建同时进行。
注意:假如你使用“直接载入”并且在相关联表上关闭所有索引的话,不应该产生任何巨大的回滚和重做。这也是为什么在数据载入过程中应关闭主键/惟一键约束限制的原因之一,因为它们都需要索引支持。