看到一个关于SID的定义:SID用于识别同一台计算机上的同一个ORACLE数据库的不同实例。这个不同实例是指什么?
比如SQL SERVER中,一台计算机上可以有多个数据库,一个数据库中可以有多个表,那ORACLE中的这个SID和全局数据库名都是指什么?
比如SQL SERVER中,一台计算机上可以有多个数据库,一个数据库中可以有多个表,那ORACLE中的这个SID和全局数据库名都是指什么?
解决方案 »
- 怎么能用inner join连接两张表,并将其中一张表的两个值对应到另一张表的一个值上呢?
- 求助!我在同一个网段建立的databaselink可以用,跨网段为什么报错ora-12154!
- 登陆golden32
- 关于两个表更新的SQL语句问题
- 在vs2005利用sqlDataSource连接Oracle10g数据库服务器名怎么写的
- 现在不知为何每次都要重配监听器
- 书上说定义全局数据库名时, 要按照数据库.域名称,请问这里的域名称是指网络的域名称还是可以自己随便定义的.
- 谁能帮我把一SQL的trigger转换成ORACLE的,小弟在此先谢谢了!!!!!!!!!
- 如何用CASE解决如下问题
- 安装oracle12c,无法登陆,报:ora-12560 tns 协议适配器错误,求。。。
- 请教如何书写这样的SQL语句
- ERROR:ORA-12705: 无法访问 NLS 数据文件, 或者指定的环境无效
SID:是我们创建的一个数据库,可以创建多个,这就相当于类和对象的概念,数据库名是一个类,而SID则是
实例
SID:就是实例的名称,比如:MyOracle
数据库中的表的数量和每个表的结构通常是不一样的,怎么能说是“数据库名是一个类,而SID则是
实例” ,如果照你这种说法,那各个实例的表和表的结构都是一样的了。这应该是不对吧。
一个数据库对应多个实例,但一个用户只能与一个实例相连。
数据库实例名(instance_name)和ORACLE_SID功能类似,都是用于操作系统交互,
但区别是instance_name是oracle数据库参数,而ORACLE_SID是操作系统的环境变量。
一般,如果服务器只有一个实例,ORACLE_SID的值和实例的名称以及数据库名称相同。
按Tom的解释:
数据库(database):物理操作系统文件或磁盘( disk)的集合。使用Oracle 10g 的自动存储管理(Automatic Storage Management,ASM)或RAW 分区时,数据库可能不作为操作系统中单独的文件,但定义仍然不变。
实例(instance):一组Oracle 后台进程/线程以及一个共享内存区,这些内存由同一个计算机上运行的线程/进程所共享。这里可以维护易失的、非持久性内容(有些可以刷新输出到磁盘)。就算没有磁盘存储,数据库实例也能存在。也许实例不能算是世界上最有用的事物,不过你完全可以把它想成是最有用的事物,这有助于对实例和数据库划清界线。 这两个词有时可互换使用,不过二者的概念完全不同。实例和数据库之间的关系是:数据库可以由多个实例装载和打开,而实例可以在任何时间点装载和打开一个数据库。实际上,准确地讲,实例在其整个生存期中最多能装载和打开一个数据库!
如果你还是不明白,用CSDN上的一个网友的话来解释相对容易理解些:
数据库就是一个相片底片;实例就是相纸.
一个底片可以冲多个相纸,但一张相纸最多冲一个底片。重申一遍:
1)实例是一组后台进程和共享内存
2)数据库是磁盘上存储的数据集合。
3)实例“一生”只能装载并打开一个数据库。
4)数据库可以由一个或多个实例(使用RAC)装载和打开。
那么你该怎么区分不同的实例呢
你就可以用你的sid来区分
因为一台大型主机上可能搭载了很多的数据库。
当我们用SecureCRT类似工具连接的时候需要设定ORACLE_SID=数据库名,再对数据库进行操作。
这样在启动数据库时,通过SID来指定启动某个实例。也可以认为是个标志符。
全局数据库名就是我们的数据库名加上我们的域名
identifier. It and ORACLE_HOME (where the Oracle software is installed) are hashed together in UNIX to create
a unique key name for attaching an SGA. If your ORACLE_SID or ORACLE_HOME is not set correctly, you’ll get
the ORACLE NOT AVAILABLE error, since you can’t attach to a shared memory segment that is identified by
this unique key.
这个是tomkyte的说明:
也就是说:SID是站点标识符,通过它和ORACLE_HOME(指oracle的家目录)在UNIX系统中hash出一个唯一的键值来指定SGA( 一大块内存),如果SID或者ORALCE_HOME目录不对的话,ORACLE无法启动,因为UNIX系统无法给他分配内存,如果同一台机器装两个实例的话,在同样的ORACLE_HOME的情况下,我们只有设置不同的SID,才可以区分不同的ORACLE实例,才可以给ORACLE分配内存。
而SID是数据库的一个实例名称
我理解成装好数据库以后就是一个学校,每个SID是一间教室
多个仓库 就对应着多个 数据库的概念。接着,就是数据库的实例了。 一个数据库的实例,就可以想象为一个仓库的管理员,他手里有仓库钥匙,你要存取东西,必须通过他才可以。然而一个仓库并不是只有一个仓库的管理员,他可能有多个管理员(比如仓库太大了,一个人操作不过来,于是乎请了多个人来管理这个仓库)。而每个管理员的名字也就是SID。
一台服务器可以跑多个实例,所以需要 sid 来标识。
简单点,就是会话标识符哈。和$ORACLE_HOME一起唯一标识了一个SGA。顺便提一下,sid要和ORACLE_SID区别开哦。ORACLE_SID则可以认为是实例名,通过v$instance的字段instance_name查出。
亲~给分哦。
记住这些,oracle中一个SID可以理解成一个数据库,一个SID钟又包含了很多对象(表,索引,用户,触发器,job...)等等
SQL> show parameter name;NAME TYPE VALUE
------------------------------------ ----------- ---------
db_file_name_convert string
db_name string test
db_unique_name string test
global_names boolean FALSE
instance_name string test
lock_name_space string
log_file_name_convert string
service_names string testdb_name代表数据库名,instance_name代表实例名。(我库里只有一个实例)