oralce 一些问题

1.为什么我用oracle创建了两个数据库 却只用一个端口1521

在TCP/IP网络中,(IP,端口号)可以唯一确定一个进程的地址,oracle监听器也是一个TCP/IP网络中的进程,默认的端口号是1521。
oracle监听器进程可以同时为多个数据库服务。
客户端进程通过listener.ora 获得oracle监听器进程的(IP,端口)
oracle监听器进程通过1521端口接收所有客户联接请求,并从客户联接请求中分理出客户希望联接的数据库进程的相关信息,比如SID,SERVICE_NAME,DB_NAME。根据这些信息,通过查询一个本地文件(tnsnames.ora),oracle监听器进程可以得到客户想要联接的数据库主进程的相关连结信息,并把这些信息返回给客户端,客户端根据返回的联接信息,重新联接到对应的数据库主进程。
通过查询本地配置文件tnsnames.ora,一个oracle监听器进程就可以同时为多个数据库(主进程)服务。

创建2个数据库是2个。但是oracle的端口指的是监听端口
也就是用户客户端连接过来的端口。
所以是可以在一个监听中监听2个数据库的。
当然如果你希望分开的话也可以修改$ORACLE_HOME/network/admin/listener.ora文件来配置2个监听,具体要配置详细的ORACLE_BASE和ORALCE_SID
然后起2个不同的LISTENER名字,启动时候专门指定监听名。
例如:lsnrctl start <listener_name>
2.使用多个监听器时的附加配置

连接时故障切换特性

此特性允许客户在TNSNAMES。ORA中指定多个监听器,如果连接到第一个监听器失败,则尝试连接下一个监听器。
TNSNAMES.ORA示例如下:

ORCL =

(DESCRIPTION =
(ADDRESS_LIST = 
(ADDRESS = (PROTOCOL = TCP) ( HOST = DBPROD ) ( PROT = 1521 ))
(ADDRESS = (PROTOCOL = TCP) ( HOST = DBFAIL ) ( PROT = 1521 ))     ##多了一个监听器地址
)
(CONNECT_DATA = (SERVICE_NAME = PROD ) ( SERVER = DECIATED)
)
)

 

3.透明应用故障切换(Transparent Application Failover)特性

它用于高可用性环境,它允许客户应用软件在当前连接出现故障时,自动重新连接到数据库,而且可选的继续执行一条已在运行的SQL语句。
PROD的数据库在DBPROD和DBFAIL这两个服务器上必须相同,本例才能工作。具体示例如下:

ORCL =

(DESCRIPTION = 
(FAILOVER = ON
(ADDRESS_LIST = 
(ADDRESS = (PROTOCOL = TCP) (HOST=DBPROD) (PORT = 1521))
(ADDRESS = (PROTOCOL = TCP ) ( HOST = DBFAIL) (PORT = 1521))
)
(CONNECT_DATA= (SERVICE_NAME = PROD) (SERVER = DEDICATED)
(FAILOVER_MODE= (TYPE=SELECT) ( METHOD = BASICE))
)
)

4.客户负载平衡(Client Load Balancing)

该特性允许客户从一个监听器列表中随机地挑选,以达到平衡连接请求的效果。
该用特性需要添加LOAD_BALANCE参数,具体示例如下

ORCL =

(DESCRIPTION =
(LOAD_BALANCE= ON)
(ADDRESS_LIST = 
(ADDRESS = (PROTOCOL = TCP) (HOST = MWEISHAN-DELL) (PORT=1522))
(ADDRESS = (PROTOCOL = TCP) (HOST = MWEISHAN-DELL) (PROT=1521))
)
(CONNECT_DATA = 
(SERVICE_NAME=ORCL)
)
)

5 数据库名、实例名、服务名有何区别?

数据库名必须是一个不超过8个字符的文本串,在数据库创建过程中被记录在数据库文件、日志文件、控制文件中。如果数据库实例启动过程中参数文件中 的DB_NAME和控制文件中的数据库名不一致,则数据库不能启动。

 数据库名是用于区分数据的内部标识,是以2进制方式存储在控制文件中的参数,在数据库安装和创建之后不得修改,在数据库安装完成后,该参数被写入数据库参数文件pfile中。

 参数文件中的服务名应该是对外提供的一个服务名,默认为db_name.db_domain.该参数与tnsnames中使用的服务名没有依存关系,service_name取决于listener.ora中的global_name的值。

  数据库的实例名用于和操作系统之间的联系,用于对外部连接时使用,在操作系统中要取得与数据库的联系必须使用实例名,例如要和一个数据库的servicer连接,就必须知道数据库的实例名,只知道数据库名是不够的。但是实例名可以修改,数据库名和实例名的关系:一般是一一对应关系。 


oracle建表为什么不在用户指定的表空间里面


为用户指定表空间时,同时还需要为该用户在指定的表空间中分派定额才能在指定的表空间中创建表.你为用户授予了DBA的权限,自然就拥有了SYS用户的权限,所以可以往system表空间中写入数据.当你没有授予DBA权限时,是绝对不会在你所指定的表空间中创建表的.表空间ems_temp与ems是属于不同的表空间.
SQL>revoke dba from ONEZERO;/*撤消DBA权限
SQL>grant create session,create table to ONEZERO;/*为用户分派适当的权限
SQL>alter user ONEZERO default tablespace ems_temp quota unlimited on ems_temp;/*为用户ONEZERO在ems_temp表空间中分派定额,这里是无限限的unlimited,即用户可以无限制的使用该表空间.也可以为其指定相应的大小.
提问者评价
谢谢你。我用onezero账号,用Normal登录建表就可以。用SYSDBA登录就出现上面的情况

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章