而在处理问题的过程中,也参考了一些资料,发现Deiby Gomez?也碰到了类似的问题,他在博客里提供了类似的解决方法.所以说这的的确确是12.2新版本中create database的一个坑,如果你对create database失去了信心,也别担心,其实不一定是你的错.
12c的坑讨论完了,我们来换个思路,看看10g、11g中是什么情况.
Create database语句在10g、11g的差别
一个简单的create database语句在10g、11g还是有一些变化的,这些变化我们需要一些敏锐的“嗅觉”.
Oracle 11g的create database语句大体是这样的,我们只需要简单修改下路径就基本可用.
CREATE DATABASE mynewdb
USER SYS IDENTIFIED BY sys_password USER SYSTEM IDENTIFIED BY system_password
LOGFILE GROUP 1 (‘/u01/logs/my/redo01a.log’,’/u02/logs/my/redo01b.log’) SIZE 100M BLOCKSIZE 512,
GROUP 2 (‘/u01/logs/my/redo02a.log’,’/u02/logs/my/redo02b.log’) SIZE 100M BLOCKSIZE 512,
GROUP 3 (‘/u01/logs/my/redo03a.log’,’/u02/logs/my/redo03b.log’) SIZE 100M BLOCKSIZE 512
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXLOGHISTORY 1
MAXDATAFILES 100
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
EXTENT MANAGEMENT LOCAL
DATAFILE ‘/u01/app/oracle/oradata/mynewdb/system01.dbf’ SIZE 325M REUSE
SYSAUX DATAFILE ‘/u01/app/oracle/oradata/mynewdb/sysaux01.dbf’ SIZE 325M REUSE
DEFAULT TABLESPACE users
DATAFILE ‘/u01/app/oracle/oradata/mynewdb/users01.dbf’
SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE tempts1
TEMPFILE ‘/u01/app/oracle/oradata/mynewdb/temp01.dbf’
SIZE 20M REUSE
UNDO TABLESPACE undotbs
DATAFILE ‘/u01/app/oracle/oradata/mynewdb/undotbs01.dbf’
SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
而如果你使用11g的create database语句,毫无疑问会在10g环境中抛出错误.
SQL> @createdb.sql
LOGFILE GROUP 1 (‘/u02/oracle/oradata/TEST10G/disk1/redo01a.log’,’/u02/ oracle/oradata/TEST10G/disk2/redo01b.log’) SIZE 100M BLOCKSIZE 512,
*
ERROR at line 4:
ORA-02165: invalid option for CREATE DATABASE
在这一点上,我们需要点耐心,我把10g的创建语句拿出来比较一下,发现有3处不同(标黄部分).
CREATE DATABASE mynewdb
USER SYS IDENTIFIED BY pz6r58
USER SYSTEM IDENTIFIED BY y1tz5p
LOGFILE GROUP 1 (‘/u01/oracle/oradata/mynewdb/redo01.log’) SIZE 100M,
? ? ? ? ? ?GROUP 2 (‘/u01/oracle/oradata/mynewdb/redo02.log’) SIZE 100M,
? ? ? ? ? ?GROUP 3 (‘/u01/oracle/oradata/mynewdb/redo03.log’) SIZE 100M
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXLOGHISTORY 1
MAXDATAFILES 100
MAXINSTANCES 1
CHARACTER SET US7ASCII
NATIONAL CHARACTER SET AL16UTF16
DATAFILE ‘/u01/oracle/oradata/mynewdb/system01.dbf’ SIZE 325M REUSE
EXTENT MANAGEMENT LOCAL
SYSAUX DATAFILE ‘/u01/oracle/oradata/mynewdb/sysaux01.dbf’ SIZE 325M REUSE
DEFAULT TABLESPACE tbs_1
DEFAULT TEMPORARY TABLESPACE tempts1
TEMPFILE ‘/u01/oracle/oradata/mynewdb/temp01.dbf’
SIZE 20M REUSE
UNDO TABLESPACE undotbs
DATAFILE ‘/u01/oracle/oradata/mynewdb/undotbs01.dbf’
SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
(1)第一处不同是关于redo日志组的设置,10g中默认配置一组日志中只有一个日志成员,而在11g中是默认有2个.
(2)第二个不同之处是在10g中有一个配置MAXINSTANCES,而在11g中却没有,因为是单实例数据库,所以不会是这个地方的不同引起的问题.
(3)第三个问题就更加明显了,在10g中只有default tablespace tbs_1语句而没有定义明细的信息,这个语句是不能运行的,还需要手工去补充,在11g中,语句已经补充完整了.只需要简单的根据自己的需求调整一下即可.
所以第二、三处不同很明显不是问题的原因,那么我们看看第一处不同,还有什么地方有可能会导致语句出现问题.
11g中日志组的定义的如下:
LOGFILE GROUP 1 (‘/u01/logs/my/redo01a.log’,
10g中日志组的定义如下:
LOGFILE GROUP 1 (‘/u01/oracle/oradata/mynewdb/redo01.log’) SIZE 100M,
除了日志成员的不同外,还有就是blocksize的不同,在10g中没有blocksize的字样.
把blocksize去掉,在11g环境中再次运行语句,语句就运行成功了.
原来问题在这里,因为blocksize的值是在数据库的源代码中固定的,与操作系统相关,默认的值为512,在不同的操作系统中会有所不同.
查看blocksize的配置,可以使用基表.
从Oracle的内部视图中获得:
SQL> select max(lebsz) from x$kccle;
MAX(LEBSZ)
———-
512
所以可见在10g和11g的很多细节之处还是可以发现很多值得推敲的地方,Oracle文档也在不断地改进和完善之中.
小结
(编辑:ASP站长网)
|