对compatible参数的理解【待完成】

对compatible参数的理解

分类:Oracle数据库基本管理oracle安装与卸载oracle体系架构2014-01-15 11:597人阅读评论(0)收藏编辑删除

参数

compatible也能降

 

compatible也能由高变低,不过是在9i


今天在看oracle 10g的文档,注意到Irreversible Compatibility这个说法。

Starting with Oracle Database 10g, theCOMPATIBLE initialization parameter becomes irreversible; that is, it cannot beset to a value that is less than a previous value. Therefore, the compatibilityof the database can go only forward and never backward.
For example, suppose that you set COMPATIBLE to 10.0.0 and start up thedatabase, then shut down the database to restart with COMPATIBLE set to 9.2.0.During startup, you get an error indicating that the compatible setting cannotbe reversed.
If you do advance the compatibility
(的值) of yourdatabase with the COMPATIBLE initialization parameter, there is no way to startthe database using a lower compatibility level setting,except by doing a point-in-time recoveryto a time before compatibility was advanced.soAny changes since, are lost.

Consequently,the ALTER DATABASE RESET COMPATIBILITY command is now obsolete.

 

 

注释:

看来,有时候还得看点老版本oracle文档上的东西,即新版本和老版本都有的知识点。我在11gR2上貌似没看到上面的解释。

except by doinga point-in-time recovery to a time before compatibility was advanced.的解释:

你要使用这个参数来保持升级(oracle软件系统和数据库都升级了)前的功能,必须在升级数据文件时就指定你想要的compatiable参数值。否则开始设定一个比较高(的版本号)来升级(oracle软件系统和数据库都升级了,此时compatiable参数值也变为升级后的版本号值),升级后想让compatiable参数值revert到以前来避免使用(oracle软件系统)新功能是不可能的。除非你用以前低版本(数据文件)备份来做一次point-in-time的恢复。

好了,开始正文。

10g开始COMPATIBLE不能由高降低,难道9I可以?将compatiable9.2.0.5改为9.2.0.1?我测试后果然可以。

以前我一直以为COMPATIBLE在所有版本(包括patch set)都不能修改为更小的值,以为每次修改compatiable都会去修改所有的datafile header(格式上的compatiable(或是叫 version,版本这个变量位置里的值).

先看10g的,改低compatible后,数据库在mount的时候提示错误:参数设置与控制文件(格式上的compatiable(或是叫 version,版本这个变量位置里的值)不一致:

SQL>startup
ORACLEinstance started.

TotalSystem Global Area 272629760 bytes
FixedSize 2035592 bytes
VariableSize 201330808 bytes
DatabaseBuffers 62914560 bytes
RedoBuffers 6348800 bytes
ORA-00201: control file version 10.2.0.3.0 incompatible with
ORACLE version 10.2.0.1.0(指的是参数compatiable里设置的值)
ORA-00202:control file: '/oracle/DDS/data03/lewu/data/cntrl_lewu_1.dbfctl'

测试compatiable9.2.0.5修改为9.2.0.0.0,数据库重起成功。//说明 9.2.0.0 9.2.0.5 block structure没有变化

看告警日志【不用看,对理解compatible参数本身没有意义,列出下面内容只是证明数据库重起成功了】

Starting ORACLEinstance (normal)
Starting up ORACLE RDBMS Version: 9.2.0.5.0.
System parameters with non-default values:
compatible = 9.2.0.
50

ARCH: STARTINGARCH PROCESSES
ARCH: STARTING ARCH PROCESSES COMPLETE
ALTER DATABASE MOUNT
Completed: ALTER DATABASE MOUNT
Wed Aug 27 20:53:23 2008
ALTER DATABASE OPEN
Completed: ALTER DATABASE OPEN

ALTER DATABASECLOSE NORMAL
Completed: ALTER DATABASE CLOSE NORMAL

 

---------------------------------------------------------

Starting ORACLEinstance (normal)
Starting up
ORACLE RDBMS Version: 9.2.0.5.0.//oracle软件系统的版本号(version

System parameters with non-default values:

compatible =9.2.0.0//compatible的值

ARCH:STARTING ARCH PROCESSES
ARCH:STARTING ARCH PROCESSES COMPLETE
ALTERDATABASE MOUNT
Completed:ALTER DATABASE MOUNT
ALTERDATABASE OPEN
Completed:ALTER DATABASE OPEN

再看看能不能从9.2.0.5改为8.1.7.4,结果失败。数据库能够mount,但无法启动。看不来不能够跨大版本。

SQL> startup
ORACLE instance started.

Total SystemGlobal Area 689409008 bytes
Fixed Size 732144 bytes
Variable Size 352321536 bytes
Database Buffers 335544320 bytes
Redo Buffers 811008 bytes
Database mounted.
ORA-00402: database changes by release 9.2.0.0.0 cannot be used by release8.1.7.0.0
ORA-00405: compatibility type "Locally Managed SYSTEM tablespace"

注释:

database changes指的是oracle软件系统的一些新特性功能或是数据库文件的新格式。这里database changes指的是"Locally Managed SYSTEMtablespace"新特性功能。

该特性在oracle8.1.7.0.0不能使用?

Oracle8I的版本中,Oracle推出了一种全新的表空间管理方式:本地化管理的表空间LMT(LocallyManaged Tablespace)。

 

 

oracle@:/export/home/oracle/products/9205/dbs> oerr ora 00402
00402,00000, "database changes by release %s cannot be used by release %s"
//*Cause: Changes have been made to the database that require a newer
//software release or that violate the compatibility parameters.
//*Action: Use a version of the software that can understand the changes or
//relax the compatibility requirements in the init file.

现在可以纠正以前的一个误区了。从上述实验所得结论是:compatible9i的时候能降能升,而10g开始不行了,只能升了。

 

maclean

November 1st, 2011 at 13:12

Quote | #1

说明 9.2.0.1 9.2.0.5 blockstructure没有变化

 

说明:

 

0

说明 9.2.0.1 9.2.0.5 blockstructure没有变化

The COMPATIBLEinitialization parameter enables or disables the use of features in thedatabase that affect file format on disk.

参考:http://929044991.blog.51cto.com/1758347/1153095

译文:参数COMPATIBLE会开启或是关闭一些特性功能的使用。这些特性功能是受文件格式影响的,即这些特性功能是基于某些版本的文件开发的,这些特性功能只用在这些版本的文件上才能使用的。(还是译为:这些特性功能会影响改变文件格式。)。所以说,9.2.0.1 9.2.0.5 block structure没有变化,从而9.2.0.5版本的文件可以当做9.2.0.1版本的文件用。

2、修改COMPATIBLE的值,还是修改version的值,会影响视图v$version里的内容?oracle软件系统自身的版本号version可以修改吗,还是已经固定不能修改了?

 

1、假如oracle软件系统从10g升级到11g,那么其数据库是否还是10g的,参数文件里的参数COMPATIBLE是否还是原来的值?

oracle软件系统应该有自己的版本值,即变量versionCOMPATIBLEversion两个参数的含义不一样,version表示一个软件系统自身的版本号,或是文件(如数据文件、控制文件等)自身的版本号,而COMPATIBLE表示某一版本号(version)的oracle软件系统能兼容地使用版本号等于COMPATIBLE值的文件(如数据文件、控制文件等)。以及该版本号(version)的oracle软件系统能兼容地使用版本号等于COMPATIBLE值的文件(如数据文件、控制文件等)时,该版本号(version)的oracle软件系统只能发挥出版本号等于COMPATIBLE值时的oracle软件系统所具有的功能,而该版本号(version)的oracle软件系统自身新增的新功能是使用不了的。

COMPATIBLE参数值可以人为调整设置。值不正确时就会出错。

COMPATIBLE参数相当于一个中介参数。文件看到它,就知道自己要被以COMPATIBLE值为版本号出现的oracle软件系统使用(虽然该oracle软件系统可能版本号比该COMPATIBLE参数值大,还有COMPATIBLE参数值要小于等于目前所安装的oracle软件系统的版本号,大于它就会提示出错);oracle软件系统看到它,就知道自己要使用以COMPATIBLE值为版本号出现的文件(虽然该文件的版本号可以不等于于该COMPATIBLE参数值,但是是否允许COMPATIBLE参数值小于该文件的版本号或是大于它,不清楚)。还有,如果现有版本的文件不能当做COMPATIBLE值为版本号的文件来使用的话,就会提示出错。

3Oracle Database 10g开始,COMPATIBLE值只能向前修改:

修改COMPATIBLE的值,则就会修改数据文件文件头里头或是控制文件文件头里头的版本号(version)吗?例如,

oracle软件系统是11g的,而数据库和COMPATIBLE值都是10g的,那么修改COMPATIBLE的值为11g后,则也就会修改数据文件文件头里头或是控制文件文件头里头的版本号(version)吗?

向后修改不行的例子:

SQL> showparameter compatible
NAME

TYPE VALUE
----------------------------------------------------------------------------------------
compatible string
10.1.0.4.0

SQL> alter system set compatible='
10.1.0.2.0'scope=spfile;
System altered.
SQL> alterdatabase backup controlfile to trace as'/tmp/controlnoresetlogs.sql'noresetlogs;

Database altered.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>startup
ORACLE instance started.
Total System Global Area 524288000 bytes
FixedSize 780016 bytes
VariableSize 153360656 bytes
DatabaseBuffers 369098752 bytes
RedoBuffers 1048576 bytes
ORA-00201: controlfile version 10.1.0.4.0 incompatible with
ORACLEversion10.1.0.2.0(指的是参数compatiable里设置的值)
ORA-00202: controlfile:'/opt/app/oradata/emrep/control01.ctl'
说明,控制文件文件头里头的版本号(version)未被修改为10.1.0.2.0,还是10.1.0.4.0

SQL> @/tmp/controlnoresetlogs.sql
CREATE CONTROLFILE REUSE DATABASE "EMREP"RESETLOGS NOARCHIVELOG
*
ERROR at line 1:
ORA-01503: CREATE CONTROLFILE failed
ORA-01130: database file version 10.1.0.4.0 incompatible withORACLE version
10.1.0.2.0
ORA-01110: data file 1: '/opt/app/oradata/emrep/system01.dbf'

说明,数据文件文件头里头的版本号(version)未被修改为10.1.0.2.0,还是10.1.0.4.0

总之,说明该例子情况下修改COMPATIBLE的值后,则不会修改数据文件文件头里头或是控制文件文件头里头的版本号(version)。

 

Oracle Database 10g以前,COMPATIBLE值能向前也能向后修改:

修改COMPATIBLE的值,则就会修改数据文件文件头里头或是控制文件文件头里头的版本号(version)吗?

 

向后修改的例子,例如,

oracle软件系统和数据库、COMPATIBLE值都是9.2.0.5,现在将COMPATIBLE的值修改为9.2.0.1,那么修改COMPATIBLE的值为11g后,则也就会修改数据文件文件头里头或是控制文件文件头里头的版本号(version)吗?

如,本文,测试将compatiable9.2.0.5修改为9.2.0.0.0,数据库重起成功。看日志.

 

向前修改的例子,例如,

上面向后修改的例子的结果里,将COMPATIBLE的值修改为9.2.0.5,那么修改COMPATIBLE的值为9.2.0.5后,则也就会修改数据文件文件头里头或是控制文件文件头里头的版本号(version)吗?

或是

oracle软件系统是9.2.0.5的,而数据库和COMPATIBLE值都是9.2.0.0.0的,那么修改COMPATIBLE的值为9.2.0.5后,则也就会修改数据文件文件头里头或是控制文件文件头里头的版本号(version)吗?

注释:如何查看控制文件等文件头里头的版本号(version)?

4、将10g的数据库在11goracle软件系统下冷恢复能否成功?因为此时的COMPATIBLE的值是为11g的,而10g的数据库里的文件(如数据文件、控制文件等)自身的版本号还是为10g,而且oracle软件系统和数据库间的版本还是跨版本的。就像本文的例子:

再看看compatible参数能不能从9.2.0.5改为8.1.7.4,结果失败。数据库能够mount,但无法启动。看不来不能够跨大版本。

SQL> startup
ORACLE instance started.

Total SystemGlobal Area 689409008 bytes
Fixed Size 732144 bytes
Variable Size 352321536 bytes
Database Buffers 335544320 bytes
Redo Buffers 811008 bytes
Database mounted.

ORA-00402: database changes by release 9.2.0.0.0 cannot be used by release8.1.7.0.0
ORA-00405: compatibility type "Locally Managed SYSTEM tablespace"

 

5oracle软件系统如何升级?

附加:

根据Oracle给出的解决方法,需要将目前操作系统的环境变量ORACLE_HOME设置为9.2ORACLE_HOME的值,启动数据库执行11.2ORACLE_HOME/rdbms/admin/utlu112i.sql。但是由于已经设置了COMPATIBLE11.2.0.1.0,并启动过数据库,故不能将COMPATIBLE值改为原先的值,从而导致9i环境已经无法打开数据库,启动将报错。

《升级可能导致数据库不可用[待看]》??

 

参考:

http://blog.sina.com.cn/s/blog_465a4a1e0100r0jp.html

http://929044991.blog.51cto.com/1758347/1153095

http://yumianfeilong.com/html/2008/09/25/229.html

compatible参数+oracle谷歌

 

你可能感兴趣的:(对compatible参数的理解【待完成】)