So Easy! Oracle在Linux上的安装配置系列三使用create database创建数据库

本文为So Easy! Oracle在Linux上的安装配置系列的第三篇,使用create database创建数据库,本序列第一篇介绍了学习实验环境的搭建包括:在win 7中使用VMware Workstation 创建虚拟机,安装CentOS-6.6-x86_64,网络配置 和使用xshell连接远程linux服务器,上传Oracle软件和使用操作系统安装光盘搭建本地yum源,第二篇专门说了Oracle11g R2在CentOS6.6上的安装,包括Oracle安装前的准备工作,并以图文详细介绍了安装过程,安装界面乱码问题,还说了工具软件rlwrap的安装和配置,安装完软件之后,还设置了oracle用户的环境变量.


在上一篇的结尾设置了Oracle用户的环境变量,但是出于实验目的,最重要的一个环境变量oracle_sid并没有设置.


本文文档位置:

http://docs.oracle.com/cd/E11882_01/server.112/e25494/create.htm#CIAEJDBE

文档一开始就说了几个最重要的oracle用户环境变量,包括oracle_home,oracle_sid,path,这几个环境变量的正确设置 ,是create database执行成功的关键


  1. 名词解释

  2. 数据库创建前的准备

  3. 创建初始化参数文件 

  4. 使用create database创建数据库

  5. 运行脚本创建数据字典


1. 名词解释

①、数据库(database)

       物理操作系统文件或磁盘的集合是一个静态的概念

②、实例(instance):

       一组Oracle后台进程/线程以及一个共享内存区,这些内存由同一个计算机上运行的线程/进程共享

③、参数文件

       数据库的参数文件,通常称为初始文件,这个文件告诉oracle实例在哪里可以找到控制文件,并且指定某些初始化参数,这些参数定义了某种内存结构有多大等设置 默认名init<ORACLE_SID>.ora   Oracle,

Oracle9iR1开始引入了一个改进的新服务器参数文件(server parameter file)简称为SPFILE默认名为spfile<ORACLE_SID>,这两个文件的默认存放位置为$ORACLE_HOME/dbs. 数据库参数是一个键/值对 如db_name=ora11g,当oracle实例启动会从参数文件中读取初始化参数,create database语句创建数据库时最少的初始文件必须包含db_name,此参数和oracle_sid环境变量的值相同,其它参数可以使用默认值。oracle启动时会搜索服务器参数文件(spfile),如果找不到spfile则会查找文本的初始文件。

参数文件的文档位置:

http://docs.oracle.com/cd/E11882_01/server.112/e25494/create.htm#i1013946

④、 控制文件

        控制文件记录oracle数据库的物理结构,是一个相当小的二进制文件,其中包含Oracle需要的其他文件的一个目录。参数文件告诉实例控制文件的位置,控制文件则告知实例数据库和在线重做日志文件的位置。控制文件包括数据库名,数据库和在线重做日志文件的位置,创建数据库的时间戳,当前日志序列号,检查点等 .控制文件在发出create database语句时被创建,控制文件的文件名由参数文件中的CONTROL_FILER指定 

参数文件中的控制文件的例子如:(/u01/app/oracle/admin/control目录必须先创建)

CONTROL_FILES = (/u01/app/oracle/admin/control/control01.ctl,
                 /u01/app/oracle/admin/control/control02.ctl, 
                 /u01/app/oracle/admin/control/control03.ctl)

作为实验环境控制文件都以不同文件名保存在同一目录下,生产环境中建议多路保存

控制文件的文档位置:

http://docs.oracle.com/cd/E11882_01/server.112/e25494/control.htm#g1009963


2 . 数据库创建前的准备

上一篇中我们安装了Oracle Database 11g 11.2.0.1。我们执行一个纯软件的安装 ,不包括初始的"启动"数据库,除了软件外什么都没有。

切换到oracle初始文件的目录,可以看到除oracle提供的一个初始文件模板外,这个目录中什么内容也没有

$ cd $ORACLE_HOME/dbs 
$ pwd
/u01/app/oracle/product/11.2.0/db_1/dbs
[oracle@Oracle dbs]$ ls
init.ora

使用linux的ps命令.查看oracle软件所有者运行的所有进程,这里oracle是软件的所有者,可以看到此时没有任何Oracle数据库进程 

$ ps -aef | grep oracle 
root      32429   22185  0 11:06 pts/1     00:00:00 su - oracle
oracle    32431  32429  0 11:06 pts/1     00:00:00 -bash
oracle    32526  32431  0 11:26 pts/1     00:00:00 vim .bash_profile
root      33101   21914   0 14:57 pts/0    00:00:00 su - oracle
oracle    33103  33101   0 14:57 pts/0    00:00:00 -bash
oracle    33205  33103  0 15:07 pts/0    00:00:00 ps -aef
oracle    33206  33103  0 15:07 pts/0    00:00:00 grep oracle

使用linux的ipcs -a查看显示unix进程间的通信设备,如共享内存,信号量等 ,可以看到目前系统中没有任何通信设备 

$ ipcs -a 

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      

------ Semaphore Arrays --------
key        semid      owner      perms      nsems    

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages

启动SQL *Plus,并作为sysdba连接 ,开始时假设还没有设置环境变量ORACLE_SID,将看到:

$ sqlplus  / as sysdba 

SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 15 15:10:50 2015

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

ERROR:
ORA-12162: TNS:net service name is incorrectly specified


Enter user-name:

有错误发生,因为数据库软件不知道该连接谁。连接时,Oracle软件将查找一个TNS连接字符串(一个网络连接)。如果像这个例子,没有连接字符串,Oracle软件将查找ORACLE_SID的变量。ORACLE_SID是Oracle的站点标识符,它是访问实例的键,如果像下面这样设置ORACLE_SID

export ORACLE_SID=ora11g 

连接将会成功,SQL*Plus报告称连接上了一个空闲的实例:

$ export ORACLE_SID=orcl
[oracle@Oracle dbs]$ sqlplus  / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 15 15:13:25 2015

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to an idle instance.

SQL>

实例现在只包括一个oracle服务器进程,此时还没有分配共享内存,也没有其他进程 

$ ps -aef | grep oracle | grep -v pts
oracle    33228  33227  0 15:13 ?        00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
$ ipcs -a

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      

------ Semaphore Arrays --------
key        semid      owner      perms      nsems    

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages

下面启动实例

SQL> startup 
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file ‘/u01/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora‘

注意关于丢失文件initorcl.ora的错误。那个文件为init.ora文件,通常叫做参数文件,是启动实例时必须要有的一个文件 ,启动实例时我们需要有一个参数文件 或者要一个存储参数文件 


3. 创建初始化参数文件 

现在就来创建参数文件并放入启动数据库实例的最少信息,默认情况下,文件位于$ORACLE_HOME/dbs目录,名字init${ORACLE_SID}.ora

只需要有db_name就可以启动数据库实例,但是oracle推荐最小初始化参数为:

DB_NAME
CONTROL_FILES
MEMORY_TARGET

DB_NAME:参数设置数据库的名字。这量个强制性的参数,其值与创建的数据库名称相同。DB_NAME的值应该与ORACLE_SID环境变量的值相同。此参数在数据库创建后不能更改.DB_NAME的值最多为8个字符

CONTROL_FILES:控制文件是保存数据文件名和位置以及许多其他重要信息的关键文件。数据库只需要一个控制文件,但因为这是一个非常重要的文件,所以总会保存多个副本。多路复用控制文件的方法是在CONTROL_FILES参数中指定多个位置,这个oracle强烈推荐的参数

MEMORY_TARGET:设置这个参数可以使oracle的内存管理完全自动化,这个参数指定分配给oracle的内存。数据库将调优SGA和PGA组件的值,使它们的和等于MEMORY_TARGET参数值,可以KB,MB或GB为单位设置这个值

 为了以后创建监听器的实验,这里还有几个参数需要注意,这几个参数可以在一台安装并创建了数据库的机器上使用SHOW PARAMETER NAME看到如下:

SQL> SHOW PARAMETER NAME 

NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert     string
db_name                     string     ora11g
db_unique_name     string     ora11g
global_names             boolean     FALSE
instance_name             string      ora11g
lock_name_space             string
log_file_name_convert     string
service_names             string      ora11g

DB_UNIQUE_NAME:参数指定数据库的全局名称.默认和db_name相同。如果是手动设置一般格式为database_naem.database.domaim.

INSTANCE_NAME:在单一实例环境中,INSTANCE_NAME参数具有与DB_NAME参数相同的值,默认值实例SID

SERVICE_NAME:为数据库服务提供一个名字,可以随意起一个名字,默认值DB_NAME.DB_DOMAIN

DIAGNOSTIC_DEST:Oracle Database 11g为存储诊断信息使用一种新的结构,称为Automatic Diagnostic Repository(ADR).用初始化参数DIAGNOSTIC_DEST指定这个目录的位置。DIAGNOSTIC_DEST参数以下面的方式指定ADR的结构 

<diagnostic_dest>/diag/rdbms/<dbname>/<instname>

ADR文档位置

http://docs.oracle.com/cd/E11882_01/server.112/e25494/control.htm#g1009963

此ADR主目录包含预警日志,跟踪文件,核心文件和意外事件文件

DB_DOMAIN:指定数据库的完全限定名,这个参数一般与拥有数据库的组织机构的名称相同

创建init.ora文件:

$ pwd 
/u01/app/oracle/product/11.2.0/db_1/dbs
[oracle@Oracle dbs]$ vim initorcl.ora

db_name=orcl
memory_targer=1G  
diagnostic_dest=/u01/app/oracle/admin
CONTROL_FILES = (/u01/app/oracle/admin/control/control01.ctl,
                /u01/app/oracle/admin/control/control02.ctl,
                /u01/app/oracle/admin/control/control03.ctl)
db_unique_name=orcl
instance_name=orcl
db_domain=Oracle.Study.org
service_names=orcl_Oracle.Study.org

这里的初始参数比启动实例的最小化参数多了好多,不过不管了,就这样吧!

为了创建数据库,首先必须使实例启动和运行。注意,实例可独立存在而无需附加到其上的数据库,活动的实例能够创建数据库。

实例启动必须满足的前提是:

# env | grep ORA
ORACLE_SID=orcl
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1

另外创建过程中所需要的目录必须先被创建好

准备将来存放数据文件、日志文件,控制文件,ADR的路径,。这几类文件的路径如下

如果没有事先创建好存储控制文件,ADR的路径,实例不能启动,如果没有准备好数据文件,日志文件的路径CREATE DATABASE语句将出错

$ mkdir -p  $ORACLE_BASE/admin/{control,logs/my,oradata/orcl}
$ tree $ORACLE_BASE/admin

技术分享

4. 使用create database创建数据库

经过以上步骤数据库创建准备工作完成,下面将使用CEATE DATABASE创建数据库

ADR(自动诊断信息库)存储在$ORACLE_BASE/admin下面,ADR所使用的目录将从这个目录派生

控制文件存话在:$ORACLE_BASE/admin/control下面

日志文件存放在:$ORACLE_BASE/admin/logs和$ORACLE_BASE/logs/my下面

数据文件在放在:$ORACLE_BASE/admin/oradata/orcl下面

以NOMOUNT方式启动实例,因为现在还没有任何控制文件可安装。如果使用普通的STRATUP命令,Oracle将查找控制文件。不用担心现在还没有创建它们,在创建数据库的过程中会创建的。

技术分享


以nomount方式装载数据库得到以上错误,产生这个错误的原因是共享内存太小,我们设置MEMORY_TARGET的内存为1g,,解决办法是增加系统的共享内存

$ df -h | grep shm
tmpfs                 931M     0  931M   0% /dev/shm

可以看到shm的大小为931M,但我们的MEMORY_TARGET设置为1G,MEMORY_TARGET 的设置不能超过 /dev/shm 的大小,知道问题所在就很容易解决,立马加大shm

$ su root  -c  "sed -i ‘s/tmpfs[[:blank:]]*defaults/tmpfs defaults,size=1G/‘ /etc/fstab" 
$ cat /etc/fstab | grep tmpfs
tmpfs                   /dev/shm                tmpfs defaults,size=1G        0 0

 可以通过重启使这个配置生效,也可以通过重新挂载来修改其大小:

su -c "mount -o remount,size=1G /dev/shm" root
[oracle@Oracle ~]$ df -h | grep shm
tmpfs                 1.0G     0  1.0G   0% /dev/shm

实例可以正常启动不报错了

技术分享


现在就有了所谓的"实例"。运行数据库所需的后台进程都有了,如进程监视器(process monitor)、日志写入器(log write,lgwr)等 

技术分享


再使用ipcs 命令,它会首次报告指出使用了共享内存和信号量

技术分享


可在这一步执行简单的查询验证数据库版本

SQL> SELECT * FROM v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production


也可以查看ADR(自动诊断消息库)的目录结构

技术分享


可再预警日志中查看oracle实例的创建过程

$ cd $ORACLE_BASE/admin/diag/rdbms/orcl/orcl/trace 
$ tail -f alert_orcl.log  

Oracle将所有启动和关闭以及实例创建和例行数据库数据库操作的信息写预警日志。预警日志还列出init.ora文件中的所有非默认的初始化参数。请注意所有Oracle进程的启动,这些进程包括:

DBWn  :(Database Block Write)数据库块写入器

LGWR  :(Log Writer Process)日志写入器

PMON  :(Porcess Monitor)进程监视器

CKPT    :(Checkpoint Process)检查点进程

SMON :(System Monitor Process)系统监视器

RECO   :(recoverer process)分布式数据库恢复

注意,我们还没有"数据库"呢!此时,只有数据库之名(在所创建的参数文件中),而没有数据库之实。

如何试图“装载”这个数据库,就会失败,因为数据库根本就不存在,下面就来创建数据库,可以在预警日志中查看数据库的创建过程:

CREATE  DATABASE orcl
USER SYS IDENTIFIED BY oracle
USER SYSTEM IDENTIFIED BY oracle
LOGFILE GROUP 1 (‘/u01/app/oracle/admin/logs/redo01a.log‘,‘/u01/app/oracle/admin/logs/my/redo01b.log‘) SIZE 100M BLOCKSIZE 512,
       GROUP 2 (‘/u01/app/oracle/admin/logs/redo02a.log‘,‘/u01/app/oracle/admin/logs/my/redo02b.log‘) SIZE 100M BLOCKSIZE 512,
       GROUP 3 (‘/u01/app/oracle/admin/logs/redo03a.log‘,‘/u01/app/oracle/admin/logs/my/redo03b.log‘) SIZE 100M BLOCKSIZE 512
MAXLOGFILES   5
MAXLOGMEMBERS 5
MAXLOGHISTORY 1
MAXDATAFILES  3
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
EXTENT MANAGEMENT LOCAL
DATAFILE ‘/u01/app/oracle/admin/oradata/orcl/system01.dbf‘ SIZE 325M REUSE
SYSAUX DATAFILE ‘/u01/app/oracle/admin/oradata/orcl/sysaux01.dbf‘ SIZE 325M REUSE
DEFAULT TABLESPACE users
DATAFILE ‘/u01/app/oracle/admin/oradata/orcl/users01.dbf‘  SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE tempts1
TEMPFILE ‘/u01/app/oracle/admin/oradata/orcl/temp01.dbf‘  SIZE 20M REUSE
UNDO TABLESPACE undotbs
DATAFILE ‘/u01/app/oracle/admin/oradata/orcl/undotbs01.dbf‘  SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

现在数据库已经有了,可以简单地查询一些Oracle V$视图(具体就是v$datafile、v$logfile和v$controlfile),列出构成数据库的文件:

列出数据文件:

SQL> SELECT name FROM v$datafile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/admin/oradata/orcl/system01.dbf
/u01/app/oracle/admin/oradata/orcl/sysaux01.dbf
/u01/app/oracle/admin/oradata/orcl/undotbs01.dbf
/u01/app/oracle/admin/oradata/orcl/users01.dbf

列出日志文件:

SQL> SELECT member FROM v$logfile;

MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/admin/logs/redo01a.log
/u01/app/oracle/admin/logs/my/redo01b.log
/u01/app/oracle/admin/logs/redo02a.log
/u01/app/oracle/admin/logs/my/redo02b.log
/u01/app/oracle/admin/logs/redo03a.log
/u01/app/oracle/admin/logs/my/redo03b.log

列出控制文件:

SQL> SELECT name FROM v$controlfile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/admin/control/control01.ctl
/u01/app/oracle/admin/control/control02.ctl
/u01/app/oracle/admin/control/control03.ctl

5. 运行脚本创建数据字典

运行脚本创建必须的数据字典,同名对象和PL/SQL包

在SQL * Plus中以sysdba身份运行以下两个脚本

@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql

在SQL * Plus中以system身份运行以下脚本

@?/sqlplus/admin/pupbld.sql

可以运行另外的脚本添加符加的选项

文档位置

http://docs.oracle.com/cd/E11882_01/server.112/e40402/scripts.htm#REFRN005


本篇的内容到此为止,恭候阅读,不对的地址请批评指证,讨论. 

                                                                                                                                                    qq:276631587

                                                                                                                                                good luck!

本文出自 “关注linux技术” 博客,请务必保留此出处http://werewolftj.blog.51cto.com/1606482/1633150

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。