linux下初始化oracle,深入解析oracle--数据库的初始化

一、Oracle的缺省定时任务可能带来很多问题,所以我们有必要关注一下系统有哪些缺省的任务

查询任务

dba_scheduler_jobs

dba_scheduler_job_run_details

关闭任务

execute dbms_scheduler.disable('AUTO_SPACE_ADVISOR_JOB');

二、为了保证在RAC环境备份归档日志的方便性,归档日志除了分别在两节点进行本地归档外,在进行本地归档的同时,通过配置log_archive_dest_2向另一节点传送归档日志,在通过orapwd工具在一个节点更改sys密码后,造成归档log_archive_dest_2向另一个节点无法传送归档日志。在RAC或DG环境中,ORA-16191错误通常是由于两个节点的密码文件不一致或者remote_login_passwordfile参数设置不当造成的。而本次重建了密码文件还是没有解决问题,经分析后发现跟oracle11g的口令安全增强有关。(SEC_CASE_SENSITIVE_LOGON)

当启用强口令认证时,oracle区分密码大小写,在创建口令文件时,即使口令相同也会在两个节点产生不用的hash值,需要指定ignorecase=y参数强制忽略大小写才能保证DG的正常认证。

三、dbms_backup_restore包

可以在数据库实例nomount状态下调用,直接从备份集读取数据文件,功能十分强大。用于RMAN进行数据备份时,备份信息丢失的情况。

四、传输表空间标准步骤

1、以sys用户执行非严格自包含检查

exec dbms_tts.transport_set_check('USER',true,false);

select * from tansport_set_violations;

以sys用户执行严格自包含检查

exec dbms_tts.transport_set_check('JEL',true,true);

select * from tansport_set_violations;

可以对多个表空间进行同时传输

exec dbms_tts.transport_set_check('USER,JEL',true,true);

select * from tansport_set_violations;

2、将表设置为只读

alter tablespace user read only;

3、导出表空间

exp/expdp

4、传输文件

将导出的表空间元数据和数据文件转移到目标主机

5、导入目标端

imp/impdp

6、将源端和目标端表空间置为读写

alter tablespace user read write;

五、不同字节序平台跨平台表空间传输

Solaris到windows

Oracle 10G之前,数据文件是不能跨平台传输使用的

确认平台信息

v$transportable_platform v$database  (platform_name)

1、设置表空间只读

alter tablespace user read only;

2、导出传输表空间

exp/expdp

3、使用rman的convert命令转换文件格式

rman target /

convert tablespace user

to platform 'Microsoft Windows IA (32-bit)'

format  '/tmp/%N_%f';

4、确认文件生成

cd /tmp

ls -lrt

5、把dump文件和convert生成的文件传输到目标端

scp

6、目标端对文件进行转换

rman target /

convert datafile '源端传过来的convert文件'

db_file_name_covert

'源端传过来的convert文件','源端传过来的convert文件重命名.dbf'

7、在目标端创建相应用户并执行导入

create user

imp/impdp

8、把表空间置为读写

六、相同字节序平台间传输表空间

由于不同平台上操作系统会在数据文件头上写系统信息,这部分信息无法跨平台,所以仍然会导致跨平台的文件无法被数据库正确识别。在oracle10g中,同字节跨平台的文件头信息oracle会自动改写,不需要转换。

实验环境

Red Hat Enterprise Linux AS release 3+Oracle 9iR2 9.2.0.4

window XP+Oracle 10g 10.2.0.1

select * from v$version where rownum<2;

看一下linux平台,文件头被操作系统保留的字节数:

select file_name,bytes from dba_data_files where tablespace_name='USERS';

查看操作系统下文件的大小  ls -lrt USERS.dbf

两个值的差,为操作系统在文件头的字节

linux导出文件到window平台导入时,会出现ORA-00600错误,提示文件头无法正确识别。可以通过这个文件进行一个特殊操作,为文件更换一个window文件头。

1、提取windows数据文件头

dd if=user.dbf of=header.dbf bs=8192 count=1

2、去除linux数据文件头

dd if=user.dbf of=linux.dbf bs=8192 skip=1

3、将两个文件合二为一

copy /b header.dbf+linux.dbf users.dbf

则users.dbf就具有windows平台下的文件头和linux平台下的文件体

然后导入window平台数据库

结论,oracle 9i数据文件可以通过表空间传输迁移到oracle 10g中使用

七、Oracle10g 同字节序跨平台迁移

注意事项

1、源平台与目标平台有相同的字节序

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

3、BFILES、外部表和directories不会被传输

如下实验linux+oracle 10.2.0.1  到 windows+Oracle 10.2.0.3,通常高版本数据库不能向低版本迁移

1、确认源平台和目标平台具有相同的字节序

2、确认源数据库是否支持迁移,跨平台迁移需要数据库处于read only模式打开,使用dbms_tdb.check_db进行检查

declare

db_ready boolean;

begin

db_ready := dbms_tdb.check_db('Microsoft Windows IA (32-bit)');

end;

/

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

3、检查外部对象

使用dbms_tdb.check_external来识别外部表、directories或BFILES,这些对象所指向的外部数据不能被RMAN自动转移

declare

db_external boolean;

begin

db_external := dbms_tdb.check_external;

end;

/

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

跨平台迁移首先通过RMAN进程数据文件转换

rman target /

convert database new database 'JEL2'

transport script '/home/oracle/script/transport.sql'

to platform 'Microsoft Windows IA (32-bit)'

db_file_name_convert '/oracle/app/oradata/JEL1/datafile' \ '/home/oracle/transport'

指定生成的转换脚本进行参考,所有的数据文件转换后存放在一个新目录

修改rman生成的参数文件,主要是路径修改

5、转移转换出的文件到目标端

6、创建基础环境

7、迁移步骤

启动数据库到nomount状态

startup nomount pfile=

创建控制文件,然后关闭数据库,启动数据库到mount状态,然后open数据库

alter database open resetlogs;

如果两个平台的数据库版本完全一样,则以上步骤可以顺利进行。但本例中,以上语句报错,必须执行upgrade选项来打开数据库

再次启动数据库到upgrade模式,由于之前的数据库中断,现在需要进行恢复工作

startup upgrade;

recover database

shutdown immediate;

startup upgrage;

执行脚本?/rdbms/admin/utlirp.sql,该脚本的作用是重新编译数据库中的plsql对象

shutdown and restart the database in normal mode and run utlrp.sql to recompile invalid objects

utlrp.sql执行完成之后我们需要再执行和数据库升级相关的脚本catupgrd.sql

这个脚本调用catlog.sql和catproc.sql来重建字典对象等,执行完成该脚本后,我们可以正常关闭数据库后正常打开数据库。脚本可能使部分对象失效,我们可以再次运行utlrp.sql脚本进行编译。编译完成后为数据库添加临时文件

alter database temp add tempfile size 200m autoextend on next 65536 maxsize 32767m;

至此,同字节序的跨平台迁移全部完成。

八、文件系统与ASM的切换

在目标端进行正常导入,导入完成后,此时新导入的文件在文件系统上,我们需要把文件系统文件转移到ASM磁盘组上

select name from v$datafile;

文件转移可以通过RMAN进行,但首次尝试遇到RMAN-20201错误,

rman target /

backup as copy datafile '/opt/oracle/trans.dbf' format '+DATADG';

这个错误是由于trans表空间刚刚导入数据库,处于只读状态,并未被catalog记录感知,通过对文件更改为读写状态,可以消除此错误

alter tablespace trans read write;

select tablespace_name,status from dba_tablesapces where tablespace_name='';

rman>report schema

拷贝前需要把表空间置为只读状态

alter tablespace trans read only;

rman>backup as copy datafile  '/opt/oracle/trans.dbf' format '+DATADG';

执行switch操作需要将表空间离线,否则报错

alter tablespace trans offline;

rman>switch datafile  '/opt/oracle/trans.dbf' to copy;

此时转换后的表空间已经移动到ASM磁盘组中。

select * from v$datafiles;

九、dbms_file_transfer

从10g开始,oracle提供了dbms_file_transfer程序包,可以很方便的在本地数据库和远程数据库,ASM和文件系统间传输数据库文件

desc dbms_file_transfer

十、

你可能感兴趣的:(linux下初始化oracle)