7. 实现数据迁移的高可用性
通过以上测试实际上可以确认,对于可传输表空间,可以很容易从Oracle 9i向Oracle 10g迁移。那么这种方法对于可用性要求极高的环境进行数据迁移或数据库迁移具有极大的便利。
如果进行数据库升级,通常的方法是通过DBUA(Database Upgrade Assistant,Oracle 10g引入的新工具)进行,但是DBUA存在的问题在于,操作过程过长,而且如果升级过程中出现问题,数据文件可能不能重新被使用,这就需要从备份中进行恢复,这使得业务连续性要求高的企业很难采用这种方法进行升级。
另外一种常见的迁移的方法是通过逻辑导出导入(EXP/IMP),但是这种方法对于不断变化的数据无能为力,所以通常也不可行。
那么现在,可传输表空间就成了一个可以考虑的快速迁移或升级方法。
Oracle有一个小组,专注于设计高可用性架构的实现,以帮助用户最大限度的提高系统可用性,Oracle有一个专有名词用来命名这类技术-MAA(Maximum Availability Architecture ,MAA)。OTN上MAA部分有一个Amadeus公司的实践案例,通过可传输表空间从Oracle 9i向Oracle 10g实现快速数据迁移。
当然这种方法的使用要考虑的还有很多,通过各种技术和方法的结合使用才能最终的达到快速迁移的目标。
Amadeus公司的迁移是在同类型平台不同主机之间进行的,其实现步骤大致如下:
(1) 在升级主机安装Oracle 9i版本,并创建生产库的DataGuard数据库,这个工作可以在线进行,不影响主节点的工作。
(2) 在升级主机安装Oracle 10gR2数据库软件,创建数据库;此时升级主机上存在了2个数据库。
(3) 整理不能通过transport tablespace处理的内容,如sequence、synonyms、grants等。
(4) 在升级割接时间,将主库置为只读,将日志全部应用到备机,业务影响从此时开始。
(5) 将备机的数据文件通过可传输表空间迁移至Oracle 10gR2数据库,并创建sequencee、synonyms、grants等对象,检查验证。
(6) 如果没有问题,则即可将业务切换至新的Oracle 10gR2数据库运行,业务恢复正常运行。
在这个迁移过程中,如果迁移失败,那么直接读写打开主库即可恢复业务的正常运行,回退非常方便。
使用这种方法,业务影响仅发生在以上(4)~(6)步,在OTN的案例中,Amadeus公司在实际操作中,10分钟之内就将一个大型数据库迁移到Oracle 10gR2,这种方式是一种非常有新意的创新性应用。在熟悉了Oracle的各项技术之后,通过不断实践和探索,我们就能够不断发现充满价值的Oracle应用。
1.3.7 最后的脚本
以上脚本已经完成了主要的工作,剩下的是一些最后的维护工作。
这里还有两个脚本需要执行,首先执行的是postScripts.sql脚本,这个脚本主要对部分用户及部分数据库选件进行维护:
connect "SYS"/"&&sysPassword" as SYSDBA
set echo on
spool C:\oracle\admin\eygle\scripts\postScripts.log
@C:\oracle\10.2.0\rdbms\admin\dbmssml.sql;
execute dbms_datapump_utl.replace_default_dir;
commit;
connect "SYS"/"&&sysPassword" as SYSDBA
alter session set current_schema=ORDSYS;
@C:\oracle\10.2.0\ord\im\admin\ordlib.sql;
alter session set current_schema=SYS;
connect "SYS"/"&&sysPassword" as SYSDBA
connect "SYS"/"&&sysPassword" as SYSDBA
alter user CTXSYS account unlock identified by change_on_install;
connect "CTXSYS"/"change_on_install"
@C:\oracle\10.2.0\ctx\admin\defaults\dr0defdp.sql;
@C:\oracle\10.2.0\ctx\admin\defaults\dr0defin.sql "SIMPLIFIED CHINESE";
connect "SYS"/"&&sysPassword" as SYSDBA
execute dbms_swrf_internal.cleanup_database(cleanup_local => FALSE);
commit;
spool off
最后执行的脚本是postDBCreation.sql,在这个脚本中将创建spfile,解锁SYSMAN、DBSNMP用户,编译失效对象并配置DB Control:
connect "SYS"/"&&sysPassword" as SYSDBA
set echo on
spool C:\oracle\admin\eygle\scripts\postDBCreation.log
connect "SYS"/"&&sysPassword" as SYSDBA
set echo on
create spfile='C:\oracle\10.2.0/dbs/spfileeygle.ora'
FROM pfile='C:\oracle\admin\eygle\scripts\init.ora';
shutdown immediate;
connect "SYS"/"&&sysPassword" as SYSDBA
startup ;
alter user SYSMAN identified by "&&sysmanPassword" account unlock;
alter user DBSNMP identified by "&&dbsnmpPassword" account unlock;
select 'utl_recomp_begin: ' || to_char(sysdate, 'HH:MI:SS') from dual;
execute utl_recomp.recomp_serial();
select 'utl_recomp_end: ' || to_char(sysdate, 'HH:MI:SS') from dual;
host C:\oracle\10.2.0\bin\emca.bat -config dbcontrol db -silent -DB_UNIQUE_NAME eygle -PORT 1521 -EM_HOME C:\oracle\10.2.0 -LISTENER LISTENER -SERVICE_NAME eygle -SYS_PWD &&sysPassword -SID eygle -ORACLE_HOME C:\oracle\10.2.0 -DBSNMP_PWD &&dbsnmpPassword -HOST gqgai -LISTENER_OH C:\oracle\10.2.0 -LOG_FILE C:\oracle\admin\eygle\scripts\emConfig.log -SYSMAN_PWD &&sysmanPassword;
spool C:\oracle\admin\eygle\scripts\postDBCreation.log
exit;
看到在最后部分,通过emca.bat批处理文件,配置了DB Control,这里通过一条完整的命令快速地完成了DB Control的创建等工作,也可以通过手工方式对DB Control进行维护,关于这部分内容请参考"第2章 从OEM到iSQL*Plus"的内容。
此外需要注意的是以下几句命令:
select 'utl_recomp_begin: ' || to_char(sysdate, 'HH:MI:SS') from dual;
execute utl_recomp.recomp_serial();
select 'utl_recomp_end: ' || to_char(sysdate, 'HH:MI:SS') from dual;
在Oracle 9i的postDBCreation.sql的脚本中,这部分的内容如下:
@/opt/oracle/product/9.2.0/rdbms/admin/utlrp.sql;
其实两者是相同的,utlrp.sql中主体部分和Oracle 10g中是相同的:
@@utlrcmp.sql
execute utl_recomp.recomp_serial();
Rem =====================================================================
Rem Run component validation procedure
Rem =====================================================================
EXECUTE dbms_registry.validate_components;
Oracle在utlrp.sql脚本的注释中说得很明确:这是一个通用脚本,可以在任意时候运行以重新编译数据库失效对象。
通常我们会在Oracle的升级指导中看到这个脚本,Oracle强烈推荐在migration / upgrade / downgrade之后,通过运行此脚本编译失效对象。但是注意,此脚本需要用SQL*Plus以SYSDBA身份运行,并且当时数据库中最好不要有活动事物或DDL操作,否则极容易导致死锁的出现。
这样使用模板创建数据库就完成了。
| 广告合作:400-664-0084 全国热线:400-664-0084 Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号 珠峰网 版权所有 All Rights Reserved
|