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[[email protected] 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 - oracleoracle    32431  32429  0 11:06 pts/1     00:00:00 -bashoracle    32526  32431  0 11:26 pts/1     00:00:00 vim .bash_profileroot      33101   21914   0 14:57 pts/0    00:00:00 su - oracleoracle    33103  33101   0 14:57 pts/0    00:00:00 -bashoracle    33205  33103  0 15:07 pts/0    00:00:00 ps -aeforacle    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[[email protected] 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 ptsoracle    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 parametersLRM-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_NAMECONTROL_FILESMEMORY_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		     stringdb_name 			                     string	     ora11gdb_unique_name			     string	     ora11gglobal_names			             boolean     FALSEinstance_name			             string	      ora11glock_name_space 		             stringlog_file_name_convert		     stringservice_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[[email protected] dbs]$ vim initorcl.ora db_name=orclmemory_targer=1G  diagnostic_dest=/u01/app/oracle/adminCONTROL_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=orclinstance_name=orcldb_domain=Oracle.Study.orgservice_names=orcl_Oracle.Study.org

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

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

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

# env | grep ORAORACLE_SID=orclORACLE_BASE=/u01/app/oracleORACLE_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 shmtmpfs                 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 tmpfstmpfs                   /dev/shm                tmpfs defaults,size=1G        0 0

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

su -c "mount -o remount,size=1G /dev/shm" root[[email protected] ~]$ df -h | grep shmtmpfs                 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 ProductionPL/SQL Release 11.2.0.1.0 - ProductionCORE	11.2.0.1.0	ProductionTNS for Linux: Version 11.2.0.1.0 - ProductionNLSRTL 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 orclUSER SYS IDENTIFIED BY oracleUSER SYSTEM IDENTIFIED BY oracleLOGFILE 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 512MAXLOGFILES   5MAXLOGMEMBERS 5MAXLOGHISTORY 1 MAXDATAFILES  3 CHARACTER SET AL32UTF8NATIONAL CHARACTER SET AL16UTF16EXTENT MANAGEMENT LOCAL DATAFILE ‘/u01/app/oracle/admin/oradata/orcl/system01.dbf‘ SIZE 325M REUSESYSAUX DATAFILE ‘/u01/app/oracle/admin/oradata/orcl/sysaux01.dbf‘ SIZE 325M REUSEDEFAULT TABLESPACE usersDATAFILE ‘/u01/app/oracle/admin/oradata/orcl/users01.dbf‘  SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITEDDEFAULT TEMPORARY TABLESPACE tempts1TEMPFILE ‘/u01/app/oracle/admin/oradata/orcl/temp01.dbf‘  SIZE 20M REUSEUNDO TABLESPACE undotbsDATAFILE ‘/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!

时间: 2024-10-24 20:41:28

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

So Easy! Oracle在Linux上的安装配置系列一

So Easy! Oracle在Linux上的安装配置系列一 本文为So Easy!Oracle在linux上的安装和配置序列的第一篇Oracle安装基础环境的搭建 VMware Workstation 11.0 配置和CentOS-6.6-x86_64安装 本文环境及所需软件: Win7 Sevice Pack1 内存 6GB VMware Workstation 11.0  build-2305329 CentOS-6.6-x86_64-bin-DVD1.iso Xmanger Enterp

So Easy! Oracle在Linux上的安装配置系列四

So Easy! Oracle在Linux上的安装配置系列四  监听器的配置 在创建了数库和各种数据库对象并装载了数据后,下一步是在数据库服务器与使用它的用户之间建立连 接,Oracle Net Services使这种连接成为可能.Oracle Net Services组件必须"存活"在客户机和服务器上,它们一般使用TCP/IP网络协议来建立客户机和数据库服务器之间的网络连接. 本文官方文档位置: http://docs.oracle.com/cd/E11882_01/network.

So Easy! Oracle在Linux上的安装配置系列七

So Easy! Oracle在Linux上的安装配置系列六 上几篇中,我们安装了oracle数据库软件,创建了数据库配置了监听,本篇是本系统文章的最后一篇,Oracle企业管理器的创建. 当完成了以上所有步骤后使用 $emctl start dbconsole 启动oracle企事业管理器,会出现以下错误,提示说没有设置ORACLE_UNQNAME环境变量 [[email protected] ~]$ emctl start dbconsoleEnvironment variable ORAC

So Easy! Oracle在Linux上的安装配置系列五

So Easy! Oracle在Linux上的安装配置系列五 本篇是监听器的配置的续篇,上一小节我们创建了一个监听器,创建了密码文,在监听和实例都启动的情况下,从远程windows即时客户端连接到了oracle服务器.本篇我将继续说监听器,还将完成相关的实验 以下内容整理自网络 Oracle 监听器 Listener 是一个重要的数据库服务器组件,在整个 Oracle 体系结构中,扮演着重要的作用.它负责管理 Oracle 数据库和客户端之间的通讯,它在一个特定的网卡端口(默认是TCP 1521

So Easy! Oracle在Linux上的安装配置系列二

本篇是So Easy!Oracle11gr2在linux上的安装配置的第二篇,本篇将讲述oracle11g r2的安装 oracle安装的前期准备 oracle的安装 工具软件rlwrap-0.42.tar.gz的安装 oracle环境变量设置 文档位置: http://docs.oracle.com/cd/E11882_01/install.112/e24326/toc.htm 1.oracle安装的前期准备 7安装Linux的一些基础开发包 # export LANG=en_US.UTF-8

So Easy! Oracle在Linux上的安装配置系列六

oracle数据库的几种连接方法 上篇内容回顾 一个监听器配置文件中有一个或多个监听的协议地址,支持服务器的信息和控制运行时行为的参数,监听器配置存储在名为listener.ora的配置文件中,因为所有的配置参数都有默认值,所以在没有配置的情况下它仍然可以被启动和使用,这个默认监听器名字是LISTENET,它监听在以下TCP/IP协议地址,(ADDRESS=(PROTOCOL=tcp)(HOST=host_name)(PORT=1521))但这个默认监听器它在启动时不支持任何的服务 监听器转发客

linux上Elasticsearch 安装配置、网页访问

一.ElasticSearch简述 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的.我们希望搜索解决方案要运行速度快,我们希望能有一个零配

ftp协议详解与vsftpd在linux上的安装配置

什么是FTP? FTP,文件传输协议,可以实现在网络上传输多种类型的文件 一个完整的FTP文件传输需要建立两种类型的连接,先建立控制连接,然后建立数据连接 控制连接:客户端首先向服务端的TCP21号端口发起建立连接的请求,服务器接收请求,完成控制连接的建立 数据连接:控制连接建立后,开始建立数据连接,用于传输文件.数据连接有主动传输模式和被动传输模式. 主动传输模式图 被动传输模式图 主动传输和被动传输的优缺点: 1.主动传输对FTP服务器的管理有利,但对客户端不利,因为客户端的防火墙可能会禁止

linux上svn安装配置

1       SVN源码包下载 subversion-1.4.4.tar.bz2       http://subversion.tigris.org/downloads/subversion-1.4.4.tar.bz2 subversion-deps-1.4.4.tar.bz2  http://subversion.tigris.org/downloads/subversion-deps-1.4.4.tar.bz2 2       编译步骤 执行以下2条命令,解压得到源程序: tar -jx