加入收藏 | 设为首页 | 会员中心 | 我要投稿 宁德站长网 (https://www.0593zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

用Oracle12.2手工创建数据库的一个坑

发布时间:2021-01-16 16:01:36 所属栏目:安全 来源:网络整理
导读:副标题#e# 《用Oracle12.2手工创建数据库的一个坑》要点: 本文介绍了用Oracle12.2手工创建数据库的一个坑,希望对您有用。如果有疑问,可以联系我们。 作者介绍 杨建荣,DBAplus社群联合发起人.现就职于搜狐畅游,Oracle ACE、YEP成员,超7年数据库开发和运维

而在处理问题的过程中,也参考了一些资料,发现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文档也在不断地改进和完善之中.

小结

(编辑:宁德站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!