Oracle10G控制台解决办法-Io 异常:Unknown host specified;

来源:互联网 发布:网站的数据分析报告 编辑:程序博客网 时间:2024/05/03 08:30

Oracle 10g 控制台登录 出现Io 异常:Unknown host specified

在用ORACLE 10G时,我用SYSTEM登录企业管理器,可以登录,但在使用Oracle的一些功能(比如登录之后点击“管理”菜单项,欲打开管理界面)会出现下列几类错误

Io 异常:Unknown host specified;

“java.lang.Exception: Exception in sending Request :: null”。

补充:即便是使用其他机器连接此机的oracle,也是出现如此情况,但使用命令可以操作,可以创建net配置。

解决办法:

第一步:找到 10.2.0\db_1\KEVIN_orcl\sysman\config\emd.properties(其中KEVIN_orcl是我本机上的目录名称:servername_sid,若是自定义的$ORACLE_HOME请自行更改)

第二步:用记事本打开emd.properties,其中的agentTZRegion缺省是GMT,改为你所在的时区即可,例如: 
agentTZRegion=Asia/Shanghai

            注:关于时区的列表参考:10.2.0\db_1\sysman\admin\supportedtzs.lst 。或者执行以下语句可以获得timezone的信息:select * from v$timezone_names

第三步:重启机器或者OracleDBConsole<SID>服务

寻找方法,喜爱敏捷,实践方法,不断总结,坚持到底,终将成功。


.

[转载:]转载写明出处,不然烂屁眼http://server.zol.com.cn/127/1273803.html

安装Oracle 10g R2后,其他地方功能都正常,就是登录web控制台时提示以下几类错误:

  Io 异常:Unknown host specified;

  java.lang.Exception: Exception in sending Request :: null;

  "Agent process exited abnormally during initialization" insystem event log;

  这个问题是由数据库控制服务自动配置时区错误引起的,一般情况下,在文件中/config/emd.properties ,noagentTZRegionparameter或者agentTZRegion=GMT,只需要把GMT修改为我们当前的时区,重新启动OracleDBConsole_sid服务即可,如果安装了防火墙,必须保证相应的服务可以访问网络。

  执行以下语句可以获得timezone的信息:select * fromv$timezone_names,选择对应的timezone,比如agentTZRegion=Asia/Shanghai,重新启动OracleDBConsole_sid服务,问题解决。

 

   正在连接到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

   LISTENER 的 STATUS

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

    别名LISTENER

    版本TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ

   ction

   启动日期 03-12月-2007 09:29:47

   正常运行时间 0 天 0 小时 49 分 50 秒

   跟踪级别 off

   安全性 ON: Local OS Authentication

   SNMP OFF

   监听程序日志文件 e:oracleproduct10.2.0db_1networkloglistener.log

   监听端点概要……

   (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xys)(PORT=1521)))

   服务摘要……

    服务"TEST2.COM" 包含 1 个例程。

    例程"inst_test", 状态 READY, 包含此服务的 1 个处理程序……

    服务"TEST3.COM" 包含 1 个例程。

    例程"inst_test", 状态 READY, 包含此服务的 1 个处理程序……

    服务"test1.COM" 包含 1 个例程。

    例程"inst_test", 状态 READY, 包含此服务的 1 个处理程序……

    服务"test1_XPT.COM" 包含 1 个例程。

    例程"inst_test", 状态 READY, 包含此服务的 1 个处理程序……

 

 

   命令执行成功

   SQL> show parameter service_names

   NAME TYPE VALUE

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

   service_names string TEST2, TEST3

   我们发现service_names的值是TEST2, TEST3,但是lsnrctlstatus显示的结果中包含了“

    服务"test1.COM" 包含 1 个例程。

    例程"inst_test", 状态 READY, 包含此服务的 1 个处理程序……“

   2、instnace_name 实例名

SQL> show parameter instance_name

   NAME TYPE VALUE

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

   instance_name string inst_test

   instance_name除了动态注册监听用到之外,到目前为止我没有发现其他用处,也许oracle用它来区分各个实例?不过相信仅仅通过instance_name也不能完全区分,至少也的用到sid吧,看看上面显示出来的动态注册监听中的信息,其中inst_test就是instance_name

   3、SID:System Identifier

   The SID identifies the instance's shared memory on a host, but maynot uniquely distinguish this instance

   from other instances

   doc上把sid解释为在host上用sid来标示实例的共享内存的,可见sid主要是和os打交道的。

   sid可以通过如下语句在库中查询:

   SQL> select instance_name fromv$instance;

   INSTANCE_NAME

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

   tsid

 

 

   尽管v$instance中字段 instance_name看起来是实例名,但是实际上存储的是sid,在win下sid不能重复,不管oracle_home是否相同,相同当然不行,主要是不同也不行,这里的不同是针对unix/linux而言的,在unix/linux下只要不同版本的oracle安装在不同的oracle_home下就可以创建相同sid的实例,但是win下不可以,这不是由oracle决定的,主要是受到windows服务的限制,在服务中不能存在服务名相同的oracle服务,服务名是由如下格式组成的:OracleServiceSID,因为服务名中包括了sid,所以sid如果相同了,服务名就相同了,这是windows所不允许的。因此在win下无法创建相同sid的不同实例。

   4、service_names 服务名

   服务名是复数,大家看好了,意味着service_names可以是多个值,这里的服务名除了在动态注册的监听中被用到之外,没有发现其它用处,还有其它用处大家可以补充,dataguard中建议大家在primary,standby上使用相同的service_names,这样可能便于尽可能的实现透明切换,前提是如果没有配置静态静听的话,当然如果配置了静态注册的监听在primary,standby上也务必保持在listener中要求输入的服务名相同,还是那句话,尽可能的实现透明切换。下面查询可以显示service_names:

   SQL> show parameter service_names

   NAME TYPE VALUE

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

   service_names string TEST2, TEST3

   这里我指定了2个值test2,test3,再来看看动态注册的监听是如何使用服务名的,监听的部分状态信息如下:

    服务"TEST2.COM" 包含 1 个例程。

    例程"inst_test", 状态 READY, 包含此服务的 1 个处理程序……

    服务"TEST3.COM" 包含 1 个例程。

    例程"inst_test", 状态 READY, 包含此服务的 1 个处理程序……

   这里我们看到显示出来的服务名有后缀com,是因为我设置了db_domain

   5、db_domain 数据库域名

   SQL> show parameter db_domain

   NAME TYPE VALUE

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

   db_domain string COM

   doc上说它被"."分割,包括句点最多128个字符,没改过这么长的,不知道,没有验证过,谁想验证就验证一下,db_domain的作用主要是用在分布式数据库中,分布式事务的各个数据库应该有db_domain,但是要求他们是否相同,doc上没说,我也不知道,之前单位开发有分布式环境,但是当时没有注意过,不过高级复制中要同步的对象所在的数据库是无论如何也要设置db_domain的,是否要求相同也不得而知了,我在配置复制的时候把db_domain 设置为相同的了。介绍db_domain的另一个用途就是在同一个os域中如果要创建同名db_name的数据库时建议最好让具有相同db_name的数据库具有不同的db_domain,以保证在同一个域中global_name是唯一的。doc上也是这样建议的:Oraclerecommends that you specify DB_DOMAIN as a unique string for alldatabases in a domain

 

 

   当指定了db_domain的时候,在创建dblink时会自动在db_link的后面加上db_domain(doc:

    Ifyou omit the domains from the name of a database link, Oracleexpands the name by qualifying the database with the domain of yourlocal database as it currently exists in the data dictionary, andthen stores the link name in the data dictionary. The charactersvalid in a database domain name are: alphanumeric characters,underscore (_), and number sign (#)。

   ),9i好像记得是这样的,但是10g我验证了一下不是:

   SQL> create database link dbl_test using'orcl';

   数据库链接已创建。

   SQL> select db_link from dba_db_links;

   DB_LINK

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

   DBL

   DBL_TEST

   ORCL

   还有一点需要主要的是:You must set this parameter for every instance, andmultiple instances must have the same value in Real ApplicationClusters

   6、global_name 全局数据库名

   global_name 是由db_name.db_domain构成的,doc如下:


 

 以下是引用片段:
  Understanding How Global Database Names Are Formed
  A global database name is formed from two components: a databasename and a domain. The database name and the domain name aredetermined by the following initialization parameters at databasecreation:
  Component Parameter Requirements Example
  Database name DB_NAME Must be eight characters or less.sales
  Domain containing the database DB_DOMAIN Must follow standardInternet conventions. Levels in domain names must be separated bydots and the order of domain names is from leaf to root,LEFT to right. us.acme.com

 

 

   但是通过验证发现oracle并没有把db_name.db_domain和global_name同步起来,不知道为什么?global_nameoracle是通过提供了一个view,sys.global_name,该试图是源于props$的,可以查看创建view的脚本,最终我们访问的是一个publicsynonym global_name:

 

 

 

 

以下是引用片段:
  SQL> select * from global_name;
  GLOBAL_NAME
  --------------------------------------------
  test1

 

 

   按照doc的意思,我上面看到的查询结果应该是test1.com才对,这是我的疑问,好久了?

   不过我们也可以修改global_name:

   SQL> alter database rename global_name totest1.com;

   数据库已更改。

 

 以下是引用片段:
  SQL> select from global_name;
  GLOBAL_NAME
  --------------------------------------------------------------------------------
  TEST1.COM
  SQL> alter database rename global_name to test123.com;

 

 

数据库已更改。

 

 

 以下是引用片段:
  SQL> select from global_name;
  GLOBAL_NAME
  --------------------------------------------------------------------------------
  TEST123.COM
  SQL>

 

 

   需要注意的是一旦加上了域就不能通过上面的命令去掉了,如:

   SQL> alter database rename global_name totest123.com;

   数据库已更改。

 

 

 以下是引用片段:
  SQL> select from global_name;
  GLOBAL_NAME
  --------------------------------------------------------------------------------
  TEST123.COM
  SQL> alter database rename global_name to test1;

 

 

数据库已更改。

 

 

 

 

 以下是引用片段:
  SQL> select from global_name;
  GLOBAL_NAME
  --------------------------------------------------------------------------------
  TEST1.COM
  SQL> alter database rename global_name to test123;

 

 

数据库已更改。

 

 

 以下是引用片段:
  SQL> select * from global_name;
  GLOBAL_NAME
  --------------------------------------------------------------------------------
  TEST123.COM
  SQL>

 

 

   不过可以直接update global_name 或者props$来去掉后缀:

   SQL> update global_name setglobal_name='test1';

   已更新 1 行。

   SQL> commit;

   提交完成。

 

 

以下是引用片段:
  SQL> select * from global_name;
  GLOBAL_NAME
  ---------------------------------------------------------------
  test1
  SQL>

 

 

   global_name 的作用主要也是用在DistributedDatabase中,我只在高级复制中用过global_name

   详细的内容也可以参考下面的连接:

   [url=http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/ds_admin.htm#sthref4096]http://download.oracle.com/docs/…… dmin.htm#sthref4096[/url]

   7、global_names 是一个布尔值

   为什么要提它,是应为global_names和global_name看起来很相似,global_names的作用是创建dblink时是否强制使用远程数据库的global_name,如果global_names=true,则db linkname必须要求是remote database的global_name,否则创建之后db link不能连同,测试如下,缺省值是false.

 

 

 

 以下是引用片段:
  SQL> show parameter global_names
  NAME TYPE VALUE
  ------------------------------------ ----------- ------------------------------
  global_names boolean TRUE
  SQL> select count(*) from t_emp@dbl;
  select count(*) from t_emp@dbl

 

    第1 行出现错误:

   ORA-02085: 数据库链接 DBL 连接到 ORCL

 

8、在通过netmanager配置静态监听注册时,需要输入的全局数据库名(GLOBAL_DBNAME)到底应该输入什么?而通过netmanager配置网络服务命名(tns)是需要输入的服务名(SERVICE_NAME)又是什么?

listener.ora内容如下:

 

  SID_LIST_LISTENER =
  (SID_LIST =
  (SID_DESC =
  (GLOBAL_DBNAME = test)
  (ORACLE_HOME = E:oracleproduct10.2.0db_1)
  (SID_NAME = tsid)
  )
  )
  LISTENER =
  (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = xys)(PORT = 1521))
  )

 

   tnsnames.ora内容如下:

 

 

  TEST =
  (DESCRIPTION =
  (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = xys)(PORT = 1521))
  )
  (CONNECT_DATA =
  (SERVICE_NAME = test)
  )
  )

 

 

   这里明确的告诉大家,配置静态监听注册时,需要输入的全局数据库名(GLOBAL_DBNAME)输入什么都可以,只要保证listerner.ora中的GLOBAL_DBNAME和tnsnames.ora中的SERVICE_NAME保持一致就可以,下面通过试验看看效果:

   值得主要的是GLOBAL_DBNAME =test,而此时数据库的db_name和global_name以及service_names分别如下显示:

   SQL> show parameter db_name

   NAME TYPE VALUE

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

   db_name string test1

   SQL> select *from global_name;

   GLOBAL_NAME

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

   test1

   SQL> alter database rename global_name toabcd.yu;

   数据库已更改。

   SQL> select *from global_name;

   GLOBAL_NAME

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

   ABCD.YU

   SQL>

   SQL> show parameter service_names

   NAME TYPE VALUE

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

   service_names string TEST2, TEST3

   SQL>

   而我在配置listener和tnsnames时提供的test和db_name,globla_name,service_name没有任何关系,然后看看tnsping的效果:

   C:>tnsping test

   已使用 TNSNAMES 适配器来解析别名

   Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS =(PROTOCOL = TCP)

   (HOST = xys)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME =test)))

    OK(30 毫秒)

   C:>

   9、db_unique_name

   DB_UNIQUE_NAME是10g的参数,在配置dataguard环境时必须为处于dg环境中每个db设置一个唯一值,在没有DB_UNIQUE_NAME参数之前,在同一台机器上搭建dg时必须使用参数LOCK_NAME_SPACE在standby参数文件中,10g

   有了参数db_unique_name,LOCK_NAME_SPACE已经被废弃!


0 0