oracle rac手工创建em,手工创建Oracle数据库

Oracle服务器由下列两个实体组成:实例(Instance)与数据库。实例由存储结构和进程组成,并且只短暂存在于RAM和CPU中。数据库由磁盘上的物理文件组成。

实例与数据库的关系是一对一的,一个实例连接一个数据库,但也有可能是多对一的,即不同计算机上的多个实例打开共享磁盘系统上的一个公用数据库。这种多对一关系被称为实际应用群集(Real

Application Clusters,简写为RAC)。

下面我们根据这张图,来详细了解关于Oracle的体系结构:

a4c26d1e5885305701be709a3d33442f.png

1、实例:存储结构与进程

一个Oracle实例由一块被称为系统全局区(System Global

Area,简写为SGA)的共享内存以及若干进程组成。SGA至少包含共享池、数据库高速缓存区(Database Buffer

Cache)以及日志缓冲区这三种数据结构,此外还可能包含大池、Java池或流池。启动实例会确定上述某些SGA结构的大小,而其他一些SGA结构的大小可以动态变化。不过,创建数据库时并不会确定任何SGA结构的大小,我们可以随时停止和重新启动实例,每次都将得到一种完全不同的内存配置。

记住:如果在现场系统中频繁地改变内存配置,并且都属于需要关闭实例的变化类型,那以会不断出现停机,从而造成终端用户的不满。

要查看SGA的大小,我们可以通过如下语句:

#SQL> select * from

v$sga;

# # NAME

VALUE #

--------------------

----------

# Fixed

Size 1218868

#

Variable Size 79693516

#

Database Buffers 180355072

# Redo

Buffers 2973696

1.1、共享池(Shared Pool)

共享池是SGA中最关键的内存片段,特别是在性能和可伸缩性上。一个太小的共享池会扼杀性能,使系统停止,太大的共享池也会有同样的效果,将会消耗大量的CPU来管理这个共享池。不正确的使用共享池只会带来灾难。共享池主要又可以分为以下两个部分:

库缓存区(Library

Cache),也叫SQL语句缓冲区。当一个用户提交一个SQL语句,Oracle会将这句SQL进行分析(Parse),这个过程类似于编译,会耗费相对较多的时间。在分析完这个SQL,Oracle会把他的分析结果给保存在Shared

Pool的Library

Cache中,当数据库第二次执行该SQL时,Oracle自动跳过这个分析过程,从而减少了系统运行的时间。这也是为什么第一次运行的SQL

比第二次运行的SQL要慢一点的原因。

对于保存在共享池中的SQL语句,可以从v$Sqltext、v$Sqlarea中查询到,对于编程者来说,要尽量提高语句的重用率,减少语句的分析时间。一个设计的差的应用程序可以毁掉整个数据库的Share

Pool,提高SQL语句的重用率必须先养成良好的变成习惯,尽量使用Bind变量。

数据字典缓存区(Data Dictionary

Cache),存储最近使用的对象定义,包括对表、索引、用户的描述以及其他元数据的定义。将上述这些定义存储在内存中的,就不必重复读取磁盘上的数据字典,从而能提高性能。

1.2、数据库高速缓存区(Database Buffer

Cache)

Oracle执行SQL的工作区域。用户不必不断地更新磁盘上的数据,而是可以将数据复制至内存中的数据库高速缓存区中并在些进行更新。在理想情况下,所有被频繁的数据都位于数据库高速缓存区,从而最小化磁盘的I/O的需求。数据库的任何修改都在该缓冲里完成,并由DBWR进程将修改后的数据写入磁盘。由于操作系统寻址能力的限制,不通过特殊设置,在32位的系统上,块缓冲区高速缓存最大可以达到1.7G,在64位系统上,块缓冲区高速缓存最大可以达到10G。

1.3、日志缓冲区(Log Buffer)

日志文件的缓冲区,对数据库的任何修改都按顺序被记录在该缓冲,然后由LGWR进程将它写入磁盘。这些修改信息可能是DML语句,如(Insert,Update,Delete),或DDL语句,如(Create,Alter,Drop等)。日志缓冲区的存在是因为内存到内存的操作比较内存到硬盘的速度快很多,所以重作日志缓冲区可以加快数据库的操作速度,但是考虑的数据库的一致性与可恢复性,数据在重做日志缓冲区中的滞留时间不会很长。所以重作日志缓冲区一般都很小,大于3M之后的重作日志缓冲区已经没有太大的实际意义。

1.4、大池(Large Pool)

大池是一个可选区域。如果创建了大池,那么各种进程都会自动使用大池;否则,各种进程就只能使用共享池中的内存。大池的得名不是因为大,而是因为它用来分配大块的内存,处理比共享池更大的内存,在8.0开始引入。

下面对象使用大池:

MTS在SGA的Large Pool中分配UGA

语句的并行查询(Parallel Executeion of

Statements)允许进程间消息缓冲区的分配,用来协调并行查询服务器

备份(Backup)用于RMAN磁盘I/O缓存

1.5、Java程序缓冲区(Java Pool)

Java 的程序区,Oracle

8i以后,Oracle在内核中加入了对Java的支持。该程序缓冲区就是为Java

程序保留的。如果不用Java程序没有必要改变该缓冲区的默认大小。

除SGA存储结构外,实例至少还具有5个进程:系统监视(System

Monitor,简写为SMON)进程;进程监视(Process Monitor,简写为PMON)进程;数据库写入器(Database

Writer,简写为DBWn,最多可以使用10个这样的进程)进程;日志写入器(Log

Writer,简写为LGWR)进程;检查点(CheckPoint,简写为CKPT)进程。不论实例中是否确实有会话登录,甚至是还未创建或打开数据库,上述进程总是在实例运行时存在,因此它们都被称为“后台”进程。

我们可以通过如下方法查看后台进程:

?[Copy to

clipboard]View Code BASH

$ ps -ef

| grep ora_

oracle

3461 1 0

18:31 ? 00:00:00

ora_pmon_ocp

oracle

3467 1 0

18:31 ? 00:00:00

ora_dbw0_ocp

oracle

3469 1 0

18:31 ? 00:00:00

ora_lgwr_ocp

oracle

3471 1 0

18:31 ? 00:00:00

ora_ckpt_ocp

oracle

3473 1 0

18:31 ? 00:00:01

ora_smon_ocp

oracle

3955 3934 0

20:08 pts/1 00:00:00 grep

ora_

1.7、SMON

主要功能是打开数据库,从而支持实例与数据库之间的连接。在正常运行期间,SMON能够完成一系列监视与整理操作。

1.8、PMON

管理用户会话,这个进程会在某个会话出现问题时执行适当的操作。用于清除失效的用户进程,释放用户进程所用的资源。

1.9、DBWn

负责数据库的所有写入。没有任何会话能够不断地更新磁盘上的数据。会话只更新数据库高速缓存区中的数据,之后,所有的更新都通过DBWn汇集写入磁盘。

1.10、LGWR

应用于数据库高速缓存区中数据的所有变化写入磁盘上的联机重做日志文件。与

DBWn不同的是,这种磁盘写行为尽可能接近于实时完成。

1.11、CKPT

能够确保实例不时地与数据库同步。

此外,Oracle

10G还存在更多的后台进程,但这5个,我们必须记住。

2、数据库:物理结构

Oracle数据库由3种文件类型组成,外面还存在其它一些文件,但都是可选的。必须的文件是控制文件、联机重做日志文件以及数据文件。外部文件则包括初始化参数文件、口令文件与归档重做日志文件。

2.1、控制文件

每个数据库都具有一个控制文件(Controlfile),我们总是会创建这个控制文件的多个副本,从而在一个副本遭到破坏时能保证数据库的正常动作。控制文件虽然很小,通常只有几兆,但是至关重要,不可或缺。它包含指向数据库其余部分(联机重做日志与数据文件位置)的指针,此外还存储维护数据库完整性所需的信息(各种重要的序列号与时间标记)。如果使用Reover

Manager(简写为RMAN),那么某些备份信息也会被存储在控制文件中。

控制文件的查询:

SQL> select NAME from

v$controlfile;

NAME

----------------------------------------

/u02/oradata/ocp/control01.ctl

/u02/oradata/ocp/control02.ctl

/u02/oradata/ocp/control03.ctl

记住,控制文件的添加、删除或者移动这些操作只能在停机时间进行。

2.2、联机重做日志文件

每个数据库都具有至少两个联机重做日志文件(Redo Log

File),与控制文件一样,总会为每个联机重做日志文件创建多个副本。联机重做日志由若干组重做日志文件组成,其中每个文件都被称为一个成员(Member)。要运行Oracle,需要至少两组重做日志文件,每组重做日志文件至少具有一个成员。考虑性能,我们可以创建两组以上的重做日志文件;考虑安全,可以为每组重做日志文件创建多个成员。最少需要两组重做日志文件,这是为了使一组重做日志文件能接受当前的变化,而另外的一组重做日志文件能够进行归档。我们是不必在数据库的创建阶段担心这个问题的,稍后的任意时间里,我们移动、添加或删除联机重做日志文件都可以在不停机的情况下“联机”执行。

下面的图,应该表明了切换归档的意思:

a4c26d1e5885305701be709a3d33442f.png

日志组的查询:

SQL> select GROUP#,BYTES,STATUS

from v$log;

GROUP#

BYTES STATUS

---------- ----------

----------------

1

52428800 INACTIVE

2

52428800 CURRENT

3

52428800 INACTIVE

日志文件的查询:

SQL> select GROUP#,STATUS,TYPE

from v$logfile;

GROUP#

STATUS TYPE

---------- ------- -------

3 STALE

ONLINE

2

ONLINE

1 STALE

ONLINE

2.3、数据文件

数据库创建阶段,必须至少创建两个数据文件。实际使用的数据库具有更多的数据文件。在数据库生存期内的任意时刻,数据文件都可以被重命名、重新分配大小、移动、添加或删除。

数据文件的查询:

SQL> select NAME from

v$datafile;

NAME

----------------------------------------

/u02/oradata/ocp/system01.dbf

/u02/oradata/ocp/undotbs01.dbf

/u02/oradata/ocp/sysaux01.dbf

/u02/oradata/ocp/users01.dbf

/u02/oradata/ocp/example01.dbf

记住,对某些数据库文件的某些操作需要在停机时间进行。

3、逻辑结构:表空间与段

Oracle使用术语“段(Segment)”来描述包含数据的所有结构。最典型的段是包含数据记录的表,不过Oracle中还可能存在十几种段类型。我们这里关心表段、索引段以及撤销段。表段包含信息记录;索引段是一种用于快速访问任意特定记录的机制;撤销段是一种数据结构,这种数据结构被用于存储颠倒或回滚不希望持久的事务可能需要的信息。

借助于表空间,Oracle可以从物理的存储结构中抽取出逻辑的存储结构。从逻辑上看,表空间(TableSpace)是一个或多个段的集合;从物理上看,表空间是一个或多个数据文件的集合。按照关系分析,段与数据文件之间存在多对多关系:一个表可以被分割在多个数据文件中;一个数据文件可能包含多个表。通过在段与数据文件之间插入表空间实体,Oracle就解决了上述的多对多关系。

在数据库创建阶段,必须创建许多组成数据字典的段。这些段被存储在名为SYSTEM与SYSAUX的两个表空间内。

记住:在Oracle

10G版本中,创建数据库时必须创建SYSAUX表空间。如果没有进行指定,那么系统会默认创建这个表空间。

4、数据字典

数据字典被存储为SYSTEM与SYSAUX表空间内的若干段。

组成数据字典的段在许多方面与其他段相似,它们都只具有表与索引。这些段的主要差异在于:数据字典表在数据库创建阶段生成,并且不允许被直接访问。

为了查询数据字典,Oracle提供了一组视图。这些视图存在3种形式,前缀分别为“DBA_”、“ALL_”、“USER_”。

前缀为“USER_”的视图:视图内填充的记录描述了查询该视图用户拥有的对象,因此不同的用户不可能看到相同的内容。

前缀为“ALL_”的视图:视图内填充的记录搭档了访问的对象。因些,ALL_TABLES视图包含的记录既可以描述你自己的表,也可以描述给定可视权限的、属于其他用户的表。

前缀为“DBA_”的视图:视图内填充的记录描述了数据中的所有对象。因此,无论表是由哪个用户创建的,对于数据库中的每个表来说,DBA_TABLES视图都包含用于该表的一个记录。

注意:显示数据库中所有表的视图是DBA_TABLES,而不是ALL_TABLES。

5、管理工具

Oracle Database 10G提供两种管理环境:Enterprise Manager

Database Control 与 Enterprise Manager Grid Control。暂时我们用Database

Control吧。

6、外部文件

数据库外部存在3种文件类型:参数文件、口令文件以及归档日志文件。

6.1、参数文件

参数文件定义了实例。参数文件中指定的实例参数主要控制各种存储结构的大小以及后台进程的行为,同时还会设置特定的限制。除了DB_NAME(数据库名称)之外,所有参数都存在默认值。这样,我们就能够完全依赖于默认参数值来启动一个实例。许多参数是动态的(参数值在实例运行和数据库打开时会发生变化),不过另外一些参数的值在实例启动时是固定的。除了DB_BLOCK_SIZE之外,通过关闭数据库、关闭实例、编辑参数文件以及再次启动数据库,所有的参数都能够在数据库创建之后被改变。

6.2、口令文件

Oracle提供两种不基于数据字典的身份验证方式,操作系统身份验证以及口令文件身份验证。

6.3、归档日志

归档日志是已填满的联机重做日志文件的副本。

暂时到这这吧,内容有些多,在创建数据库前先交代好数据库的一些文件等东西,之后就是用工具DBCA创建数据库和手动脚本创建数据库了。

下面我们来学习怎么在Linux环境下创建一个新数据库。

一、Database Configuration Assistant(DBCA)创建数据库

1、以Oracle用户登录到Linux系统。

2、改下显示编码吧,要不然出现的提示框界面会和Oracle安装时候一样。改编码命令:

$ LANG="en_US"

3、由于先前我们已经把环境变量设置好了,所以在这直接敲命令。

$ dbca

4、出现提示框界面,让我们一步步来。(因为在Linxu环境下截不到图,这里用文字表达)

5、在提示框Select the operation you wish to perform内选中 Create a

database。

6、在提示框Select a template 内选中Custom database。

7、将Global database name 和 SID 都指定为ocp(可以自己写数据库名和实例名)。

8、选中复选框Configure the database with enterprise manager 与 Use

database control for database management,不要选中复选框Use grid control

for database management,不要选中复选框Enable email notification 或 Enable

daily backup。

9、选中复选框Use the same password for all

accounts,同时输入口令。(这里自己填吧)

10、选择File System 作为存储机制。

11、选择Use file locations from template作为存放数据库文件的位置。

12、选中复选框Specify flash recovey area,不过不要选中复选框Enable

archiving。

13、选中复选框Enterprise Manager Repository。在提示框Standard Database

Components内取消所有复选框的选中状态。

14、保留Memory、Sizing、Character Sets和Connection Mode的默认设置。

15、保留Database Storage的默认设置。

16、选中复选框Create database和Generate database creation

scripts(这个路径,有兴趣可以记下来,等下用),取消复选框Save as a database

template的选中状态。

17、给出了创建实例和数据库的详细信息,OK。

18、开始创建。

19、创建完成以后,我们要设置环境变量的SID。

$ export ORACLE_SID=ocp

20、这时候创建数据库过程完全完成。我们可以进行连接并查询。

$ sqlplus

SQL*Plus: Release 10.2.0.1.0 - Production on Thu Sep 18 00:26:52

2008

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

Enter user-name: / as sysdba Connected to an idle

instance.

SQL> select name,open_mode from

v$database;

NAME OPEN_MODE

--------- ----------

OCP READ WRITE

二、利用脚本手动创建数据库

在创建之前,先看下建库的脚本吧。在哪?你问我?。。。。刚刚用DBCA创建数据库的时候最后一步,不是有吗,呵呵。

找到/ora01/db/oracle/admin/ocp/script 这个文件夹,里面就是数据库的创建脚本。

init.ora:参数文件。很多参数,只说一句,要了解所有参数!

###########################################

# Copyright (c) 1991, 2001, 2002 by Oracle Corporation

###########################################

###########################################

# Cache and I/O

###########################################

db_block_size=8192

db_file_multiblock_read_count=16

###########################################

# Cursors and Library Cache

###########################################

open_cursors=300

###########################################

# Database Identification

###########################################

db_domain=""

db_name=ocp

###########################################

# Diagnostics and Statistics

###########################################

background_dump_dest=/ora01/db/oracle/admin/ocp/bdump

core_dump_dest=/ora01/db/oracle/admin/ocp/cdump

user_dump_dest=/ora01/db/oracle/admin/ocp/udump

###########################################

# File Configuration

###########################################

control_files=("/ora01/db/oracle/oradata/ocp/control01.ctl",

"/ora01/db/oracle/oradata/ocp/control02.ctl",

"/ora01/db/oracle/oradata/ocp/control03.ctl")

db_recovery_file_dest=/ora01/db/oracle/flash_recovery_area

db_recovery_file_dest_size=2147483648

###########################################

# Job Queues

###########################################

job_queue_processes=10

###########################################

# Miscellaneous

###########################################

compatible=10.2.0.1.0

###########################################

# Processes and Sessions

###########################################

processes=150

###########################################

# SGA Memory

###########################################

sga_target=262144000

###########################################

# Security and Auditing

###########################################

audit_file_dest=/ora01/db/oracle/admin/ocp/adump

remote_login_passwordfile=EXCLUSIVE

###########################################

# Sort, Hash Joins, Bitmap Indexes

###########################################

pga_aggregate_target=87031808

###########################################

# System Managed Undo and Rollback Segments

###########################################

undo_management=AUTO

undo_tablespace=UNDOTBS1

ocp.sql:初始化参数之后会调用这个脚本,请看下面脚本代码最后会调用另外5个脚本。

set verify off

PROMPT specify a password for sys as parameter 1;

DEFINE sysPassword = &1

PROMPT specify a password for system as parameter 2;

DEFINE systemPassword = &2

PROMPT specify a password for sysman as parameter 3;

DEFINE sysmanPassword = &3

PROMPT specify a password for dbsnmp as parameter 4;

DEFINE dbsnmpPassword = &4

host /ora01/db/oracle/product/10.2.0/db/bin/orapwd

file=/ora01/db/oracle/product/10.2.0/db/dbs/orapwora

password=&&sysPassword

force=y

@/ora01/db/oracle/admin/ocp/scripts/CreateDB.sql

@/ora01/db/oracle/admin/ocp/scripts/CreateDBFiles.sql

@/ora01/db/oracle/admin/ocp/scripts/CreateDBCatalog.sql

@/ora01/db/oracle/admin/ocp/scripts/emRepository.sql

@/ora01/db/oracle/admin/ocp/scripts/postDBCreation.sql

CreateDB.sql:第一个脚本,首先使用用于口令文件身份验证的语法来连接实例。接着,使用前面的参数文件,通过执行startup

nomount命令在内在中构建实例。完成后,该SQL文件会创建一个数据库,我们可以得到一个在内存中运行的实例与一个数据库。

connect SYS/&&sysPassword as

SYSDBA

set echo on

spool /ora01/db/oracle/admin/ocp/scripts/CreateDB.log

startup nomount

pfile="/ora01/db/oracle/admin/ocp/scripts/init.ora";

CREATE DATABASE "ocp"

MAXINSTANCES 8

MAXLOGHISTORY 1

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

DATAFILE '/ora01/db/oracle/oradata/ocp/system01.dbf'

SIZE 300M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE

UNLIMITED

EXTENT MANAGEMENT LOCAL

SYSAUX DATAFILE

'/ora01/db/oracle/oradata/ocp/sysaux01.dbf'

SIZE 120M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE

UNLIMITED

SMALLFILE DEFAULT TEMPORARY TABLESPACE TEMP

TEMPFILE '/ora01/db/oracle/oradata/ocp/temp01.dbf'

SIZE 20M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED

SMALLFILE UNDO TABLESPACE "UNDOTBS1"

DATAFILE '/ora01/db/oracle/oradata/ocp/undotbs01.dbf'

SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K M

AXSIZE UNLIMITED

CHARACTER SET WE8ISO8859P1

NATIONAL CHARACTER SET AL16UTF16

LOGFILE GROUP 1 ('/ora01/db/oracle/oradata/ocp/redo01.log') SIZE

51200K,

GROUP 2 ('/ora01/db/oracle/oradata/ocp/redo02.log') SIZE

51200K,

GROUP 3 ('/ora01/db/oracle/oradata/ocp/redo03.log') SIZE

51200K

USER SYS IDENTIFIED BY

"&&sysPassword" USER

SYSTEM

IDENTIFIED BY

"&&systemPassword";

spool off

CreateDBfiles.sql:会创建一个表空间,这个表空间被用作为用户数据的默认存储位置。

CreateDBcatalog.sql:会生成数据字典视图与补充的PL/SQL程序包。

emRepository.sql:会生成Enterprise Manager Database

Control工具。

postDBcreation.sql:会进行整理工作。

OK,看完了脚本,我们就来动手用SQL脚本来创建我们自己的数据库吧。

手动建库其实也可以分为两种,一种是不使用OMF创建,另一种是使用OMF创建。

一、不使用OMF手动创建数据库

1、创建文件夹。(根据刚才/ora01/db/oracle/admin/ocp中的目录,我们也同样创建)

$ mkdir /ora01/db/oracle/admin/mydb

$ cd /ora01/db/oracle/admin/mydb

$ mkdir bdump

$ mkdir udump

$ mkdir cdump

$ mkdir pfile

$ mkdir script

$ mkdir /ora02/oradata/mydb

2、创建参数文件,其实参数文件各各数据库的内容差不多,我们只需要改中间的一些内容就可以,所以我们把ocp的参数文件Copy过来,改成我们需要的。

$ cp /ora01/db/oracle/admin/ocp/scripts/init.ora

/u01/db/oracle/admin/mydb/pfile

$ vi /ora01/db/oracle/admin/mydb/pfile/init.ora

根据上面我们所看到的init.ora进行如下修改:

?[Copy to clipboard]View Code INI

###########################################

# Copyright (c) 1991, 2001, 2002 by Oracle Corporation

###########################################

###########################################

# Cache and I/O

###########################################

db_block_size=8192

db_file_multiblock_read_count=16

###########################################

# Cursors and Library Cache

###########################################

open_cursors=300

###########################################

# Database Identification

###########################################

db_domain=""

db_name=mydb

###########################################

# Diagnostics and Statistics

###########################################

background_dump_dest=/ora02/oradata/mydb/bdump

core_dump_dest=/ora02/oradata/mydb/cdump

user_dump_dest=/ora02/oradata/mydb/udump

###########################################

# File Configuration

###########################################

control_files=("/ora02/oradata/mydb/control01.ctl",

"/ora02/oradata/mydb/control02.ctl",

"/ora02/oradata/mydb/control03.ctl")

db_recovery_file_dest=/ora01/db/oracle/flash_recovery_area

db_recovery_file_dest_size=2147483648

###########################################

# Job Queues

###########################################

job_queue_processes=10

###########################################

# Miscellaneous

###########################################

compatible=10.2.0.1.0

###########################################

# Processes and Sessions

###########################################

processes=150

###########################################

# SGA Memory

###########################################

sga_target=262144000

###########################################

# Security and Auditing

###########################################

audit_file_dest=/ora01/db/oracle/admin/mydb/adump

remote_login_passwordfile=EXCLUSIVE

###########################################

# Sort, Hash Joins, Bitmap Indexes

###########################################

pga_aggregate_target=87031808

###########################################

# System Managed Undo and Rollback Segments

###########################################

undo_management=AUTO

undo_tablespace=UNDOTBS1

3、如果电脑开起的时候实例被启动,请关闭,如果没有,则跳过此步。

$ sqlplus SQL*Plus: Release 10.2.0.1.0 - Production on Mon Sep 15 21:47:07

2008 Copyright (c) 1982, 2005, Oracle. All rights

reserved. Enter user-name: / as sysdba Connected to an idle instance. SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> exit 4、设置环境变量,把SID指向现在的mydb。

$ export ORACLE_SID=mydb

5、创建口令文件。

$ orapwd

file=/ora01/db/oracle/product/10.2.0/db/dbs/orapwmydb.ora

password=liguanghu entries=2

文件命名规则:orapw+实例名,所以我们这里是orapwmydb.ora。

entries:密码文件中可以存放的最大用户数,对应允许以sysdba/Sysoper权限登陆数据库的最大用户数,如果超过此限制,必须重建密码文件。

6、现在一切问题都搞定,那让我们来开启实例吧。

$ sqlplus /nolog SQL*Plus: Release 10.2.0.1.0 - Production on Mon Sep 15 22:23:32

2008 Copyright (c) 1982, 2005, Oracle. All rights

reserved. SQL> conn / as sysdba Connected to an idle instance. SQL> startup nomount

pfile="/ora01/db/oracle/admin/mydb/pfile/init.ora" ORACLE instance started. Total System Global Area 264241152

bytes Fixed Size 1218868 bytes Variable Size 88082124 bytes Database Buffers 171966464 bytes Redo Buffers 2973696 bytes

7、创建数据库脚本。

脚本虽然是同一种样式,但方法当然会有两种。

第一种,聪明偷懒的方法,学着上面的把CreateDB.sql文件给Copy到script

目录下,进行修改一下,呵呵,就成了我们这个数据库的脚本生成代码。

第二种,手敲吧。。。(这里,我选第二种,老Copy学不到东西了)

$ vi /ora01/db/oracle/admin/mydb/script/createdb.sql

新建的一个空的createdb.sql文件,写入。

create database mydb maxlogfiles 5 maxlogmembers 5 maxloghistory 1 maxdatafiles 100 maxinstances 1 user sys identified by oracle user system identified by oracle logfile group 1 ('/ora02/oradata/mydb/redo01.log') size 10m

reuse, group 2 ('/ora02/oradata/mydb/redo02.log') size 10m

reuse, group 3 ('/ora02/oradata/mydb/redo03.log') size 10m

reuse datafile '/ora02/oradata/mydb/system01.dbf' size 325m

reuse extent management local sysaux datafile '/ora02/oradata/mydb/sysaux01.dbf' size 325m

reuse default temporary tablespace temp tempfile '/ora02/oradata/mydb/temp01.dbf' size 20m

reuse undo tablespace undotbs1 datafile '/ora02/oradata/mydb/undo01.dbf' size 200m

reuse character set utf-8 national character set al16utf16; 8、执行创建数据库脚本。

SQL>

@/ora01/db/oracle/admin/mydb/script/createdb.sql

9、执行catalog.sql,创建数据库的数据字典视图。

SQL>

@/ora01/db/oracle/product/10.2.0/RDBMS/ADMIN/catalog.sql

10、执行catproc.sql,创建执行PL/SQL程序所需的所有包。

SQL>

@/ora01/db/oracle/product/10.2.0/RDBMS/ADMIN/catproc.sql

二、使用OMF手动创建数据库

1、启动数据库到mount。

$ sqlplus "/ as sysdba" SQL*Plus: Release 10.2.0.1.0 - Production on Sat Sep 20 06:28:34

2008 Copyright (c) 1982, 2005, Oracle. All rights

reserved. Connected to an idle instance. SQL> startup mount ORA-01078: failure in processing system

parameters LRM-00109: could not open parameter

file '/ora01/db/oracle/product/10.2.0/db/dbs/initmydb.ora'

出错拉!!!为什么呢,如果细心的话会发现其实在上一个手动建库的过程中间我们也有一步这样的步骤。当时我们用的是

SQL> startup nomount

pfile="/ora01/db/oracle/admin/mydb/pfile/init.ora"

当时指明了init.ora参数文件的位置,也就是说,当实例被启动需要参数文件的时候系统会自己到/ora01/db/oracle

/product/10.2.0/db/dbs/下去寻找一个名字init.ora的参数文件,前面因为要和DBCA建库的文件放置位置一样,所以我们用了那种方法,在这里我们改过来,用这种让系统自动去找的方便的方法。

$ cp

/ora01/db/oracle/admin/mydb/pfile/init.ora /ora01/db/oracle/product/10.2.0/db/dbs/initmydb.ora

OK!这样我们就可以启动数据库mount。

$ sqlplus "/ as sysdba" SQL*Plus: Release 10.2.0.1.0 - Production on Sat Sep 20 06:28:34

2008 Copyright (c) 1982, 2005, Oracle. All rights

reserved. Connected to an idle instance. SQL> startup mount ORACLE instance started. Total System Global Area 264241152

bytes Fixed Size 1218868 bytes Variable Size 88082124 bytes Database Buffers 171966464 bytes Redo Buffers 2973696 bytes Database mounted. $ sqlplus "/ as sysdba" SQL*Plus: Release 10.2.0.1.0 - Production on Sat Sep 20 06:28:34

2008 Copyright (c) 1982, 2005, Oracle. All rights

reserved. Connected to an idle instance. SQL> startup mount ORACLE instance started. Total System Global Area 264241152

bytes Fixed Size 1218868 bytes Variable Size 88082124 bytes Database Buffers 171966464 bytes Redo Buffers 2973696 bytes Database mounted. 2、将数据库设置为restricted session模式

# SQL> alter system enable restricted

session; #System altered.

3、使用drop database命令删除数据库,这个操作将删除所有的数据文件(不包括参数和密码文件)

SQL> drop database;

Database dropped. SQL> drop database;

Database dropped. 4、修改pfile文件/ora01/db/oracle/product/10.2.0/db/dbs/initmydb.ora,添加下列内容:

?[Copy to clipboard]View Code INI

db_create_file_dest='/ora02/oradata/'

db_create_online_log_dest_1='/ora02/oradata/'

5、修改createdb.sql脚本的内容。(因为我们这里是用的OMF方式创建,上一步我们已经指定了安装位置,Oracle会自动把数据文件等内容放到指定目录下)

create database mydb user sys identified by oracle user system identified by oracle default temporary tablespace temp undo tablespace undotbs1 character set utf8 national character set al16utf16; 6、连入数据库,并启动数据库到nomount

SQL> startup nomount ORACLE instance started. Total System Global Area 264241152

bytes Fixed Size 1218868 bytes Variable Size 88082124 bytes Database Buffers 171966464 bytes Redo Buffers 2973696 bytes 7、根据刚刚修改的pfile文件创建spfile文件

SQL>create spfile from

pfile; 关于spfile文件,在上一个的手动创建中就可以生成,本博中有另个文章进行详解,请看“Oracle初始化参数文件”。

8、执行createdb.sql脚本

SQL>

@/u01/db/oracle/admin/mydb/script/createdb.sql

Database created. 9、验证一下我们创建的数据库(这种方法好多了,做了上面手动创建数据库的朋友一定对最后的SQL的刷屏记忆犹新吧,呵)

在线日志文件查询:

SQL> select group#,member from v$logfile;

GROUP# MEMBER

----------

--------------------------------------------------------------

1 /ora02/oradata/MYDB/onlinelog/o1_mf_1_4f8dw53x_.log

2

/ora02/oradata/MYDB/onlinelog/o1_mf_2_4f8dw5fp_.log 数据文件查询:

SQL> select name from v$datafile;

NAME

-------------------------------------------------------------------------

/ora02/oradata/MYDB/datafile/o1_mf_system_4f8dwbg9_.dbf /ora02/oradata/MYDB/datafile/o1_mf_undotbs1_4f8dwttk_.dbf /ora02/oradata/MYDB/datafile/o1_mf_sysaux_4f8dwvws_.dbf 临时文件查询:

SQL> select name from v$tempfile;

NAME

-------------------------------------------------------------------------

/ora02/oradata/MYDB/datafile/o1_mf_temp_4f8dwzxn_.tmp OK!收工,终于搞定手动创建数据库,有前面DBCA的SQL脚本做帮助,感觉也不是很难,多练习下吧。

最后给个create database的语法给大家(Copy来的大家研究下):

CREATE DATABASE database USER SYS IDENTIFIED BY password USER SYSTEM IDENTIFIED BY password CONTROLFILE REUSE MAXDATAFILES integer MAXINSTANCES integer MAXLOGFILES integer MAXLOGMEMBERS integer MAXLOGHISTORY integer CHARACTER SET charset NATIONAL CHARACTER SET charset SET DEFAULT BIGFILE(SMALLFILE)

TABLESPACE LOGFILE GROUP integer

file_specification ARCHIVELOG(NOARCHIVELOG) FORCE LOGGING DATAFILE file_specification SYSAUX DATAFILE file_specification DEFAULT TABLESPACE tablespace DATAFILE datafile_tempfile_spec

extent_management_clause BIGFILE(SMALLFILE) DEFAULT TEMPORARY TABLESPACE

tablespace TEMPFILE file_specification

extent_management_clause BIGFILE(SMALLFILE) UNDO TABLESPACE tablespace DATAFILE

file_specification SET TIME_ZONE = '+/–hh :

mi'(time_zone_region

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值