当前位置:文档之家› oracle实例名,数据库名,服务名等概念区别与联系

oracle实例名,数据库名,服务名等概念区别与联系

oracle实例名,数据库名,服务名等概念区别与联系
oracle实例名,数据库名,服务名等概念区别与联系

oracle实例名,数据库名,服务名等概念区别与联系

数据库oracle服务器archivedatabase多线程数据库名、实例名、数据库域名、全局数据库名、服务名这是几个令很多初学者容易混淆的概念。相信很多初学者都与我一样被标题上这些个概念搞得一头雾水。我们现在就来把它们弄个明白。

一、数据库名

什么是数据库名?

数据库名就是一个数据库的标识,就像人的身份证号一样。他用参数DB_NAME表示,如果一台机器上装了多全数据库,那么每一个数据库都有一个数据库名。在数据库安装或创建完成之后,参数DB_NAME被写入参数文件之中。格式如下:

DB_NAME=myorcl

...

在创建数据库时就应考虑好数据库名,并且在创建完数据库之后,数据库名不宜修改,即使要修改也会很麻烦。因为,数据库名还被写入控制文件中,控制文件是以二进制型式存储的,用户无法修改控制文件的内容。假设用户修改了参数文件中的数据库名,即修改DB_NAME 的值。但是在Oracle启动时,由于参数文件中的DB_NAME与控制文件中的数据库名不一致,导致数据库启动失败,将返回ORA-01103错误。

数据库名的作用

数据库名是在安装数据库、创建新的数据库、创建数据库控制文件、修改数据结构、备份与恢复数据库时都需要使用到的。

有很多Oracle安装文件目录是与数据库名相关的,如:

winnt: d:/oracle/product/10.1.0/oradata/DB_NAME/...

Unix: /home/app/oracle/product/10.1.0/oradata/DB_NAME/...

pfile:

winnt: d:/oracle/product/10.1.0/admin/DB_NAME/pfile/ini.ora

Unix: /home/app/oracle/product/10.1.0/admin/DB_NAME/pfile/init$ORACLE_SID.ora

跟踪文件目录:

winnt: /home/app/oracle/product/10.1.0/admin/DB_NAME/bdump/...

另外,在创建数据时,careate database命令中的数据库名也要与参数文件中DB_NAME参数的值一致,否则将产生错误。

同样,修改数据库结构的语句alter database,当然也要指出要修改的数据库的名称。

如果控制文件损坏或丢失,数据库将不能加载,这时要重新创建控制文件,方法是以nomount 方式启动实例,然后以create controlfile命令创建控制文件,当然这个命令中也是指指DB_NAME。

还有在备份或恢复数据库时,都需要用到数据库名。

总之,数据库名很重要,要准确理解它的作用。

查询当前数据名

方法一:select name from v$database;

方法二:show parameter db

方法三:查看参数文件。

修改数据库名

前面建议:应在创建数据库时就确定好数据库名,数据库名不应作修改,因为修改数据库名是一件比较复杂的事情。那么现在就来说明一下,如何在已创建数据之后,修改数据库名。步骤如下:

1.关闭数据库。

2.修改数据库参数文件中的DB_NAME参数的值为新的数据库名。

3.以NOMOUNT方式启动实例,修建控制文件(有关创建控制文件的命令语法,请参考oracle 文档)

二、数据库实例名

什么是数据库实例名?

数据库实例名是用于和操作系统进行联系的标识,就是说数据库和操作系统之间的交互用的是数据库实例名。实例名也被写入参数文件中,该参数为instance_name,在winnt平台中,实例名同时也被写入注册表。

数据库名和实例名可以相同也可以不同。

在一般情况下,数据库名和实例名是一对一的关系,但如果在oracle并行服务器架构(即oracle实时应用集群)中,数据库名和实例名是一对多的关系。这一点在第一篇中已有图例说明。

查询当前数据库实例名

方法一:selectinstance_name from v$instance;

方法二:show parameter instance

方法三:在参数文件中查询。

数据库实例名与ORACLE_SID

虽然两者都表是oracle实例,但两者是有区别的。instance_name是oracle数据库参数。而ORACLE_SID是操作系统的环境变量。ORACLD_SID用于与操作系统交互,也就是说,从操作系统的角度访问实例名,必须通过ORACLE_SID。在winnt不台,ORACLE_SID还需存在于注册表中。

且ORACLE_SID必须与instance_name的值一致,否则,你将会收到一个错误,在unix平台,是“ORACLE not available”,在winnt平台,是“TNS:协议适配器错误”。

数据库实例名与网络连接

数据库实例名除了与操作系统交互外,还用于网络连接的oracle服务器标识。当你配置oracle 主机连接串的时候,就需要指定实例名。当然8i以后版本的网络组件要求使用的是服务名SERVICE_NAME。这个概念接下来说明。

三、数据库域名

什么是数据库域名?

在分布工数据库系统中,不同版本的数据库服务器之间,不论运行的操作系统是unix或是windows,各服务器之间都可以通过数据库链路进行远程复制,数据库域名主要用于oracle 分布式环境中的复制。举例说明如:

全国交通运政系统的分布式数据库,其中:

福建节点:fj.jtyz

福建厦门节点:xm.fj.jtyz

江西:jx.jtyz

江西上饶:sr.jx.jtyz

这就是数据库域名。

数据库域名在存在于参数文件中,他的参数是db_domain.

查询数据库域名

方法一:select value from v$parameter where name = 'db_domain';

方法二:show parameter domain

方法三:在参数文件中查询。

全局数据库名

全局数据库名=数据库名+数据库域名,如前述福建节点的全局数据库名是:oradb.fj.jtyz 四、数据库服务名

什么是数据库服务名?

从oracle9i版本开始,引入了一个新的参数,即数据库服务名。参数名是SERVICE_NAME。如果数据库有域名,则数据库服务名就是全局数据库名;否则,数据库服务名与数据库名相同。

查询数据库服务名

方法一:select value from v$parameter where name = 'service_name';

方法二:show parameter service_name

方法三:在参数文件中查询。

数据库服务名与网络连接

从oracle8i开如的oracle网络组件,数据库与客户端的连接主机串使用数据库服务名。之前用的是ORACLE_SID,即数据库实例名

创建Oracle数据库(以Oracle10g为例)

有两种创建数据库的方式,一种是以命令行脚本方式,即手动方式创建;另一种是利用Oracle 提供的数据库配置向导来创建。本篇主要介绍在Unix和Windows下以命令行脚本方式创建Oracle数据库。

一个完整的数据库系统,应包括一个物理结构、一个逻辑结构、一个内存结构和一个进程结构,如果要创建一个新的数据库,则这些结构都必须完整的建立起来。

一、在Unix下创建数据库

1.确定数据库名、数据库实例名和服务名

关于数据库名、数据库实例名和服务名,我之前有专门用一篇来详细介绍。这里就不再说明了。

2.创建参数文件

参数文件很确定了数据库的总体结构。Oracle10g有两种参数文件,一个是文本参数文件,

一种是服务器参数文件。在创建数据库时先创建文本参数文件,在数据库创建后,可以由文件参数文件创建服务器参数文件。文本参数文件的取名方式为initORACLE_SID.ora,其中,ORACLE_SID是数据库实例名。其名称及路径为:

/home/app/oracle/product/10.1.0/admin/DB_NAME/pfile/initORACLE_SID.ora

其中,DB_NAME为数据库名。所以,应创建一个以之命名的目录,并将文本参数文件存放在上述目录中。假设新创建的数据库名为MYORACLE,SID与数据库名一致。则上述目录实际为:

/home/app/oracle/product/10.1.0/admin/MYORACLE/pfile/initMYORACLE.ora

1)参数文件的介绍

参数文件决定着数据库的总体结构,用于设置数据库的近260个系统参数。下面分类别说明一下各参数的作用,关于参数的详细使用说明请参考Oracle官方参考文档。

a.数据库标识类参数

DB_NAME: 数据库名,此参数在创建数据前决定,数据库创建后修改时,必须建控制文件DB_DOMAIN: 数据库域名,用于区别同名数据库。数据库名与域名一起构成了全局数据库名INSTANCE_NAME: 数据库实例名,可以与数据库相同

SERVICE_NAMES: 数据库服务名,与全局数据库名相同如果没有域名,则服务名就是数据库名

b.日志管理类参数

LOG_ARCHIVE_START: 是否启动自动归档进程ARCH

LOG_ARCHIVE_DEST: 归档日志文件存储目录

LOG_ARCHIVE_FORMAT: 归档日志文件的默认文件存储格式

LOG_ARCHIVE_DUPLEX_DEST: 归档日志文件镜像存储目录(Oracle8以上)

LOG_ARCHIVE_DEST_n: 归档日志文件存储目录(Oracle8i以上)

LOG_ARCHIVE_DEST_STATE_n: 设置参数LOG_ARCHIVE_DEST_n失效或生效

LOG_ARCHIVE_MAX_PROCESSES: 设置自动归档进程的个数

LOG_ARCHIVE_MIN_SUCCEED_DEST: 设置最少的成功归档日志存储目录的个数

LOG_CHECKPOINT_INTERVAL: 根据日志数量设置检验点频率

LOG_CHECKPOINT_TIMEOUT: 根据时间间隔设置检验点频率

c.内存管理参数

DB_BLOCK_SIZE: 标准数据块大小

DB_nK_CACHE_SIZE: 非标准数据块数据缓冲区大小

SHARED_POOL_SIZE: 共享池大小控制参数,单位为字节

DB_CACHE_SIZE: 标准数据块数据缓冲区大小

DB_BLOCK_BUFFERS: 数据缓冲区大小,9i之后已放弃使用

LOG_BUFFER: 日志缓冲区大小

SORT_AREA_SIZE: 排序区大小

LARGE_POOL_SIZE: 大池大小

JAVA_POOL_SIZE: Java池大小

d.最大许可用户数量限制参数

LICENSE_MAX_SESSIONS:数据库可以连接的最大会话数

LICENSE_MAX_USERS:数据库支持的最大用户数

LICENSE_MAX_WARNING:数据库最大警告会数(会话数据达到这个值时,产生新会话时就会产生警告信息)

e.系统跟踪信息管理参数

USER_DUMP_DEST:用户跟踪文件生成的设置

BACKGROUND_DUMP_DEST:后台进程跟踪文件生成的位置

MAX_DUMPFILE_SIZE:跟踪文件的最大尺寸

f.系统性能优化与动态统计参数

SQL_TRACE:设置SQL跟踪

TIMED_STATICS:设置动态统计

AUDIT_TRAIL:启动数据库审计功能

g.其他系统参数

CONTROL_FILES:控制文件名及路径

Undo_MANAGMENT:Undo空间管理方式

ROLLBACK_SEGMENTS:为这个例程分配的回退段名

OPEN_CURSORS:一个用户一次可以打开的游标的最大值

PROCESSES:最大进程数,包括后台进程与服务器进程

IFILE:另一个参数文件的名字

DB_RECOVERY_FILE_DEST:自动数据库备份目录

DB_RECOVERY_FILE_SIZE:数据库备份文件大小

2)参数文件样式

db_name=myoracle

instance_name=myoracle

db_domain=https://www.doczj.com/doc/9a14185706.html,

service_names=https://www.doczj.com/doc/9a14185706.html,

control_files=(/home/app/oracle/product/10.1.0/oradata/myoracle/control01.ctl,

/home/app/oracle/product/10.1.0/oradata/myoracle/control02.ctl,

/home/app/oracle/product/10.1.0/oradata/myoracle/control03.ctl)

db_block_size=8192

user_dump_dest=/home/app/oracle/product/10.1.0/admin/myoracle/udump

background_dump_dest=/home/app/oracle/product/10.1.0/admin/myoracle/bdump

core_dump_dest=/home/app/oracle/product/10.1.0/admin/myoracle/cdump

db_recovery_file_dest=/home/app/oracle/product/10.1.0/flash_recover_area

db_recovery_file_size=100G

...

3.设置操作系统参数

$ORACLE_SID=myoracle

$export ORACLE_SID

4.启动实例并创建数据库

在创建数据库之前,首先要以新的数据库参数启动数据库实例,因为这时数据库的控制文件还没有产生,不能MOUNT或OPEN数据库。启动实例时,Oracle只按照内存参数分配SGA 区,启动系统后台进程。

$sqlplus "sys/pass as sysdba"

sql>startup nomount

如果参数文件不在规定的目录中,可以在启动实例时指定参数文件:

sql>startup pfile=/export/home/user/initmyoracle.initnomount

在实例启动后就可以使用CREATE DATABASE命令创建数据。其详细语法请参考Oracle官方SQL参考文档。这里以实例来介绍:

sql>CREATE DATABASE myoracle

MAXINSTANCE 1

MAXLOGHISTORY 216

MAXLOGFILES 50

MAXLOGMEMBERS 5

DATAFILE '/home1/app/oracle/product/10.1.0/oradata/myoracle/system01.dbf' SIZE 500m AUTOEXTEND ON NEXT 100m MAXSIZE UNLIMITED

LOGFILE

GROUP 1('/home1/app/oracle/product/10.1.0/oradata/myoracle/log1a.log',

'/home1/app/oracle/product/10.1.0/oradata/myoracle/log1b.log') SIZE 10m,

GROUP 2('/home1/app/oracle/product/10.1.0/oradata/myoracle/log2a.log',

'/home1/app/oracle/product/10.1.0/oradata/myoracle/log2b.log') SIZE 10m,

GROUP 3('/home1/app/oracle/product/10.1.0/oradata/myoracle/log3a.log',

'/home1/app/oracle/product/10.1.0/oradata/myoracle/log3b.log') SIZE 10m,

Undo TABLESPACE undotbs DATAFILE

'/home1/app/oracle/product/10.1.0/oradata/myoracle/undotbs01.dbf' size 200m AUTOEXTEND ON NEXT 100m MAXSIZE UNLIMITED

DEFAULT TEMPORARY TALESPACE temp TEMPFILE

'/home1/app/oracle/product/10.1.0/oradata/myoracle/temp01.dbf' size 325m AUTOEXTEND ON NEXT 100m MAXSIZE UNLIMITED

DEFAULT TABLESPACE users DATAFILE

'/home1/app/oracle/product/10.1.0/oradata/myoracle/usertbs01.dbf' size 1000m CHARACTER SET ZHS16GBK;

这里说明一下CREATE DATABASE语句的各个关键字的含义:

DATAFILE:SYSTEM表空间的数据文件定义

LOGFILE:日志文件组的定义

Undo_TABLESPACE:重做表空间的定义

DEFAULT TEMPORTY TABLESPACE:默认临时表空间的定义

DEFAULT TABLESPACE:默认数据表空间的定义。

5.创建数据字典

在数据库创建结束后,数据库自动处于OPEN状态下,这时所有V$××××类数据字典都可以查询。而其它数据字典,如DBA_DATA_FILES、DBA_TABLESPACES等都不存在,必须通过下列骤为系统创建数据字典。

1)加载常用的数据字典包

sql>@/home/app/oracle/product/10.1.0/db_1/rdbms/catalog

2)加载PL/SQL程序包

sql>@/home/app/oracle/product/10.1.0/db_1/rdbms/admin/catproc

3)加载数据复制支持软件包

sql>@/home/app/oracle/product/10.1.0/db_1/rdbms/admin/catrep

4)加载Java程序包

sql>@/home/app/oracle/product/10.1.0/db_1/javavm/install/initjvm

5)加载系统环境文件

sql>connect system/pass

sql>@/home/app/oracle/product/10.1.0/db_1/sqlplus/admin/pupbld

二、在Windows下创建数据库

Oracle实例在Windows下表现为操作系统服务。在windows下,使用命令行方式创建数据的方法有所不同,差别在于在Windows下,需要先创建数据库服务和实例。

1.确定数据库名、数据库实例名和服务名并创建目录(DBCA创建的脚本不包含建立目录命令,须自己创建)

建立目录命令(下面以db_name=eygle为例):

mkdir D:/oracle/ora90/cfgtoollogs/dbca/eygle

mkdir D:/oracle/ora90/database

mkdir d:/oracle/admin/eygle/adump

mkdir d:/oracle/admin/eygle/bdump

mkdir d:/oracle/admin/eygle/cdump

mkdir d:/oracle/admin/eygle/dpdump

mkdir d:/oracle/admin/eygle/pfile

mkdir d:/oracle/admin/eygle/udump

mkdir d:/oracle/flash_recovery_area

mkdir d:/oracle/oradata

mkdir d:/oracle/oradata/eygle

2.创建参数文件

在Windows下的参数文件名称及路径如下:

d:/oracle/product/10.1.0/admin/DB_NAME/pfile/init.ora(oracle10g)

d:/orant/database/iniORACLE_SID.ora(oracle7,oracle8)

参数据文件内容与前述一致。这里不再说明。

3.选择数据库实例

设置环境变量ORACLE_SID

c:/>set ORACLE_SID=数据库实例名

4.创建数据库实例

在Windows中创建数据库实例的命令为Oradim.exe,是一个可执行文件,可以在操作系统符号下直接运行。直接输入oradim显示此命令的帮助。

c:/>Oradim

下面对Oradim命令的参数进行一个说明

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

-NEW 表示新建一个实例

-EDIT 表示修改一个实例

-DELETE 表示删除一个实例

-SID sid指定要启动的实例名称

-SRVC service 指定要启动的服务名称

-INTPWD password 以Internal方式连接数据库时的口令字

-MAXUSERS count 该实例可以连接的最大用户数

-USRPWD password 指定内部用户的口令,如是作为Windows管理登录,不用此参数

-PFILE pfile该实例所使用的参数文件名及路径

-STARTTYPE srvc|inst|srvc,inst启动选项(srvc:只启动服务,inst:启动实例,服务必须先启动,srvc,inst:服务和实例同时启动)

-SHUTTYPE srvc|linst|srvc,inst关闭选项(srvc:只关闭服务,实例必须已关闭,inst:只关闭实例,srvc,inst:服务和实例同时关闭)

-STARTMODE a|m创建实例所使用的模式(a:自动,即windows启动时自动启动m:手动)-SHUTMODE a|i|m关闭实例时所使用的模式(a:abort异常方式,i:immediate立即方

式,n:normal正常方式)

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

例:创建一个数据库实例

c:/>oradim -NEW -SID myoracle -STARTMODE m -PFILE "d:/fangys/initmyoracle.ora"

c:/>oradim -NEW -SRVC OracleServicemyoracle -STARTMODE m -PFILE "d:/fangys/initmyoracle.ora"

例:修改一个数据实例

c:/>oradim -EDIT -SID myoracle -STARTMODE a

c:/>oradim -EDIT -SRVC OracleServicemyoracle -STARTMODE a

例:删除一个实例

c:/>oradim -DELETE -SID myoracle

c:/>oradim -DELETE -SRVC Oracleservicemyoracle

例:启动服务与实例

c:/>oradim -STARTUP -SID myoracle -STARTTYPE srvc,inst

只启动服务

c:/>oradim -STARTUP -SID myoracle -STARTTYPE srvc

启动实例:

c:/>oradim -STARTUP -SID myoracle -STARTTYPE inst

例:关闭服务与实例

c:/>oradim -SHUTDOWN -SID myoracle

c:/>oradim -SHUTDOWN -SID myoracle -SHUTTYPE srvc,inst

5.启动实例并创建数据库

c:/>oradim -NEW -SID myoracle -INTPWD syspass -STARTMODE a -PFILE d:/fangys/initmyoracle.ora

c:/>set ORACLE_SID=myoracle

c:/>sqlplus sys/syspass as sysdba

sql>startup -pfile=d:/fangys/initmyoracle.oranomount

sql>CREATE DATABASE myoracle

logfile group...

...

6.创建数据字典

sql>@d:/oracle/product/10.1.0/db_1/rdbms/admin/catalog.sql;

sql>@d:/oracle/product/10.1.0/db_1/rdbms/admin/catproc.sql;

sql>@d:/oracle/product/10.1.0/db_1/rdbms/admin/catrep.sql;

sql>@d:/oracle/product/10.1.0/db_1/javavm/install/initjvm.sql;

sql>@d:/oracle/product/10.1.0/db_1/sqlplus/admin/ppbld.sql;

一、启动数据

$sqlplus "sys/pass as sysdba"

sql>startup

二、启动监听器

数据库启动后,如果未启动监听进程,则客户端无法与数据库连接。监听进程的启动方法为:$lsnrctl start

在widnows中,可以从服务列表中启动监听器。

监听里程配置文件为listener.ora,位于目录/home/app/oracle/product/10.1.0/db1/network/admin/。

此配置文件分为两部分,一部分为监听程序本身的配置,包括协议,地址,端口号等;另一部分为监听程序所连接的数据库的实例信息,包括:实例名,全局数据库名,oracle主目录等。监听器可以利用oracle net config向导来配置。

要显示监听器的运行状态:$lsnrctl status;

要停止监听器:$lsnrctl stop。

三、数据库的启动过程

分为三个阶段:

1. 启动实例,包括以下操作:

1) 读取参数文件

2) 分配SGA

3) 启动后台进程

2.装载数据库

装载数据库是将数据库与已启动的实例相联系。数据库装载后,数据库保持关闭状态。

3.打开数据库

此步骤使用数据库可以进行正常的操作的处理。主要是打开控制文件,数据库文件和日志文件。

四、数据库启动参数

1.NOMOUNT:只启动实例,不装载数据库

sql>startup nomount

2.MOUNT:启动实例,并装载数据,但不打开数据库

sql>startup mount

3.READ ONLY:将数据库置为只读

sql>startup mount

sql>alter database open read only

4.READ WRITE:以可读写方式打开数据,这是默认方式

sql>startup mount

sql>alter database open read write

5.OPEN:打开数据库,这是默认方式

sql>startup mount

sql>alter database open;

6.RESTRICT:以受限方式打开,只有具有RESTRICTED SESSION权限的用户才可以连接数据库sql>startup restrict

7.PFILE:启时指定参数文件

sql>startup pfile=/u02/user/mypfile.ora

8.FORCE:以强制方式启动数据库

sql>startup pfile=/u02/user/mypfile.ora open restrict force

五、数据库的关闭

与启动过程相对应,关闭包括三个过程

1).关闭数据库

2).卸载数据库

3).关闭数据库实例

1.NORMAL关闭方式

NORMAL关闭方式是正常关闭方式,是默认关闭方式。在这种关机方式下,数据库服务器必须等待所有客户端从Oracle中正常退出时,才可以关闭数据库。

SQL>SHUTDOWN NORMAL

2.IMMEDIATE关闭方式

使用这种方式关闭数据库时,系统将连接到数据库的所有用户尚未提交的事务全部回退,中断连接,然后关闭数据库。

SQL>SHUTDOWN IMMEDIATE

3.ABORT关闭方式

ABORT关闭方式为异常方式,使用这种方式关闭数据库时,系统立即将数据库实例关闭,对事务膛数据完整性不作检查。是最快的关机方式。

sql>shutdown abort;

4.TRANSACTIONAL关闭方式

在这种关机方式中,数据库必须等待所有的客户运行的事务结束,提交或回退。

sql>shutdown transactional

Oracle数据库的连接结构有三种:

1) 组合用户与服务器结构:在这种连接方式中,客户端与服务器同处一台机器中,对于每一个用户,其库应用程序与服务器程序组合成单个服务器进程。

2) 专用服务器(Dedicated Server)结构:在这种方式中,对于每一个用户,其数据库应用是由用户进程所运行,并有一个专用服务器进程为之服务,执行Oracle服务器代码。

3) 多线程服务器(Multithreaded Server)体系结构:在这种方式中,一个或多个客户应用程序共享一组服务器进程,与专用服务器不同的是,客户和服务器进程不是一对一的关系,而是由调度进程对多个服务器进程进行调度,以服务来自客户应用的连接请求。

专用服务器

专用服务器的工作过程:

1) 客户端通过oracle net向监听器发连接请求

2) 监听器收到请求并将此请求导向服务器,服务器向用户返回一个连接成功信息,并为此用户创建一个专用服务器进程

3) 客户直接与该专用服务器进程进行交互,处理SQL,并且服务器在该会话的PGA中建立一个专用SQL区。

如果客户端要求建立专用服务器连接方式,可以修改客户羰的网络配置文件tnsnames.ora 或修改连接描述串。增加关键字“Server=DEDICATED”,如:

prod=

(DESCRIPTION=

(ADDRESSLIST=

(ADDRESS=

(PROTOCOL=TCP)(HOST=192.168.0.3)(PORT=1521)

(SERVER=DEDICATED)

)

)

(CONNECT_DATA=(SID=PROD)

)

)

还必须修改SQLNET.ORA文件,增加“USE_DEDICATED_SERVER=TRUE”

多线程服务器体系结构

专用服务器结构中,一个服务器进程只为一个客户服务。这样的话,如果有一千个客户,就需要有一千个对应的服务器进程,就会耗费大量的系统资源。为了支持对于可伸缩性的需求,在oracle7中引入了多线程服务器(MTS,也称为共享服务器)。下面说明共享服务器建立连接的过程,以级与建立专用服务器连接过程的不同:

1) 客户通过网络与监听器联系

2) 监听器检测到请求,基于Oracle net结构来确定是否与多线程服务器连接。监听器将客户请求导向相应的调度程序。

3) 监听器通过使客户与调度程序了解对方的网络地址,从面完成了双方的介绍。

4) 一旦客户与调度程序知道如何找到对方,它们就直接通信,不要需要监听器。客户直接将操作请求发送给高度程序。

5) 调度程序将客户请求放在SGA的请求队列中。

6) 下一个可用的共享服务器进程从请求队列中读取请求,进行相应的工作。

7) 共享服务器进程将结果存放在提交相应请求的调度程序的响应队列中。

8) 调度程序从响应队列中读取数据并将结果送组客户。

有几个概念在这里作个补充说明:

1) 监听器(Listener):为一个或多个实例“监听”连接请求,它是oracle客户与服务器的中介。监听器不是Oracle实例的一部分,它的作用是将连接的请求导向相应的实例。

2) 调度程序(dispatcher):在MTS体系结构中,监听器与调度程序联系,调度程序负责调度MTS中的各个共享服务器进程。

多线程服务器的设置参数有:

MTS_SERVICE:多线程服务器名称,一般为数据库名

MTS_DISPATCHERS:初始调度器个数

MTS_MAX_DISPATCHERS:调度器最大个数

MTS_SERVERS:共享服务器个数

MTS_MAX_SERVERS:最大共享服务器个数

多线程服务器的设置是通过对以上各个参数的设置完成的。格式如下:

MTS_SERVICE=RS

MTS_SERVERS=10

MTS_MAX_SERVERS=100

MTS_DISPATCHERS="(PROTOCOL=TCP)(POOL=YES)(MULT=YES)"

MTS_DISPATCHERS="(PROTOCOL=IPX)(POOL=YES)(MULT=YES)"

MTS_DISPATCHERS="(PROTOCOL=IPC)(POOL=YES)(MULT=YES)"

MTS_MAX_DISPATCHERS=100

有关多线程服务器的数据字典如下:

V$MTS

V$DISPATCHER

V$SHARED_SERVER

V$CIRCULT

各字典的详细说明请参考Oracle文档。

Oracle实例的进程结构

这里所讲的里程是指Unix系统中的进程,在Windows中,Oracle是一个操作系统服务。Oracle实例由内存区域和后台进程组成。

Oracle实例分为单进程实例(一个进程执行全部的Oracle代码,只允许单个用户存取)和多进程实例(由多个进程执行Oracle代码的不同部分,对于每一个连接的用户都有一个进程,允许多个用户同时使用)。

在多进程结构中,除服务器进程(请注意,此“服务器进程”不是指所有的实例中的进程,见下面的说明)外,还有其他后台进程,包括:Dnnn, DBWR, LGWR,ARCH,PMON,SMON,CKPT,RECO等。在数据库启动后,这些进程常驻操作系统。Oracle 中所有进程的数量之和不能超过参数PROCESS设定的值:

sql>show parameter process

当Oracle客户端应用程序与Oracle实例连接的时候,Oracle会产生一个服务器进程来为这些客户服务,此进程在widnows下表现为线程。此进程的主要作用有:对于用户发出的SQL 语句进行语法分析,编译,执行用户的SQL语句,如是数据块不在数据缓冲区时,则从磁盘数据文件将数据读入到SGA的共享数据缓冲区中,将SQL语句的执行结果返回组应用程序。下面的语句用来查询数据库中的用户会话信息。

sql>select substr(s.sid,1,3) sid,substr(s.serial#,1,5) ser,spid,substr(schemaname,1,10) schema,substr(type,1,3)

typ,substr(decode((consistent_gets+block_gets),0,'None',(100*(consistent_gets+block_gets-physi cal_reads)/consistent_gets+block_gets))),1,4) "%hit",valuecpu,substr(block_changes,1,5) bchng from v$processp,v$sesstatt,v$sess_ioi,v$session s where i.sid=s.sid and p.addr=paddr(+) and s.sid=t.sid and t.statistic#=12;

结果中:

sid表示会话ID号,

ser表示会话serial#号,serial#与sid组合以唯一表示一个会话,

spid表示操作系统进程号,

schema表示数据库用户名,

typ表示进程类型,use为用户进程,bac为后台进程

%hit 表示数据缓冲区命中率,

cpu表示使用cpu的时间,

bchng表示修改了的数据块的个数。

下面介绍各个后台进程

1. DBWR进程

DBWR(Database Writer)进程将缓冲区中的数据写入数据文件,负责数据缓冲区的管理。

当数据缓冲区中的一个数据被修改后,被标记为“脏”,DBWR进程负责将“脏”数据写入磁盘。

DBWR采用LRU算法来替换数据缓冲区中的数据。

DBWR的作用包括:

1)管理数据缓冲区,以便服务器进程总能找到空闲缓冲区

2)将所有修改后的缓冲区中的数据写入数据库文件

3)使用LRU算法将最近使用过的块保留在内存中

4)通过延迟写来优化磁盘i/o.

在下列情况下DBWR要将脏数据写入磁盘数据文件:

1)当一个服务器进程将缓冲数据块移“脏表”,面该脏表达到一定程度进。(该临界长度由参数DB_BLOCK_WRITE_BATCH决定)

2)当一个服务器进程在LRU表中查找DB_BLOCK_MAX_SCAN_CNT缓冲区时,没有查到空闲的缓冲区

3)出现超时

4)检查点发生时

在一个Oracle实例中,允许启动多个DBWR进程,DBWR进程个数由参数DB_WRITE_PROCESSES指定,上限为20,进程名依次自动命名为:DBW0,DBW1,DBW2...DBW19。sql>show parameter processes

2. LGWR进程

LGWR(Log Writer)进程将日志数据从日志缓冲区中写入磁盘日志文件中。

关于LGWR进程的工作时机可以看我写的第一篇《一次事务过程》。

LGWR的写盘条件是:

1) 发生提交,即commit;

2) 日志缓冲区达到总数的1/3时;

3) 超时;

4) DBWR进程需要为检验点清除缓冲区时。

每一个Oracle实例只有一个LGWR进程。

LGWR将日志信息同步的写入到日志文件组的多个日志成员中,如果组中的一个成员文件被删除或不可使用,LGWR将日志信息继续写到该组的其他文件中,不影响数据库的运行。

3. SMON进程

SMON(System Monitor),系统监控进程,在实例启动时执行实例恢复,并负责清理不再使用的临时段。

4. PMON进程

PMON(Process Monitor),进程监控里程,在服务器进程出现故障时执行进程恢复,负责清理内存内存和释放该进程所使用的资源。

5. ARCH进程

ARCH(Archive Process,归档进程)在日志存满时将日志信息写到磁盘或磁带,用于介质失败时的恢复。

日志信息首先产生于日志缓冲区,再由日志写入进程LGWR将日志数据写入日志文件组,日志切换时,由归档进程ARCH将日志数据从日志文件组中写入归档日志中。

在一个数据库实例中,归档进程最多可以启动10个,进程名依次自动命名为ARC0,ARC1,ARC2...ARC9,设置方法是:在参数文件中增加参数LOG_ARCHIVE_MAX_PROCESSES。关于如何启用数据库的自动归档,在前面的《物理结构》一篇中已有说明,这里说明一个几个相关的参数:

1) LOG_ARCHIVE_DEST:用于设置归档日志的文件存储目录

2) LOG_ARCHIVE_DUBLEX_DEST:用于设置归档日志文件的镜像存储目录,此参数在oracle 8及以上的版本中支持

3) LOG_ARCHIVE_DEST_n:用于设置更多的镜像目录,其中,1<=n<=10,该参数有以下三个选项:

(1)MANDATORY:表示必须完成此目录的归档,才可以切换。

(2)REOPEN:归档目录或介质失败后,需等多长时间能重新写入日志,默认时间为300秒。

(3)OPTIONAL:不管是否归档完成都进行切换,这是默认方式

举例如下:

LOG_ARCHIVE_DEST_1='LOCATION=/u01/oracle/archive/

MANDATORY

REOPEN=500'

LOG_ARCHIVE_DEST_2='LOCATION=/u02/oracle/archive/

OPTIONAL'

LOG_ARCHIVE_DEST_n只适用于oracle 8i及以上的版本。

4) LOG_ARCHIVE_DEST_STATE_n:用于对归档日志目录进行失效或生效,该参数与LOG_ARCHIVE_DEST_n一一相对应。如:

LOG_ARCHIVE_DEST_STATE_1=DEFER

LOG_ARCHIVE_DEST_STATE_2=ENABLE

此参数可以在线设置:

sql> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=DEFER;

此参数只适用于oracle 10g及以上版本。

6. CKPT进程

CKPT(CheckPoint,检查点)进程出现时,系统对全部数据库文件及控制文件的文件头的同步号进行修改,以保证数据库的同步。

以下两个参数是对CKPT有影响的:

LOG_CHECKPOINT_TIMEOUT:决定产生一个检验点的时间间隔,单位为秋,默认为1800;LOG_CHECKPOINT_INTERVAL:执行一个检验点需要填充的日志文件块的数目,默认为0,表示不起作用。

系统对于数据库的改变信息用系统改变号SCN表示,SCN也叫检验点号,在日志中用CHECKPOINT_CHANGE#表示,它是数据文件,日志文件,控制文件的同步的同步依据,同时存储在这三个中,在系统改变时,检验点号也会同时改变。

引起CKPT产生的主要时机有:

1)日志切换时

2)达到LOG_CHECKPOINT_TIMEOUT指定的间隔时间

3)达到LOG_CHECKPOINT_INTERVAL指定的日志块数

4)数据库关闭

5)DBA强制产生

6)表空间OFFLINE时

7. RECO进程

RECO(Recover,恢复)进程用于分布式数据库系统,RECO进程自动地解决在分布式数据库中的事务故障。

8. LCKn进程

LCKn(锁进程)用于Oracle并行服务器环境下,用于多个实例间的封锁,该进程最多可以启动10个。

9. Dnnn进程

Dnnn(Despatcher,调度)进程。用于多线程服务器体系结构中。

10. SNP进程

SNP是作业进程,主要用于分布式数据库中,进行数据库之间快照的自动刷新,并同时通达DBMS_JOB程序包自动运行预定的存储过程,SQL,PL/sql程序等。有两个参数用来控制作业进程的计划:

1) JOB_QUEUE_PROCESS:用于设置作业进程个数

2) JOB_QUEUE_INTERVAL:用于设置作业进程被周期性唤醒的时间间隔

后台进程跟踪信息

所有修改数据库结构的命令会自动被后台进程跟踪记录,跟踪信息由oracle后台进程自动存储,跟踪文件的名称为alter_SID。此文件的存储目录由参数BACKGROUND)DUMP_DEST指定。可以用工具命令TKPROF来格式化跟踪文件,如:

$tkprof oralogfile1.log

除了跟踪后台进程外,还可以启用参数SQL_TRACE对用户的语句进行跟踪。修改参数文件:TIMED_STATISTICS=TRUE

USER_DUMP_DEST=目录名

MAX_DUMP_FILE_SIZE=5M

SQL_TRACE=TRUE

或者:

SQL>ALTER SESSION SET SQL_TRACE=TRUE对当前会话进行SQL跟踪。

锁等待问题与KILL SESSION

为了保证数据的一致性,系统提供锁机制。有关锁的概念可以参数《数据库系统概论》一书。要了解当前在等待锁资源的用户:

sql>select https://www.doczj.com/doc/9a14185706.html,ername,a.sid,a,serial#,b.id1 from v$session,v$lock where a.lockwait=b.kaddr;

要了解锁住其它用户的用户进程:

SQL>SELECT https://www.doczj.com/doc/9a14185706.html,ERNAME,A.SID,A,SERIAL#,B.ID1 FROM V$SESSION A,V$LOCK B WHERE B.ID1 IN (SELECT DISTINCT E.ID1 FROM V$SESSION D,V$LOCK E WHERE D.LOCKWAIT=E.KADDR) AND A.SID=B.SID AND B.REQUEST=0;

ORACLE数据库与实例的关系

ORACLE数据库与实例的关系 1 数据库名 1.1 数据库名的概念 数据库名(db_name)就是一个数据库的标识,就像人的身份证号一样。如果一台机 器上装了多个数据库,那么每一个数据库都有一个数据库名。在数据库安装或创建完成之后,参数DB_NAME被写入参数文件之中。 数据库名在$Oracle_HOME/admin/db_name/pfile/init.ora(或 $ORACLE_BASE/admin/db_name/pfile/init.ora或$ORACLE_HOME/dbs/SPFILE<实 例名>.ORA)文件中 ########################################### # Database Identification ########################################### db_domain="" db_name=orcl 在创建数据库时就应考虑好数据库名,并且在创建完数据库之后,数据库名不宜修改,即使要修改也会很麻烦。因为,数据库名还被写入控制文件中,控制文件是 以二进制型式存储的,用户无法修改控制文件的内容。假设用户修改了参数文件中的数据库名,即修改DB_NAME的值。但是在Oracle启动时,由于参数文件中的DB_NAME与控制文件中的数据库名不一致,导致数据库启动失败,将返回ORA-01103错误。 1.2 数据库名的作用 数据库名是在安装数据库、创建新的数据库、创建数据库控制文件、修改数据结构、备份与恢复数据库时都需要使用到的(注意这些时候不能使用sid,还有alter database时都是使用数据库名)。 有很多Oracle安装文件目录是与数据库名相关的,如: winnt: F:\oracle\product\10.2.0\oradata\DB_NAME\...

Oracle数据库实例及其相关概念

Oracle数据库实例及其相关概念2010-11-24 00:00 出处:中国IT实验室作者:佚名 完整的Oracle数据库通常由两部分组成:Oracle数据库实例和数据库。 用数据库安全策略防止权限升级攻击 C++虚函数的显式声明 完整的Oracle数据库通常由两部分组成:Oracle数据库实例和数据库。 1)数据库是一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等); 2)Oracle数据库实例则是一组Oracle后台进程/线程以及在服务器分配的共享内存区。 在启动Oracle数据库服务器时,实际上是在服务器的内存中创建一个Oracle实例(即在服务器内存中分配共享内存并创建相关的后台内存),然后由这个Oracle数据库实例来访问和控制磁盘中的数据文件。Oracle有一个很大的内存快,成为全局区(SGA)。 一、数据库、表空间、数据文件 1.数据库 数据库是数据集合。Oracle是一种数据库管理系统,是一种关系型的数据库管理系统。 通常情况了我们称的“数据库”,并不仅指物理的数据集合,他包含物理数据、数据库管理系统。也即物理数据、内存、操作系统进程的组合体。 数据库的数据存储在表中。数据的关系由列来定义,即通常我们讲的字段,每个列都有一个列名。数据以行(我们通常称为记录)的方式存储在表中。表之间可以相互关联。以上就是关系模型数据库的一个最简单的描述。

当然,Oracle也是提供对面象对象型的结构数据库的最强大支持,对象既可以与其它对象建立关系,也可以包含其它对象。关于OO型数据库,以后利用专门的篇幅来讨论。一般情况下我们的讨论都基于关系模型。 2.表空间、文件 无论关系结构还是OO结构,Oracle数据库都将其数据存储在文件中。数据库结构提供对数据文件的逻辑映射,允许不同类型的数据分开存储。这些逻辑划分称作表空间。 表空间(tablespace)是数据库的逻辑划分,每个数据库至少有一个表空间(称作SYSTEM表空间)。为了便于管理和提高运行效率,可以使用一些附加表空间来划分用户和应用程序。例如:USER表空间供一般用户使用,RBS表空间供回滚段使用。一个表空间只能属于一个数据库。 每个表空间由同一磁盘上的一个或多个文件组成,这些文件叫数据文件(datafile)。一个数据文件只能属于一个表空间。在Oracle7.2以后,数据文件创建可以改变大小。创建新的表空间需要创建新的数据文件。数据文件一旦加入到表空间中,就不能从这个表空间中移走,也不能与其它表空间发生联系。 如果数据库存储在多个表空间中,可以将它们各自的数据文件存放在不同磁盘上来对其进行物理分割。在规划和协调数据库I/O请求的方法中,上述的数据分割是一种很重要的方法。 3.Oracle数据库的存储结构分为逻辑存储结构和物理存储结构: 1)逻辑存储结构:用于描述Oracle内部组织和管理数据的方式; 2)物理存储结构:用于描述Oracle外部即操作系统中组织和管理数据的方式。 二、Oracle数据库实例

Oracle经典案例代码

ORACLE经典案例 ORACLE--E-001)员工信息综合查询 (ORACLE 定义 ORACLE-F-001——ORACLE-F-005的综合练习: 1.用sqlplus连接数据库时,为什么会出Oracle not available错误? 2.找出员工的姓中(last_name)第三个字母是a的员工名字 3.找出员工名字中含有a和e的 4.找出所有有提成的员工,列出名字、工资、提出,显示结果按工资从小到大,提成从小 到大 5.42部门有哪些职位 6.哪些部门不是Sales部 7.显示工资不在1000到1550之间的员工信息:名字、工资,按工资从大到小排序。 8.显示职位为Stock Clerk和Sales Representative,年薪在14400和17400之间的员工 的信息:名字、职位、年薪。 9.解释select id ,commission_pct from s_emp where commission_pct is null和select id , commission_pct from s_emp where commission_pct = null的输出结果。 10.select语句的输出结果为 select * from s_dept; select * from s_emp; select * from s_region; select * from s_customer; …… 当前用户有多少张表,结果集有多少条记录。 11.判断select first_name , dept_id from s_emp where salary > '1450'是否抱错,为 什么?

ORACLE创建实例

ORACLE创建实例是我们最常用的操作之一,下面就为您详细介绍ORACLE创建实例的全过程,希望对您能够有所帮助。 一、ORACLE创建实例过程: 1、安装好ORACLE服务端。 2、ORACLE创建实例,使用ORAHOME目录下的"Configuration and Migration Tools"下的"Database Configuration Assistant"工具。 3、步骤2:选择"创建数据库"。 4、步骤3:选择数据库模板。 5、步骤4:选择"专用服务器模式"。 6、步骤5:设置初始化参数。 7、其它默认,点击"完成"。 创建一个数据库实例,在系统服务里会增加一个服务,名为:"OracleServer"+所创建的数据库实例的SID,该服务需要启动。 二、接着需要配置监听文件,如果没有的话,在OEM中"将数据库添加到数",打开,输入SYSTEM/PASSWORD,会提示没有监听器的。 监听文件路径:ORAHOME/ora92/network/admin/listener.ora 另外监听器日志文件路径是:ORAHOME/ora92/network/log/listener.log 用编辑器打开listener.ora文件,修改设置信息。例如(下面是一个完成的文件内容): # LISTENER.ORA Network Configuration File: D:\oracle\ora92\network\admin\listener.ora # Generated by Oracle configuration tools. LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 86.16.24.88)(PORT = 1521)) ) ) )

修改oracle实例名(sid)和数据库名(db_name)

修改oracle实例名(sid)和数据库名(db_name) 有时我们需要修改数据库的sid和dbname,除了使用rman进行备份恢复之外,也可以通过手工方式修改,主要由两个主要过程完成: 1、修改实例名(SID) 2、修改数据库名(dbname) 下面演示将数据库sid和dbname由orcl修改为cnhtm的过程: 1、修改实例名(sid) 1.1、检查原来的数据库实例名(sid) oracle@oracle[/home/oracle]> echo $ORACLE_SID orcl oracle@oracle[/home/oracle]> sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on Sun Dec 20 11:14:49 2009 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options sys@ORCL> select instance from v$thread; INSTANCE -------------------------------------------------------------------------------- orcl 1.2、关闭数据库 注意不能用shutdown abort,只能是shutdown immediate或shutdown normal

ORACLE_BASE、ORACLE_HOME有什么区别

ORACLE_BASE、ORACLE_HOME有什么区别 比如oracle 有两款产品,数据库以及其他的。在装的过程中都会装载ORACLE_BASE目录下。ORACLE_HOME 目录就是数据库的家目录。 例如:如果装了2个版本的oracle,那么ORACLE_BASE可以是一个,但ORACLE_HOME是2个。 ORACLE_BASE下是admin和product ORACLE_HOME下则是ORACLE的命令、连接库、安装助手、listener等等一系列的东东。 这只是ORACLE自己的定义习惯。ORACLE_HOME比ORACLE_BASE目录要更深一些。也就是说:ORACLE_HOME=$ORACLE_BASE/product/version ORACLE_BASE是oracle的根目录,ORACLE_HOME是oracle产品的目录。 简单说,你如果装了2个版本的oracle,那么ORACLE_BASE可以是一个,但ORACLE_HOME是2个 全局数据库名用于区别分布式数据库各个不同机器上的实例。 SID用于区别同一台机器上的不同实例, 即一个用于外部区分。 一个用于内部区分。 关于数据库名(db_name)、实例名(instance_name)、ORACLE_SID -------------------------------------------------------------------------------- https://www.doczj.com/doc/9a14185706.html,发布日期:2004-9-16 浏览次数: 作者:jrlee 关于数据库名(db_name)、实例名(instance_name)、ORACLE_SID 最近因看到论坛有人问起这方面的东西,将自己的理解加上查阅相关资料整理如下,如果不全或不当的地方,望指正并补全它。 数据库名(DB_NAME)、实例名(Instance_name)、以及操作系统环境变量(ORACLE_SID) 在ORACLE7、8数据库中只有数据库名(db_name)和数据库实例名(instance_name)。在ORACLE8i、9i中出现了新的参数,即数据库域名(db_domain)、服务名(service_name)、以及操作系统环境变量(ORACLE_SID)。这些都存在于同一个数据库中的标识,用于区分不同数据库的参数。 一、什么是数据库名(db_name)? 数据库名是用于区分数据的内部标识,是以二进制方式存储于数据库控制文件中的参数,在数据安装或

如何区分Oracle的数据库,实例,服务名,SID

什么是数据库,其实很简单,数据库就是存储数据的一种媒介。比如常用的文件就是一种,在Oracle10G中,数据的存储有好几种。第一种是文件形式,也就是在你的磁盘中创建一批文件,然后在这些文件中存储信息。第二种就是磁盘阵列形式,这个是什么意思呢,这个就是说明数据库不是存放为某个文件,而是把一个或者多个磁盘格式化成Oracle的一种格式了,等于整个磁盘就是存放Ora cle数据库的,不能作为别的用途。这样的优点是存储性能高,因为不再借助别的文件格式了,而是把整个磁盘都成为Oracle最适应的文件系统格式。当然还可能有别的形式,比如网络什么的。不过我们最常用的还是文件格式的,在文件格式中,数据库指的就是那些数据文件,控制文件以及REDO文件等等一系列文件。 而什么是Instance呢,Instance其实就是指的操作系统中一系列的进程以及为这些进程所分配的内存块。在Oracle中,我们可以新建一个Oracle的Insta nce,这个时候虽然有了进程还有SGA等一系列的内存快,但是这个时候并没有把数据库文件读取进来。所以只是一个实例,在后来,你可以通过命令手动或者自动地把数据库文件加载进我们的数据库Instance中,这个时候的数据库才可以让我们真正的开始访问操作。 所以说,数据库的应用如果想实现,数据库和数据库Instance是缺一不可的,如果只有数据库的那些文件,那么,只能代表数据在这个文件中,但是我们无法直接进行操作。而如果只有数据库Instance,那么我们虽然可以急性操作,但是也不知道操作哪些数据,操作生成的数据也无法保存等等。所以,当一个Or acle Instance真正Load了一个Oracle Database了以后,数据库才可以被我们使用。

ORACLE_SID

详解:oracle10G 数据库名、实例名、ORACLE_SID 【转载】 数据库名、实例名、数据库域名、全局数据库名、服务名, 这是几个令很多初学者容易混淆的概念。相信很多初学者都与我一样被标题上这些个概念搞得一头雾水。我们现在就来把它们弄个明白。 一、数据库名 什么是数据库名? 数据库名就是一个数据库的标识,就像人的身份证号一样。他用参数DB_NAME表示,如果一台机器上装了多全数据库,那么每一个数据库都有一个数据库名。在数据库安装或创建完成之后,参数DB_NAME被写入参数文件之中。格式如下: DB_NAME=myorcl ... 在创建数据库时就应考虑好数据库名,并且在创建完数据库之后,数据库名不宜修改,即使要修改也会很麻烦。因为,数据库名还被写入控制文件中,控制文件是以二进制型式存储的,用户无法修改控制文件的内容。假设用户修改了参数文件中的数据库名,即修改DB_NAME 的值。但是在Oracle启动时,由于参数文件中的DB_NAME与控制文件中的数据库名不一致,导致数据库启动失败,将返回ORA-01103错误。 数据库名的作用 数据库名是在安装数据库、创建新的数据库、创建数据库控制文件、修改数据结构、备份与恢复数据库时都需要使用到的。 有很多Oracle安装文件目录是与数据库名相关的,如: winnt: d:\oracle\product\10.1.0\oradata\DB_NAME\... Unix: /home/app/oracle/product/10.1.0/oradata/DB_NAME/... pfile: winnt: d:\oracle\product\10.1.0\admin\DB_NAME\pfile\ini.ora Unix: /home/app/oracle/product/10.1.0/admin/DB_NAME/pfile/init$ORACLE_SID.ora 跟踪文件目录: winnt: /home/app/oracle/product/10.1.0/admin/DB_NAME/bdump/... 另外,在创建数据时,careate database命令中的数据库名也要与参数文件中DB_NAME参数的值一致,否则将产生错误。 同样,修改数据库结构的语句alter database,当然也要指出要修改的数据库的名称。 如果控制文件损坏或丢失,数据库将不能加载,这时要重新创建控制文件,方法是以nomount 方式启动实例,然后以create controlfile命令创建控制文件,当然这个命令中也是指指DB_NAME。 还有在备份或恢复数据库时,都需要用到数据库名。 总之,数据库名很重要,要准确理解它的作用。 查询当前数据名 方法一:select name from v$database; 方法二:show parameter db 方法三:查看参数文件。 修改数据库名 前面建议:应在创建数据库时就确定好数据库名,数据库名不应作修改,因为修改数据库名

Oracle数据库修改实例名SID的方法步骤

有时候我们需要修改Oracle数据库的实例名SID,下面是在Centos 6.5下修改ORACLE10.2的实例名的实例教程,感兴趣学习的朋友可以看下。 修改Oracle实例名 系统环境:CentOS 6.5 ORACLE版本:10.2 1、检查原来的数据库实例名 $ echo $ORACLE_SID orcl $ sqlplus / as sysdba > select instance from v$thread; INSTANCE -------------------------------------------------------------------------------- orcl 2、关闭数据库 > shutdown immediate; > exit; 3、修改oracle用户的ORACLE_SID环境变量,如由orcl修改为linuxidc $ vi /home/oracle/.bash_profile export ORACLE_SID=linuxidc $ source /home/oracle/.bash_profile 4、修改/etc/oratab文件,将sid名由orcl修改为linuxidc $ vi /etc/oratab linuxidc:/u01/app/oracle/11.2/db_1:Y 5、进入到$ORACLE_HOME/dbs目录 将所有文件名中包含原来的sid的修改为对应的新sid的 $ cd $ORACLE_HOME/dbs $ mv hc_zf.dat hc_linuxidc.dat $ mv lkZF lklinuxidc $ mv orapwzf orapwlinuxidc $ mv spfilezf.ora spfilelinuxidc.ora 6、重建口令文件 因为口令文件改名后不能在新实例中使用,所以重建 $ orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=123456 entries=5 force=y 7、启动数据库 $ sqlplus / as sysdba > startup 8、检查数据库实例名 通过如下语句检查数据库实例名,发现实例名已经由orcl变成linuxidc > select instance from v$thread; INSTANCE

Oracle中用sql语句创建数据库

二、在Windows下创建数据库 Oracle实例在Windows下表现为操作系统服务。在windows下,使用命令行方式创建数据的方法有所不同,差别在于在Windows下,需要先创建数据库服务和实例。 1.确定数据库名、数据库实例名和服务名并创建目录(DBCA创建的脚本不包含建立目录命令,须自己创建) 建立目录命令(下面以 db_name=eygle为例): mkdir D:\oracle\ora90\cfgtoollogs\dbca\eygle mkdir D:\oracle\ora90\database mkdir d:\oracle\admin\eygle\adump mkdir d:\oracle\admin\eygle\bdump mkdir d:\oracle\admin\eygle\cdump mkdir d:\oracle\admin\eygle\dpdump mkdir d:\oracle\admin\eygle\pfile mkdir d:\oracle\admin\eygle\udump mkdir d:\oracle\flash_recovery_area mkdir d:\oracle\oradata mkdir d:\oracle\oradata\eygle 2.创建参数文件 在Windows下的参数文件名称及路径如下: d:\oracle\product\10.1.0\admin\DB_NAME\pfile\init.ora(oracle10g) d:\orant\database\iniORACLE_SID.ora(oracle7,oracle8) 参数据文件内容与前述一致。这里不再说明。 3.选择数据库实例 设置环境变量ORACLE_SID c:\>set ORACLE_SID=数据库实例名 4.创建数据库实例 在Windows中创建数据库实例的命令为Oradim.exe,是一个可执行文件,可以在操作系统符号下直接运行。直接输入oradim显示此命令的帮助。 c:\>Oradim 下面对Oradim命令的参数进行一个说明 ------------------------------- -NEW 表示新建一个实例 -EDIT 表示修改一个实例 -DELETE 表示删除一个实例 -SID sid 指定要启动的实例名称 -SRVC service 指定要启动的服务名称 -INTPWD password 以Internal方式连接数据库时的口令字 -MAXUSERS count 该实例可以连接的最大用户数 -USRPWD password 指定内部用户的口令,如是作为Windows管理登录,不用此参数 -PFILE pfile 该实例所使用的参数文件名及路径 -STARTTYPE srvc|inst|srvc,inst 启动选项(srvc:只启动服务,inst:启动实例,服务必须先启动,srvc,inst:服务和实例同时启动) -SHUTTYPE srvc|linst|srvc,inst 关闭选项(srvc:只关闭服务,实例必须已关闭,inst:只关闭实例,srvc,inst:服务和实例同时关闭)

详解 数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名

详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名 数据库名、实例名、数据库域名、全局数据库名、服务名, 这是几个令很多初学者容易混淆的概念。相信很多初学者都与我一样被标题上这些个概念搞得一头雾水。我们现在就来把它们弄个明白。 v$database数据库的控制文件得到的关于数据库的信息 v$instance数据库服务当前状态信息 v$parameter每个数据库中初始化参数信息 一、数据库名 什么是数据库名? 数据库名就是一个数据库的标识,就像人的身份证号一样。他用参数DB_NAME表示,如果一台机器上装了多全数据库,那么每一个数据库都有一个数据库名。在数据库安装或创建完成之后,参数DB_NAME被写入参数文件之中。格式如下: DB_NAME=myorcl ... 在创建数据库时就应考虑好数据库名,并且在创建完数据库之后,数据库名不宜修改,即使要修改也会很麻烦。因为,数据库名还被写入控制文件中,控制文件是以二进制型式存储的,用户无法修改控制文件的内容。假设用户修改了参数文件中的数据库名,即修改DB_NAME的值。但是在Oracle启动时,由于参数文件中的DB_NAME与控制文件中的数据库名不一致,导致数据库启动失败,将返回ORA-01103错误。 数据库名的作用 数据库名是在安装数据库、创建新的数据库、创建数据库控制文件、修改数据结构、备份与恢复数据库时都需要使用到的。 有很多Oracle安装文件目录是与数据库名相关的,如: winnt: d:\oracle\product\10.1.0\oradata\DB_NAME\... Unix: /home/app/oracle/product/10.1.0/oradata/DB_NAME/... pfile: winnt: d:\oracle\product\10.1.0\admin\DB_NAME\pfile\ini.ora Unix: /home/app/oracle/product/10.1.0/admin/DB_NAME/pfile/init$ORACLE_SID.ora 跟踪文件目录: winnt: /home/app/oracle/product/10.1.0/admin/DB_NAME/bdump/... 另外,在创建数据时,careate database命令中的数据库名也要与参数文件中DB_NAME参数的值一致,否则将产生错误。 同样,修改数据库结构的语句alter database,当然也要指出要修改的数据库的名称。 如果控制文件损坏或丢失,数据库将不能加载,这时要重新创建控制文件,方法是以nomount方式启动实例,然后以create controlfile命令创建控制文件,当然这个命令中也是指指DB_NAME。还有在备份或恢复数据库时,都需要用到数据库名。 总之,数据库名很重要,要准确理解它的作用。

oracle实例名

Oracle数据库名:db_name,instance_name,ORACLE_SID,db_domain,global_name... 一、数据库名 1.数据库名的概念 数据库名(db_name)就是一个数据库的标识,就像人的身份证号一样。如果一台机器上装了多全数据库,那么每一个数据库都有一个数据库名。在数据库安装或创建完成之后,参数DB_NAME被写入参数文件之中。格式如下: ########################################### # Database Identification ########################################### db_domain="" db_name=orcl 在创建数据库时就应考虑好数据库名,并且在创建完数据库之后,数据库名不宜修改,即使要修改也会很麻烦。因为,数据库名还被写入控制文件中,控制文件是以二进制型式存储的,用户无法修改控制文件的内容。假设用户修改了参数文件中的数据库名,即修改DB_NAME的值。但是在Oracle启动时,由于参数文件中的DB_NAME与控制文件中的数据库名不一致,导致数据库启动失败,将返回ORA-01103错误。 2.数据库名的作用 数据库名是在安装数据库、创建新的数据库、创建数据库控制文件、修改数据结构、备份与恢复数据库时都需要使用到的。 有很多Oracle安装文件目录是与数据库名相关的,如: winnt: F:\oracle\product\10.2.0\oradata\DB_NAME\... Unix: /home/app/oracle/product/10.2.0/oradata/DB_NAME/... 又如参数文件pfile: winnt: F:\oracle\product\10.2.0\admin\DB_NAME\pfile\init.ora.54200885729 Unix: /home/app/oracle/product/10.2.0/admin/DB_NAME/pfile/init$ORACLE_SID.ora 如果控制文件损坏或丢失,数据库将不能加载,这时要重新创建控制文件,方法是以nomount方式启动实例,然后以create controlfile命令创建控制文件,当然这个命令中也要指明DB_NAME。 3.修改数据库名 建议:应在创建数据库时就确定好数据库名,数据库名不应作修改,因为修改数据库名是一件比较复杂的事情。 现在就来说明一下,如何在已创建数据之后,修改数据库名。步骤如下: (1)关闭数据库。 (2)修改数据库参数文件中的DB_NAME参数的值为新的数据库名。 (3)以NOMOUNT方式启动实例,修建控制文件(有关创建控制文件的命令语法,请参考oracle文档) 4.查询当前数据库名 方法一: select name from v$database; 方法二:show parameter db 方法三:查看参数文件 二、数据库实例名 1.数据库实例名的概念 先来解释以下,实例是什么东西。实例是访问Oracle数据库所需的一部分计算机内存和

ORACLE9i数据库名、实例名、服务名之间的关系

ORACLE9i数据库名、实例名、服务名之间的关系 Yuechaotian 2007-08-31 Oracle中存在着这些容易混淆的名称: 数据库名 实例名 ORACLE_SID 服务名 域名 全局数据库名 在oracle7/8/9i/10g中都有数据库名和实例名,在9i和10g中又引进了三个新的数据库标识类参数:数据库域名(db_domain)、全局数据库名(global_dbname)和数据库服务名(service_names)。下面介绍一下这些名称的关系: 1.数据库名 用于区分一个数据库的内部标识,在安装数据库、创建新数据库、创建控制文件、修改数据库结构、利用RMAN备份时都需要使用数据库名。 存在于(但不仅限于)以下地方: (1)以二进制方式存储在控制文件中。 (2)Pfile/spfile中:db_name (3)数据库物理结构文件目录中 D:\oracle\oradata\db_name\*.* D:\oracle\admin\db_name\*.* 查询方法:select name from v$database; 2.实例名 用于和操作系统进行联系。在操作系统中要取得与数据库之间的交互必须使用实例名。例如,要和某一个数据库服务器连接,则必须知道其数据库实例名,知道数据库名是没用的。在安装/创建数据库后,实例名允许修改的。 存在于(但不仅限于)以下地方: (1)Windows nt/2000注册表中(oracle_sid)

(2)pfile/spfile中:instance_name (3)数据库参数文件名中:init.ora 查询方法:select instance_name from v$instance; 与数据库名的关系:一般是一一对应的,RAC中除外。 3.ORACLE_SID 细心的朋友可以发现,2.3中有个问题:2中讲的是instance_name,但 2.3存储的却是oracle_sid。 因为从名称上来说,instance_name=oracle_sid。对于数据库实例名的描述,有时使用instance_name,有时使用oracle_sid,这两个都是数据库实例名。但instance_name是oracle数据库参数,而oracle_sid是操作系统环境变量。 Oracle_sid用于和操作系统交互。也就是说,在操作系统中要想得到实例名,必须使用oracle_sid。例如同一服务器上创建了多个数据库,则就有多个对应的实例,可以通过在操作系统中设置oracle_sid指定要登录的数据库:$oracle_sid=orcl $export oracle_sid C:\>set oracle_sid=orcl 存在于(但不仅限于)以下地方: (1)Windows nt/2000注册表中(oracle_sid) (2)数据库参数文件名中:init.ora 实例名除用于和操作系统联系外,还用于网络连接,即与客户端或其他服务器之间的连接。配置网络连接,就是配置网络连接串。 例如登录某远程数据库: C:\>sqlplus xtjb/xtjb@s101 这里的s101就是一个网络连接串。 在oracle的不同版本中,网络连接串的内容是不同的。在网络驱动版本为sql*net或net8时,网络连接串使用数据库实例名构造;网络驱动版本为net8i或net services时,网络连接串使用数据库服务名构造(服务名见后面介绍)。见图3中的填写说明。

如何修改oracle实例名

如何修改oracle实例名 1,先停止oracle $dbshut 2,修改ORACLE_SID(原来为ora92new) vi .profile 修改ORACLE_SID=ora92 3,退出oracle用户 4,修改/etc/oratab将(该文件决定了dbshut/dbstart的启动) 将ora92new:/home/oracle/app/oracle/product/9.2:Y 修改为ora92:/home/oracle/app/oracle/product/9.2:Y 5,再次进入oracle用户,修改ora92new的init参数文件 /home/oracle/app/oracle/admin/ora92new/pfile/init.ora cp /home/oracle/app/oracle/admin/ora92new/pfile/init.ora /home/oracle/app/oracle/admin/ora92/pfile/init.ora vi /home/oracle/app/oracle/admin/ora92/pfile/init.ora 修改如下(原来对应的部分为ora92new) instance_name=ora92 dispatchers="(PROTOCOL=TCP) (SERVICE=ora92XDB)" background_dump_dest=/home/oracle/app/oracle/admin/ora92/bd ump core_dump_dest=/home/oracle/app/oracle/admin/ora92/cdump user_dump_dest=/home/oracle/app/oracle/admin/ora92/udump 6,startup pfile="/home/oracle/app/oracle/admin/ora92/pfile/init.ora" 7,启动后重建spfile到/dev/rlvora_spfile create spfile='/dev/rlvora_spfile' FROM pfile='/home/oracle/app/oracle/admin/ora92/pfile/init.ora'; SQL> create spfile='/dev/rlvora_spfile' FROM pfile='/home/oracle/app/oracle/admin/ora92/pfile/init.ora'; File created. 8,修改$ORACLE_HOME/dbs,让数据库指定从rlvora_spfile启动 cd $ORACLE_HOME/dbs mv initora92.ora initora92.ora.bak20090109 vi initora92.ora 新建initora92.ora内容如下(模仿initora92new.ora) spfile='/dev/rlvora_spfile'

Oracle 11gR2 创建数据库实例

Oracle 11gR2 创建数据库实例 因为工作需要在Oracle 11gR2库中新建一数据库实例。采用脚本命令创建,建议使用oracle用户进行以下操作。顺序如下: 1.创建实例启动用的参数文件。在程序默认的参数文件里修改即可:重命名规则initSID.ora /u01/oracle/product/11.2.0/db_1/dbs/ 下,目录尽量使用绝对路径,采用ORACLE_BASE等环境变量有可能报错。 例initcrm.ora db_name='crm' --修改 #memory_target=500m --注释掉 sga_target=200m --添加 pga_aggregate_target=60m --添加 processes = 150 audit_file_dest='/u01/oracle/admin/crm/adump' --建立目录 audit_trail ='db' db_block_size=8192 db_domain='' db_recovery_file_dest='/u01/oracle/flash_recovery_area' --建立目录 db_recovery_file_dest_size=2G diagnostic_dest='/u01/oracle' ---修改 dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)' open_cursors=300 remote_login_passwordfile='EXCLUSIVE' undo_tablespace='UNDOTBS1' 2.创建相应目录: mkdir -p /u01/oracle/admin/ora11g/adump mkdir -p /u01/oracle/admin/ora11g/dpdump mkdir -p /u01/oracle/flash_recovery_area 3.创建密码文件:命名规则orapwSID,目录依旧是 /u01/oracle/product/11.2.0/db_1/dbs/ Linux下orapw+实例名 Windows下pwd+实例名 $ orapwd file=orapwora11g password=oracle 4.创建数据库实例 设置环境变量export ORACLE_SID=crm 执行以下命令 sqlplus /nolog conn / as sysdba

ORACLE的两个实例,如何进行分别重启

AIX上安装了ORACLE的两个实例,如何进行分别重启 问题背景: 用户购买了oracle10g数据库,先安装了一个实例orcl供nc产品使用,后来又安装了第二个实例oadb供OA系统用。由于机房方面的原因需要将服务器重启,为了保证数据库安全,客户想将oracle先停止然后再重新启动,并要求每个实例分别进行停止和启动。 解决方法: 用root进入AIX系统之后切换到oracle用户 然后运行以下命令: 一、关闭NC数据库 1.配置变量 export ORACLE_HOME=/home/oracle/OraHome_1 export PATH=$PATH:$ORACLE_HOME/bin export ORACLE_SID=orcl 2.连接数据库 sqlplus /nolog conn /as sysdba 3.关闭数据库 SQL>shutdown immediate SQL>exit 4.关闭监听 lsnrctl stop 1.关闭OA的数据与上面雷同,只不过将上面1中的ORACLE_SID的内容改为OA的数据库示例名称oadb即可 二、启动NC数据库 用root进入AIX系统之后切换到oracle用户 然后运行以下命令: 1.配置变量 export ORACLE_HOME=/home/oracle/OraHome_1 export PATH=$PATH:$ORACLE_HOME/bin export ORACLE_SID=orcl 2.启动监听 lsnrctl start 3.连接数据库 sqlplus /nolog

conn /as sysdba 4.启动数据库 SQL>startup SQL>exit

oracle实例名,数据库名,服务名等概念区别与联系

oracle实例名,数据库名,服务名等概念区别与联系 数据库oracle服务器archivedatabase多线程数据库名、实例名、数据库域名、全局数据库名、服务名这是几个令很多初学者容易混淆的概念。相信很多初学者都与我一样被标题上这些个概念搞得一头雾水。我们现在就来把它们弄个明白。 一、数据库名 什么是数据库名? 数据库名就是一个数据库的标识,就像人的身份证号一样。他用参数DB_NAME表示,如果一台机器上装了多全数据库,那么每一个数据库都有一个数据库名。在数据库安装或创建完成之后,参数DB_NAME被写入参数文件之中。格式如下: DB_NAME=myorcl ... 在创建数据库时就应考虑好数据库名,并且在创建完数据库之后,数据库名不宜修改,即使要修改也会很麻烦。因为,数据库名还被写入控制文件中,控制文件是以二进制型式存储的,用户无法修改控制文件的内容。假设用户修改了参数文件中的数据库名,即修改DB_NAME 的值。但是在Oracle启动时,由于参数文件中的DB_NAME与控制文件中的数据库名不一致,导致数据库启动失败,将返回ORA-01103错误。 数据库名的作用 数据库名是在安装数据库、创建新的数据库、创建数据库控制文件、修改数据结构、备份与恢复数据库时都需要使用到的。 有很多Oracle安装文件目录是与数据库名相关的,如: winnt: d:/oracle/product/10.1.0/oradata/DB_NAME/... Unix: /home/app/oracle/product/10.1.0/oradata/DB_NAME/... pfile: winnt: d:/oracle/product/10.1.0/admin/DB_NAME/pfile/ini.ora Unix: /home/app/oracle/product/10.1.0/admin/DB_NAME/pfile/init$ORACLE_SID.ora 跟踪文件目录: winnt: /home/app/oracle/product/10.1.0/admin/DB_NAME/bdump/... 另外,在创建数据时,careate database命令中的数据库名也要与参数文件中DB_NAME参数的值一致,否则将产生错误。 同样,修改数据库结构的语句alter database,当然也要指出要修改的数据库的名称。 如果控制文件损坏或丢失,数据库将不能加载,这时要重新创建控制文件,方法是以nomount 方式启动实例,然后以create controlfile命令创建控制文件,当然这个命令中也是指指DB_NAME。 还有在备份或恢复数据库时,都需要用到数据库名。 总之,数据库名很重要,要准确理解它的作用。

相关主题
文本预览
相关文档 最新文档