一、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
十、