关于create database语句在10g,11g中的不同

最近抽空练习了下手工建库,在10g的时候基本都在20分钟搞定,在11g中其实还可以更快,因为10g中需要配置的admin目录,需要创建bdump,udump之类的目录等等,在11g都被adr给默认替代了,只要提供了$ORACLE_BASE,就会默认在$ORACLE_BASE下生成对应的目录结构。
其它步骤完全可以按照10g的脚本来使用,没有任何问题,但是如果反过来,在11g里使用的一些语句在10g中可能会有一些问题,这一点也是在今天的测试中发现的一个小细节。
首先我在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的实例很快就创建完成了。然后就想直接引用这个现成的脚本,简单修改一下路径,数据库实例名,在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;

第一处是关于redo日志组的设置,10g中默认配置一组日志中只有一个日志成员。在11g中是默认有2个
第二个不同之处是在10g中有一个配置MAXINSTANCES,在11g中缺没有,因为是单实例数据库,是在找不出理由是这个地方的不同引起的问题。
第三个问题就更加明显了,在10g中 只有一句default tablespace tbs_1 然后没有定义明细的信息,这个语句是不能运行的,还需要手工去补充,在11g中,语句已经补充完整了。只需要简单的根据自己的需求需要一下就可以了。

所以第二个第三个问题是很明显的,应该不是问题的原因,那么我们看看第一处不同,还有什么地方有可能会导出语句出问题。
11g中这样定义的

LOGFILE GROUP 1 ('/u01/logs/my/redo01a.log','/u02/logs/my/redo01b.log') SIZE 100M BLOCKSIZE 512,

10g中是这样定义的
   LOGFILE GROUP 1 ('/u01/oracle/oradata/mynewdb/redo01.log') SIZE 100M,
除了日志成员的不同外,还有一个地方就是blocksize的不同了,在10g中没有blocksize的字样。
带着试试看的态度把blocksize去掉,然后再次运行语句,语句就运行成功了。
问题解决了,我们来看看blocksize是什么东东。
这个值是在数据库的源代码中固定的,与操作系统相关,默认的值为512. 在不同的os中可能会有所不同。
查看blocksize的配置,可以使用基表。
这个Log size可以从Oracle的内部视图中获得:

SQL> select max(lebsz) from x$kccle;

MAX(LEBSZ)
----------
       512

所以可见在10g,11g的很多细节之处还是会存在一定的差距,11g中也在不断的进行改进。

时间: 2024-07-30 13:29:52

关于create database语句在10g,11g中的不同的相关文章

使用create database语句创建数据库的详细操作步骤

使用create database语句创建数据库的步骤如下: 1.指定一个实例标识符SID 2.确保设置了必要的环境变量 3.选择一个数据库管理员验证方法 4.创建一个初始化参数文件 5.(只用于windows平台)创建一个实例 6.连接实例 7.创建一个服务器参数文件 8.启动实例 9.执行create database 10.创建额外的表空间 11.运行脚本来创建数据字典视图 12.(可选项)运行脚本来安装可选项 13.备份数据库 14.(可选项)启用自动实例启动 步骤1:指定一个实例标识符

曲折的10g,11g中EM的安装配置过程

今天在本地搭了一套oracle环境,首先安装数据库的时候顺带了EM,结果安装好之后想修改监听器的端口,把原本15521的端口换成别的,结果在目录中修改了几个参数文件,EM竟然直接起不来了.最后自己分析了,其实有好几种思路来完成密码的修改. 一种是直接删除EM,然后重建,可以使用emca -deconfig dbcontrol db -repos drop来完成删除,然后通过emca -config dbcontrol db -repos create来重新创建EM, 还有一种方式可以通过图形界面

10g,11g中数据库静默安装中的细小差别

数据库软件的安装根据工作需要主要有以下几种方式,使用oui是普遍的图形界面方式,还有两种是不依赖图形界面的,一种为静默安装,另外一种为克隆安装. 静默安装的时候核心就在于响应文件,在安装目录database/response下提供了几个响应文件,是oracle提供的模板. 比如安装数据库软件的模板db_install.rsp,dbca的模板dbca.rsp,配置监听的netca.rsp [ora11g@oel1 response]$ ll total 76 -rw-rw-r-- 1 ora11g

10g,11g中的数据库克隆安装

有时候在很多工作环境中,如果彼此几个机器的配置相似,我们就可以不用一遍又一遍的安装数据库软件了,我们可以为了更快的完成安装工作,在静默安装,图形安装的选择之外,还有克隆安装.不过在10g,11g的版本中还是存在一定的差别.虽然方法有差别,但是思路都是一致的. 我们可以从源环境中直接把ORACLE_HOME给打个包,在目标环境解压即可.这个时候尽管你去尝试sqlplus,exp这些工具也能用,但是还是存在很大的风险,毕竟别把它当成绿色版的.出了问题谁都兜不住. 11g的环境中,可以使用下面的方式来

10g和11g中的一些差别

最近有时候看官方文档,感觉11g里面已经有了很多的变化,无论是使用还是安装上的细节上,11g似乎总是能够带给我更多的惊喜.而从以往的使用情况中感觉10g已经足够了,但是越多的使用11g,逐渐的改变了自己的固有思维,很多原来不好,不方便的操作习惯都得到了很大的改善.我就从10g和11g共有的一些细节之处来一窥两个版本中的差别.细节还是太多,我就扒出小部门. 大体会从下面几个部分进行对比和说明,有一些部分已经写了一些文章了,所以突然回顾一下会发现原来这些看似清汤寡水的文章里面还是有值得推敲的东西.

Oracle 11g R2 手动建库(create database manually)

      手动创建数据库是DBA们经常遇到的情形,因为有些情况下无法提供GUI环境.实际上手动建库,只要设置好了相关的参数或值,也是非常方便的.本文基于Oracle 11g首先描述了手动建库的大致步骤并给出示例演示.最后提供了一个shell脚本直接执行来实现手动建库.在执行前该脚本可根据你的路径进行适当的修改.   一.手动建库大致步骤    设置环境变量.bash_profile    创建参数文件(位置:$ORACLE_HOME/dbs)    创建目录结构    执行建库脚本   二.手

MySQL中create table语句的基本语法是_php基础

MySQL中create table语句的基本语法是:  Create [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]  [table_options] [select_statement]  TEMPORARY:该关键字表示用create table新建的表为临时表,此表在当前会话结束后将自动消失.临时表主要被应用于存储过程中,对于目前尚不支持存储过程的MySQL,该关键字一般不用.  IF NOT EX

在数据库‘master’中拒绝CREATE DATABASE权限问题的解决方法_MsSql

复制代码 代码如下: public partial class CMS_DBDataContext { partial void OnCreated() { // 如果数据库不存在则创建数据库 if (!this.DatabaseExists()) { this.CreateDatabase(); } } } 遇到了以下错误:在数据库'master'中拒绝CREATE DATABASE权限. 经查阅资料得知,运行 SQL Server 数据库,就必须在实例下创建数据库,不管是直接创建.还是附加.

在数据库‘master’中拒绝CREATE DATABASE权限问题的解决方法

复制代码 代码如下: public partial class CMS_DBDataContext { partial void OnCreated() { // 如果数据库不存在则创建数据库 if (!this.DatabaseExists()) { this.CreateDatabase(); } } } 遇到了以下错误:在数据库'master'中拒绝CREATE DATABASE权限. 经查阅资料得知,运行 SQL Server 数据库,就必须在实例下创建数据库,不管是直接创建.还是附加.