数据库

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

Oracle10g同字节序跨平台迁移


发布日期:2022年09月09日
 
Oracle10g同字节序跨平台迁移

在Oracleg中同字节序跨平台的文件头信息Oracle会自动改写不再需要转换

我们看以下测试

[oracle@danaly oradata]$ sqlplus / as sysdba

SQL*Plus: Release Production on Thu Jul ::

Copyright (c) Oracle All rights reserved

Connected to:

Oracle Database g Enterprise Edition Release Production

With the Partitioning Oracle Label Security OLAP and Data Mining Scoring Engine options

SQL> alter database mount;

Database altered

SQL> alter database open;

Database altered

SQL> select name from v$datafile;

NAME

/opt/oracle/oradata/eygle/EYGLE/datafile/o_mf_system_tcxns_dbf

/opt/oracle/oradata/eygle/EYGLE/datafile/o_mf_undotbs_tcmb_dbf

/opt/oracle/oradata/eygle/EYGLE/datafile/o_mf_sysaux_tcgqc_dbf

/opt/oracle/oradata/eygle/EYGLE/datafile/o_mf_users_tctth_dbf

SQL> show parameter comp

NAME TYPE VALUE

compatible string

nls_comp string

plsql_compiler_flags string INTERPRETED NON_DEBUG

plsql_v_compatibility boolean FALSE

SQL> create tablespace trans

datafile /opt/oracle/oradata/eygle/EYGLE/datafile/transdbf size M;

Tablespace created

SQL> create user trans identified by trans default tablespace trans;

User created

SQL> grant connectresource to trans;

Grant succeeded

SQL> connect trans/trans

create table test as select * from dict;

Connected

SQL>

Table created

SQL> select count(*) from test;

COUNT(*)

SQL> connect / as sysdba

Connected

SQL> alter tablespace trans read only;

Tablespace altered

SQL> exit

Disconnected from Oracle Database g Enterprise Edition Release Production

With the Partitioning Oracle Label Security OLAP and Data Mining Scoring Engine options

[oracle@danaly oradata]$ exp \/ as sysdba\ tablespaces=trans transport_tablespace=y file=exp_transdmp

Export: Release Production on Thu Jul ::

Copyright (c) Oracle All rights reserved

Connected to: Oracle Database g Enterprise Edition Release Production

With the Partitioning Oracle Label Security OLAP and Data Mining Scoring Engine options

Export done in ZHSGBK character set and ALUTF NCHAR character set

Note: table data (rows) will not be exported

About to export transportable tablespace metadata

For tablespace TRANS

exporting cluster definitions

exporting table definitions

exporting table TEST

exporting referential integrity constraints

exporting triggers

end transportable tablespace metadata export

Export terminated successfully without warnings

[oracle@danaly oradata]$ ls l exp_transdmp

rwrr oracle dba Jul : exp_transdmp

[oracle@danaly oradata]$ pwd

/opt/oracle/oradata

然后我们可以直接将这两个文件传输到Windows平台上

C:\oracle\oradata\EYGLE\DATAFILE>ftp

Connected to

(vsFTPd )

User (:(none)): oracle

Please specify the password

Password:

Login successful

ftp> bin

Switching to Binary mode

ftp> mget oradata/eygle/EYGLE/datafile/transdbf

Switching to Binary mode

mget oradata/eygle/EYGLE/datafile/transdbf? y

PORT command successful Consider using PASV

Opening BINARY mode data connection for oradata/eygle/EYGLE/datafile/transdbf ( bytes)

File send OK

ftp: 收到 字节用时 Seconds Kbytes/sec

ftp> mget oradata/exp_transdmp

Switching to Binary mode

mget oradata/exp_transdmp? y

PORT command successful Consider using PASV

Opening BINARY mode data connection for oradata/exp_transdmp ( bytes)

File send OK

ftp: 收到 字节用时 Seconds Kbytes/sec

ftp> quit

Goodbye

SQL> create user trans identified by trans;

用户已创建

SQL> grant connectresource to trans;

授权成功

接下来执行导入

C:\oracle\oradata\EYGLE\DATAFILE>imp / as sysdba tablespaces=trans transport_tablespace=y file=exp_transdmp datafiles=C:\oracle\oradata\EYGLE\DATAFILE\transdbf

Import: Release Production on 星期四 ::

Copyright (c) Oracle All rights reserved

连接到: Oracle Database g Enterprise Edition Release Production

With the Partitioning OLAP and Data Mining options

经由常规路径由 EXPORT:V 创建的导出文件

即将导入可传输的表空间元数据

已经完成 ZHSGBK 字符集和 ALUTF NCHAR 字符集中的导入

正在将 SYS 的对象导入到 SYS

正在将 SYS 的对象导入到 SYS

正在将 TRANS 的对象导入到 TRANS

正在导入表 TEST

正在将 SYS 的对象导入到 SYS

成功终止导入 没有出现警告

我们看到这个文件可以直接被Windows上的系统识别

SQL> select count(*) from transtest;

COUNT(*)

SQL> select tablespace_namestatus from dba_tablespaces;

TABLESPACE_NAME STATUS

SYSTEM ONLINE

UNDOTBS ONLINE

SYSAUX ONLINE

TEMP ONLINE

USERS ONLINE

TRANS READ ONLY

已选择

Oracleg同字节序跨平台迁移的增强

上一节介绍的方法不免过于复杂也许很多朋友会发出这样的疑问既然同字节序数据文件跨平台的差异如此之小为什么Oracle不直接实现这一技术呢?

也许是这一迁移的技术优先级较低在OraclegROracle开始支持同字节序数据库的跨平台迁移

这一技术实现有以下几点注意事项

. 源平台和目的平台需要具有相同的字节序

. 重做日志文件和控制文件不会传输迁移之后需要重建控制文件使用RESETLOGS方式打开数据库临时文件不会被传输

. BFILES外部表和Directories口令文件等不会被传输

我们通过Linux平台到Windows平台的迁移来看一下这一技术的实现

. 确认平台及版本

首先要确定源平台和目标平台具有相同的字节序

SQL> select PLATFORM_NAME ENDIAN_FORMAT from V$TRANSPORTABLE_PLATFORM

where platform_name in (Linux IA (bit)Microsoft Windows IA (bit));

PLATFORM_NAME ENDIAN_FORMAT

Microsoft Windows IA (bit) Little

Linux IA (bit) Little

然后需要确定源平台及目标平台的数据库版本通常需要这两者具有相同的数据库版本本例的情况有所不同Linux平台的数据库版本为Windows平台的数据库版本为数据库版本不同将使情况稍微复杂一点而且需要注意的是通常高版本的数据库不能向低版本迁移

. 确认迁移是否支持

跨平台迁移需要数据库处于READ ONLY模式打开使用DBMS_TDBCHECK_DB进行检查

SQL> set serveroutput on

SQL> declare

db_ready boolean;

begin

db_ready := dbms_tdbcheck_db(Microsoft Windows IA (bit));

end;

/

PL/SQL procedure successfully completed

如果以上过程成功执行并没有其他相关警告输出则说明数据库可以支持跨平台转移

. 检查外部对象

使用DBMS_TDBCHECK_EXTERNAL来识别外部表Directories或BFILES等这些对象所指向的外部数据不能被RMAN自动转移

SQL> set serveroutput on

SQL> declare

external boolean;

begin

external := dbms_tdbcheck_external;

end;

/

The following directories exist in the database:

SYSDATA_PUMP_DIR

PL/SQL procedure successfully completed

如果数据库中存在外部表DIRECTORIES等则以上过程执行后的输出与以上类似

. 使用RMAN进行跨平台文件迁移

执行跨平台迁移首先要通过RMAN对数据文件进行转换RMAN执行过程如下

[oracle@danaly eygle]$ rman target /

Recovery Manager: Release Production on Sat Jun ::

Copyright (c) Oracle All rights reserved

connected to target database: EYGLE (DBID=)

RMAN> CONVERT DATABASE NEW DATABASE JULIA

> TRANSPORT SCRIPT /opt/oracle/oradata/transport/transportsql

> TO PLATFORM Microsoft Windows IA (bit)

> DB_FILE_NAME_CONVERT /opt/oracle/oradata/eygle/EYGLE/datafile /opt/oracle/oradata/transport;

Starting convert at JUN

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_

channel ORA_DISK_: sid= devtype=DISK

Directory SYSDATA_PUMP_DIR found in the database

User SYS with SYSDBA and SYSOPER privilege found in password file

channel ORA_DISK_: starting datafile conversion

input datafile

fno= name=/opt/oracle/oradata/eygle/EYGLE/datafile/o_mf_system_tcxns_dbf

converted datafile=/opt/oracle/oradata/transport/o_mf_system_tcxns_dbf

channel ORA_DISK_: datafile conversion complete elapsed time: ::

channel ORA_DISK_: starting datafile conversion

input datafile

fno= name=/opt/oracle/oradata/eygle/EYGLE/datafile/o_mf_undotbs_tcmb_dbf

converted datafile=/opt/oracle/oradata/transport/o_mf_undotbs_tcmb_dbf

channel ORA_DISK_: datafile conversion complete elapsed time: ::

channel ORA_DISK_: starting datafile conversion

input datafile

fno= name=/opt/oracle/oradata/eygle/EYGLE/datafile/o_mf_sysaux_tcgqc_dbf

converted datafile=/opt/oracle/oradata/transport/o_mf_sysaux_tcgqc_dbf

channel ORA_DISK_: datafile conversion complete elapsed time: ::

channel ORA_DISK_: starting datafile conversion

input datafile

fno= name=/opt/oracle/oradata/eygle/EYGLE/datafile/o_mf_users_tctth_dbf

converted datafile=/opt/oracle/oradata/transport/o_mf_users_tctth_dbf

channel ORA_DISK_: datafile conversion complete elapsed time: ::

Run SQL script /opt/oracle/oradata/transport/transportsql on the target platform to create database

Edit initora file /opt/oracle/product//dbs/init_ilir__ora This PFILE will be used to create the database on the target platform

To recompile all PL/SQL modules run utlirpsql and utlrpsql on the target platform

To change the internal database identifier use DBNEWID Utility

Finished backup at JUN

RMAN的转换语句中指定生成一个转换脚本transportsql用于参考转换的目标平台是Microsoft Windows IA (bit)所有的数据文件转换后存放在一个新的目录下

最后RMAN还自动生成一个参数文件这个文件是init_ilir__ora这个参数文件里包含了一些重要的初始化参数可以根据需要进行相应的更改由于平台以及路径的不同很多涉及路径的参数都需要进行变更这个参数文件的内容大致分为三个部分

第一部分列出需要修改的参数

# Please change the values of the following parameters:

control_files = /opt/oracle/product//dbs/cf_DJULIA_id_ilir

db_create_file_dest = /opt/oracle/product//dbs/eygle

db_recovery_file_dest = /opt/oracle/product//dbs/flash_recovery_area

db_recovery_file_dest_size=

background_dump_dest = /opt/oracle/product//dbs/bdump

user_dump_dest = /opt/oracle/product//dbs/udump

core_dump_dest = /opt/oracle/product//dbs/cdump

audit_file_dest = /opt/oracle/product//dbs/adump

db_name = JULIA

第二部分列出了建议Review的参数

# Please review the values of the following parameters:

remote_login_passwordfile= EXCLUSIVE

db_domain =

dispatchers = (PROTOCOL=TCP) (SERVICE=eygleXDB)

第三部分列出了来自于源数据库的一些特殊设置这些参数可以酌情修改

# The values of the following parameters are from source database:

processes =

sga_target =

db_block_size =

compatible =

db_file_multiblock_read_count=

undo_management = AUTO

undo_tablespace = UNDOTBS

job_queue_processes =

open_cursors =

pga_aggregate_target =

参数文件的内容我们可以在新的平台上重新创建这个参数文件可以作为参考

. 转移文件到目标平台

源平台的工作完成之后数据文件可以通过ftp等方式转移到目标平台部署到相应目录我的操作步骤如下

C:\oracle\oradata>gzip d transtargz

C:\oracle\oradata>tar xvf transtar

tar: blocksize =

x transport/transportsql bytes tape blocks

x transport/o_mf_sysaux_tcgqc_dbf bytes tape blocks

x transport/o_mf_undotbs_tcmb_dbf bytes tape blocks

x transport/o_mf_system_tcxns_dbf bytes tape blocks

x transport/o_mf_users_tctth_dbf bytes tape blocks

C:\oracle\oradata>mkdir p JULIA\DATAFILE

C:\oracle\oradata>mkdir JULIA\CONTROLFILE

C:\oracle\oradata>mkdir JULIA\ONLINELOG

C:\oracle\oradata>mv transport\* JULIA\DATAFILE

. 创建基础环境

首先创建相关目录

C:\oracle\oradata>mkdir C:\oracle\admin\julia\adump

C:\oracle\oradata>mkdir C:\oracle\admin\julia\bdump

C:\oracle\oradata>mkdir C:\oracle\admin\julia\cdump

C:\oracle\oradata>mkdir C:\oracle\admin\julia\dpdump

C:\oracle\oradata>mkdir C:\oracle\admin\julia\pfile

C:\oracle\oradata>mkdir C:\oracle\admin\julia\udump

创建Windows数据库服务

C:\oracle\oradata>oradim new sid julia

实例已创建

修改参数文件参数文件可以从前面自动生成的参数文件进行修改得到其中目录结构需要依据新平台的具体设置进行修改和存储主要相关的两个参数修改如下

db_create_file_dest = C:\oracle\oradata

db_recovery_file_dest = C:\oracle\flash_recovery_area

修改后的参数文件在Windows上应该位于$ORACLE_HOME/database下参数文件中的另外一个重要参数是控制文件路径

control_files = /opt/oracle/product//dbs/cf_DJULIA_id_ilir

如果我们计划使用OMF管理可以暂时注释这一参数在创建控制文件后再将控制文件的名称路径追加到参数文件中

. 迁移步骤

准备工作完成之后我们可以进行新平台的数据库加载等工作这些工作还可以参考在源平台生成的transportsql脚本

这个脚本的第一部分给出了使用参数文件启动实例及重新创建控制文件的语法参考当然我们还需要修改才能使用这段脚本

STARTUP NOMOUNT PFILE=/opt/oracle/product//dbs/init_ilir__ora

CREATE CONTROLFILE REUSE SET DATABASE LINDBG RESETLOGS NOARCHIVELOG

MAXLOGFILES

MAXLOGMEMBERS

MAXDATAFILES

MAXINSTANCES

MAXLOGHISTORY

LOGFILE

GROUP SIZE M

GROUP SIZE M

GROUP SIZE M

DATAFILE

/opt/oracle/oradata/transport/o_mf_system_tcxns_dbf

/opt/oracle/oradata/transport/o_mf_undotbs_tcmb_dbf

/opt/oracle/oradata/transport/o_mf_sysaux_tcgqc_dbf

/opt/oracle/oradata/transport/o_mf_users_tctth_dbf

CHARACTER SET ZHSGBK

;

由于我们已经编辑好了新的参数文件可以使用这个参数文件启动实例

C:\oracle\oradata>set ORACLE_SID=julia

C:\oracle\oradata>sqlplus / as sysdba

SQL*Plus: Release Production on 星期一 ::

Copyright (c) Oracle All Rights Reserved

已连接到空闲例程

SQL> startup nomount pfile=?\database\initjuliaora

ORACLE 例程已经启动

Total System Global Area bytes

Fixed Size bytes

Variable Size bytes

Database Buffers bytes

Redo Buffers bytes

接下来创建控制文件

SQL> CREATE CONTROLFILE REUSE SET DATABASE JULIA RESETLOGS NOARCHIVELOG

MAXLOGFILES

MAXLOGMEMBERS

MAXDATAFILES

MAXINSTANCES

MAXLOGHISTORY

LOGFILE

GROUP SIZE M

GROUP SIZE M

GROUP SIZE M

DATAFILE

C:\oracle\oradata\JULIA\DATAFILE\o_mf_system_tcxns_dbf

C:\oracle\oradata\JULIA\DATAFILE\o_mf_undotbs_tcmb_dbf

C:\oracle\oradata\JULIA\DATAFILE\o_mf_sysaux_tcgqc_dbf

C:\oracle\oradata\JULIA\DATAFILE\o_mf_users_tctth_dbf

CHARACTER SET ZHSGBK

;

控制文件已创建

然后将控制文件的名称等信息追加到参数文件中

SQL> column ctl_files NEW_VALUE ctl_files;

SQL> SELECT CONCAT (control_files=

CONCAT (REPLACE (VALUE ) )

) ctl_files

FROM v$parameter WHERE NAME = control_files;

CTL_FILES

control_files=C:\ORACLE\ORADATA\JULIA\CONTROLFILE\O_MF_YSZR_CTLC:\ORAC

LE\FLASH_RECOVERY_AREA\JULIA\CONTROLFILE\O_MF_YSZMK_CTL

SQL> host echo &ctl_files >>C:\oracle\\database\initjuliaora;

注意执行完以上命令后需要检查参数文件的格式如果控制文件名称未正确添加可以手工调整一下

完成了以上工作后可以关闭数据库再次启动数据库到Mount状态这时候新的控制文件已经发挥作用

SQL> shutdown immediate;

ORA: ??????

已经卸载数据库

ORACLE 例程已经关闭

SQL> startup mount;

ORACLE 例程已经启动

Total System Global Area bytes

Fixed Size bytes

Variable Size bytes

Database Buffers bytes

Redo Buffers bytes

数据库装载完毕

. 完成数据库恢复

接下来再参考一下transportsql中的推荐步骤

ALTER DATABASE OPEN RESETLOGS;

Commands to add tempfiles to temporary tablespaces

Online tempfiles have complete space information

Other tempfiles may require adjustment

ALTER TABLESPACE TEMP ADD TEMPFILE

SIZE AUTOEXTEND ON NEXT MAXSIZE M;

End of tempfile additions

现在我们需要通过RESETLOGS方式来重新生成日志文件然后手工添加临时文件

注意在迁移过程中如果两个平台的数据库版本完全一致则以上步骤可以顺利执行参考transportsql可以顺利完成迁移而本例的测试平台由于Linux平台的数据库版本为Windows平台版本为所以实际操作中还会有所不同在执行RESETLOGS过程中数据库会发生中断

SQL> alter database open resetlogs;

alter database open resetlogs

*

行出现错误:

ORA: ORACLE 实例终止强制断开连接

检查日志我们发现以下提示

Mon Jun ::

Errors in file c:\oracle\admin\julia\udump\julia_ora_trc:

ORA: 引导程序进程失败

ORA: 必须用 UPGRADE 选项打开数据库

Oracle要求以UPGRADE选项打开数据库对数据库执行跨版本迁移

我们继续参考transportsql的最后部分

SHUTDOWN IMMEDIATE

STARTUP UPGRADE PFILE=/opt/oracle/product//dbs/init_ilir__ora

@@ ?/rdbms/admin/utlirpsql

SHUTDOWN IMMEDIATE

STARTUP PFILE=/opt/oracle/product//dbs/init_ilir__ora

The following step will recompile all PL/SQL modules

It may take serveral hours to complete

@@ ?/rdbms/admin/utlrpsql

set feedback ;

再次启动数据库到UPGRADE模式由于之前的数据库中断现在这些需要进行一点恢复工作

SQL> startup upgrade;

ORACLE 例程已经启动

Total System Global Area bytes

Fixed Size bytes

Variable Size bytes

Database Buffers bytes

Redo Buffers bytes

数据库装载完毕

ORA: 文件 需要介质恢复

ORA: 数据文件 :C:\ORACLE\ORADATA\JULIA\DATAFILE\O_MF_SYSTEM_TCXNS_DBF

SQL> recover database;

完成介质恢复

恢复完成之后启动数据库到UPGRADE模式

SQL> shutdown immediate;

ORA: 数据库未打开

已经卸载数据库

ORACLE 例程已经关闭

SQL> startup upgrade;

ORACLE 例程已经启动

Total System Global Area bytes

Fixed Size bytes

Variable Size bytes

Database Buffers bytes

Redo Buffers bytes

数据库装载完毕

数据库已经打开

执行脚本?/rdbms/admin/utlirpsql这个脚本执行完成之后会有如下提示

DOC>#######################################################################

DOC> utlirpsql completed successfully All PL/SQL objects in the

DOC> database have been invalidated

DOC>

DOC> Shut down and restart the database in normal mode and run utlrpsql to

DOC> recompile invalid objects

DOC>#######################################################################

也就是说这个脚本的作用是使数据库中的PL/SQL对象INVALID然后通过utlrpsql的重新编译消除跨平台的兼容性影响

按照transportsql脚本提示的步骤我们可以重新启动数据库来执行utlrpsql脚本(由于本例涉及到版本迁移需要再次启动数据库到upgrade模式如果数据库版本相同则可以直接启动数据库执行utlrpsql脚本完成最后的编译工作)

SQL> @@ ?/rdbms/admin/utlrpsql

TIMESTAMP

COMP_TIMESTAMP UTLRP_BGN ::

PL/SQL 过程已成功完成

TIMESTAMP

COMP_TIMESTAMP UTLRP_END ::

PL/SQL 过程已成功完成

utlrpsql执行完成之后我们需要再执行和数据库升级相关的脚本这个脚本是catupgrdsql

SQL> @?/rdbms/admin/catupgrdsql

这个脚本调用catlogsql和 catprocsql来重建字典对象等在执行完这个脚本之后我们可以关闭数据库后正常打开数据库

SQL> startup

ORACLE 例程已经启动

Total System Global Area bytes

Fixed Size bytes

Variable Size bytes

Database Buffers bytes

Redo Buffers bytes

数据库装载完毕

数据库已经打开

SQL> select count(*) from dba_objects where status=INVALID;

COUNT(*)

已选择

SQL> @?\rdbms\admin\utlrpsql

catupgrdsql脚本可能会使部分字典对象失效我们可以再次运行utlrpsql脚本来进行编译编译完成后不要忘记为数据库添加临时文件

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE

SIZE AUTOEXTEND ON NEXT MAXSIZE M;

表空间已更改

至此同字节序的跨平台迁移全部完成当然由于版本的不同整个过程稍微复杂了一些不过这个过程对于跨平台的迁移及版本升级是一个很好的参考

实现数据迁移的高可用性

通过以上测试实际上可以确认对于可传输表空间可以很容易从Oracle i向Oracle g迁移那么这种方法对于可用性要求极高的环境进行数据迁移或数据库迁移具有极大的便利

如果进行数据库升级通常的方法是通过DBUA(Database Upgrade AssistantOracle g引入的新工具)进行但是DBUA存在的问题在于操作过程过长而且如果升级过程中出现问题数据文件可能不能重新被使用这就需要从备份中进行恢复这使得业务连续性要求高的企业很难采用这种方法进行升级

另外一种常见的迁移的方法是通过逻辑导出导入(EXP/IMP)但是这种方法对于不断变化的数据无能为力所以通常也不可行

那么现在可传输表空间就成了一个可以考虑的快速迁移或升级方法

Oracle有一个小组专注于设计高可用性架构的实现以帮助用户最大限度的提高系统可用性Oracle有一个专有名词用来命名这类技术MAA(Maximum Availability Architecture MAA)OTN上MAA部分有一个Amadeus公司的实践案例通过可传输表空间从Oracle i向Oracle g实现快速数据迁移

当然这种方法的使用要考虑的还有很多通过各种技术和方法的结合使用才能最终的达到快速迁移的目标

Amadeus公司的迁移是在同类型平台不同主机之间进行的其实现步骤大致如下

) 在升级主机安装Oracle i版本并创建生产库的DataGuard数据库这个工作可以在线进行不影响主节点的工作

) 在升级主机安装Oracle gR数据库软件创建数据库此时升级主机上存在了个数据库

) 整理不能通过transport tablespace处理的内容如sequencesynonymsgrants等

) 在升级割接时间将主库置为只读将日志全部应用到备机业务影响从此时开始

) 将备机的数据文件通过可传输表空间迁移至Oracle gR数据库并创建sequenceesynonymsgrants等对象检查验证

) 如果没有问题则即可将业务切换至新的Oracle gR数据库运行业务恢复正常运行

在这个迁移过程中如果迁移失败那么直接读写打开主库即可恢复业务的正常运行回退非常方便

使用这种方法业务影响仅发生在以上()~()步在OTN的案例中Amadeus公司在实际操作中分钟之内就将一个大型数据库迁移到Oracle gR这种方式是一种非常有新意的创新性应用在熟悉了Oracle的各项技术之后通过不断实践和探索我们就能够不断发现充满价值的Oracle应用

最后的脚本

以上脚本已经完成了主要的工作剩下的是一些最后的维护工作

这里还有两个脚本需要执行首先执行的是postScriptssql脚本这个脚本主要对部分用户及部分数据库选件进行维护

connect SYS/&&sysPassword as SYSDBA

set echo on

spool C:\oracle\admin\eygle\scripts\postScriptslog

@C:\oracle\\rdbms\admin\dbmssmlsql;

execute dbms_datapump_utlreplace_default_dir;

commit;

connect SYS/&&sysPassword as SYSDBA

alter session set current_schema=ORDSYS;

@C:\oracle\\ord\im\admin\ordlibsql;

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\\ctx\admin\defaults\drdefdpsql;

@C:\oracle\\ctx\admin\defaults\drdefinsql SIMPLIFIED CHINESE;

connect SYS/&&sysPassword as SYSDBA

execute dbms_swrf_internalcleanup_database(cleanup_local => FALSE);

commit;

spool off

最后执行的脚本是postDBCreationsql在这个脚本中将创建spfile解锁SYSMANDBSNMP用户编译失效对象并配置DB Control

connect SYS/&&sysPassword as SYSDBA

set echo on

spool C:\oracle\admin\eygle\scripts\postDBCreationlog

connect SYS/&&sysPassword as SYSDBA

set echo on

create spfile=C:\oracle\/dbs/spfileeygleora

FROM pfile=C:\oracle\admin\eygle\scripts\initora;

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_recomprecomp_serial();

select utl_recomp_end: || to_char(sysdate HH:MI:SS) from dual;

host C:\oracle\\bin\emcabat config dbcontrol db silent DB_UNIQUE_NAME eygle PORT EM_HOME C:\oracle\ LISTENER LISTENER SERVICE_NAME eygle SYS_PWD &&sysPassword SID eygle ORACLE_HOME C:\oracle\ DBSNMP_PWD &&dbsnmpPassword HOST gqgai LISTENER_OH C:\oracle\ LOG_FILE C:\oracle\admin\eygle\scripts\emConfiglog SYSMAN_PWD &&sysmanPassword;

spool C:\oracle\admin\eygle\scripts\postDBCreationlog

exit;

看到在最后部分通过emcabat批处理文件配置了DB Control这里通过一条完整的命令快速地完成了DB Control的创建等工作也可以通过手工方式对DB Control进行维护关于这部分内容请参考章 从OEM到iSQL*Plus的内容

此外需要注意的是以下几句命令

select utl_recomp_begin: || to_char(sysdate HH:MI:SS) from dual;

execute utl_recomprecomp_serial();

select utl_recomp_end: || to_char(sysdate HH:MI:SS) from dual;

在Oracle i的postDBCreationsql的脚本中这部分的内容如下

@/opt/oracle/product//rdbms/admin/utlrpsql;

其实两者是相同的utlrpsql中主体部分和Oracle g中是相同的

@@utlrcmpsql

execute utl_recomprecomp_serial();

Rem =====================================================================

Rem Run component validation procedure

Rem =====================================================================

EXECUTE dbms_registryvalidate_components;

Oracle在utlrpsql脚本的注释中说得很明确这是一个通用脚本可以在任意时候运行以重新编译数据库失效对象

通常我们会在Oracle的升级指导中看到这个脚本Oracle强烈推荐在migration / upgrade / downgrade之后通过运行此脚本编译失效对象但是注意此脚本需要用SQL*Plus以SYSDBA身份运行并且当时数据库中最好不要有活动事物或DDL操作否则极容易导致死锁的出现

这样使用模板创建数据库就完成了

               

上一篇:Oracle性能调优思路

下一篇:Oracle数据库频繁归档问题的解决办法