Chinaunix首页 | 论坛 | 博客
  • 博客访问: 205921
  • 博文数量: 75
  • 博客积分: 2049
  • 博客等级: 大尉
  • 技术积分: 780
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-08 12:37
文章分类

全部博文(75)

文章存档

2011年(1)

2010年(9)

2009年(65)

我的朋友

分类: LINUX

2009-05-18 09:03:41

第一章:oracle数据库的创建

1.1使用DBCA创建数据库

1.1.1DBCA的启动

1.1.2配置数据库选项

1.2数据库创建的脚本

1.2.1数据库创建的脚本

1.2.2创建的起点

创建oracle创建数据库的过程:

n         建立一系列的目录

n         设置ORACLE_SID环境变量

n         通过oradim创建并配置实例

n         通过sqlplus运行脚本开始创建数据库

1.2.3oradim工具的使用

通过oradim创建一个服务后,实例会随之启动:

C:\>oradim –new –sid eygle

1.2.4oracle_sid的含义

Oracle的实例是由一块共享内存区域SGA和一组后台进程共同组成的;而后台进程正是数据库和操作系统进行交互的通道,这些进程的名称就是通过ORACLE_SID决定的。

实例的启动仅需要一个参数文件,而这个参数文件的名称就是由ORACLE_SID决定的。对以init文件,缺省的文件名称是init.ora,对于spfile文件,缺省的文件名为spfile.ora, ORACLE依据ORACLE_SID来决定和寻找参数文件启动实例,参数文件的缺省位置为$ORACLE_HOME/dbs.

Spifile 9i开始引入并成为了缺省使用的参数文件,oracle启动实例时按照以下顺序从缺省目录查找参数文件:spfile.ora—spfile.ora—init.ora

通过以上信息可以知道,在同一个ORACLE_HOME下,oracle能够根据ORACLE_SID将实例区分开来;但是如果在不同的ORACLE_HOME下,ORACLE将无法屏蔽相同名称的ORACLE_SID,也就是说即使在同一台主机上,oracle也是能够创建相同ORACLE_SID的实例的。

在操作系统上,oracle能够通过ID标识将共享或信号量区分开来:

$ipcs –i

通过oracle提供的一个小工具sysresv,可以找到对应于不同的ORACLE_SID,操作系统上创建的共享内存段ID和信号量ID等信息。

$ sysresv –l eygle julia

linux上,ORACLE_SID还和一个名为oratab的文件有关,在solaris环境中,这个文件一般位于/var/opt/oracle目录下,在linux下,这个文件一般位于/etc目录下。

当执行dbstart脚本时,oracle会根据这里记录的ORACLE_SID的设置来决定是否启动相关实例。通过手动在命令行执行类似命令,可以初始化任意的oracle环境:

C:\>oracle julia

此后就可以连接到这个环境启动实例:

C:\>set ORACLE_SID=julia

当然还需要创建参数文件和口令文件等:

此后,实例就可以顺利启动:

SQL>  set linesize 120

SQL> show parameter instance_name

SQL> show parameter db_name

SQL> alter database mount;

SQL> alter database open;

1.2.5INSTANCE_NAME的含义及作用

INSTANCE_NAMEoracle数据库的一个参数,在参数文件中定义,用于标识数据库实例的名称,其缺省值是ORACLE_SID,但是不同的实例可以有相同的实例名。总结一下,ORACLE_SID用于标识进程,而INSTANCE_NAME则用来标识实例,两者可以具有不同的名称。此外oracle的监听器配置文件中的SID_NAME就是来自INSTANCE_NAME参数,监听器通过INSTANCE_NAME才能确定需要将连接请求注册到哪一个实例上。

1.2.6oracle的口令文件

当口令文件丢失或损坏之后,可以通过这个工具重建口令文件,这个语句的语法:

C:\Documents and Settings\oracle>orapwd

Usage: orapwd file= password= entries= force=

 

  where

    file - name of password file (mand),

    password - password for SYS (mand),

    entries - maximum number of distinct DBA and     force - whether to overwrit

e existing file (opt),

OPERs (opt),

  There are no spaces around the equal-to (=) character.

 

Oracle在启动过程中,会在$ORACLE_HOME/dbs目录下查找口令文件,查找的顺序是首先检查orapwd文件,如果不存在则查找orapwd文件,如果orapwd文件也不存在,就会报错。

口令文件丢失或损失后,通常可以通过如下命令重建口令文件:

$ orapwd file=orapwhsjf  password=oracle entries=5

在数据库没有启动之前,数据库内建用户是无法通过数据库来验证身份的。此时口令文件就体现出来了。口令文件中存放了具有SYSDBA / SYDPER 身份用户的用户名和口令,oracle允许用户通过口令文件验证,在数据库未启动之前登录,从而启动实例进而加载并打开数据库;而如果没有口令文件,在数据库未启动之前就只能通过操作系统认证方式来启动实例。

Oracle通过一个初始化参数remote_login_passwordfile来限制口令文件的使用,通过这个参数可以设置用户登录时是否检查口令文件,以及多少个数据库可以使用口令文件。这个参数有三个选项:EXCLUSIVE,SHAREDNONE

remote_login_passwordfile设置为NONE时,远程用户将不能通过SYSDBA / SYDPER身份登录。

缺省的remote_login_passwordfile参数设置为exclusive,支持远程SYSDBA的登录操作:

Alter system set remote_login_passwordfile=exclusive scope=spfile;

这个参数时静态参数,修改后重启数据库才能生效。当remote_login_passwordfile参数设置为shared时,则多个数据库可以共享一个口令文件,但是此时口令文件中只能存储SYS用户的口令,此时其他用户不能授予sysdba身份。

SQL> select * from v$pwfile_users;

1.2.7脚本执行

第一个脚本时CreateDB.sql,这个文件的主要操作步骤如下:

n         通过SYS连接

n         通过配置的参数init.ora启动实例

n         开始数据库创建

n         将数据库生成的控制名称追加到参数文件中

1.2.8DB_NAME参数和INSTANCE_NAME参数

对于oracle数据库来说,DB_NAME代表数据库的名称而INSTANCE_NAME代表实例的名称,INSTANCE_NAME通过参数文件即可修改,而DB_NAME则不然,来看一下ORACLE对于数据库名称的定义:DB_NAME必须是一个不超过8个字符的文本串。数据库在创建过程中,DB_NAME被记录在数据文件,日志文件和控制文件中。

一个实例可以mount并打开任何数据库,但是同一个时间一个实例只能打开一个数据库:一个数据库同一时间可以为任一实例所打开,但是在非OPS/RAC情况下,同时只能被同一个实例打开。

1.2.9sql.bsq文件与数据库创建

这个脚本用于创建数据字典。

1.2.10数据文件及字典的创建

再来看CreateDBfile.sql文件:

这个文件向数据库追加了USERS表空间,并将该表空间设置为系统缺省的数据表空间。

1.3使用模板创建数据库

1.3.1启动创建

1.3.2数据库创建模板

使用模板创建数据库通常速度都会很快,原因在于数据文件时从种子数据库中恢复出来的,而不需要创建文件及字典对象等信息。

1.3.3RMAN的引入

rmanRestoreDatafiles.sql脚本时通过系统包DBMS_BACKUP_RESTORE来恢复备份集中的文件,从而实现数据恢复。当通过RMAN进行数据库备份时,RMAN会将多个数据文件写出到一个或多个备份文件(称为备份集)中,RMAN的相关的备份信息或者存储在控制文件中,或者存放在RMAN的专用目录数据库(catalog)中,如果RMAN的备份信息丢失,那么通常备份集中的文件是没有办法读取出来的,其他工具无法识别RMAN的备份集文件;而DBMS_BACKUP_RESTORE就是针对这种情况提供的一种解决方案,DBMS_BACKUP_RESTORE可以在数据库nomount状态下调用,直接从备份集中读取数据文件。

1.3.4克隆数据库

数据文件具备了,接下来是通过这些文件“克隆”一个数据库,这个工作由cloneDBCreation.sql脚本继续执行。

 

 

 

 

 

 

 

 

 

 

 

 

阅读(1022) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~