平民化 ORACLE(二) 数据库的网络配置和连接

现在开始为数据库配置本地网络服务名。配置之前,在先前服务列表中确认你的监听服务已开启,监听服务名是这样的:你的OracleHome名后面加TNSLisener。然后在开始菜单运行对话框中输入netca,网络配置助手会弹出来跟你见面,如果系统提示没有netca这个指令,那有可能是因为版本的原因,也有可能是因为你环境变量配置没有加上Oracle的BIN文件夹,为了节省时间,还是老老实实找系统菜单中的Net Configure Assitance吧。

       在网络配置助手中,首先配置监听程序,要确认至少有一个监听程序在运行,默认情况下监听程序名叫LISTENER,占用1521端口。

其次配置本地网络服务名的时候,如果是本机数据库,那么IP地址不妨填做127.0.0.1那么在解析地址的时候会省上一点点时间,还能避免断网的时候不能访问本地库的麻烦。另外,最后一步测试登录的时候,最好用SYS或者SYSTEM测试,而不要用SCOTT/TIGER测试,我不是对SCOTT先生和他养的名叫TIGER的猫咪有什么歧视,而是有时候SCOTT账户被锁定了,或者没有连接权限,甚至没有创建的时候,连接测试就无法登录成功,这对不会根据错误提示来调整的新手会造成很大困扰。

       网络配置助手的配置信息存放在ORACLE安装路径下的 NETWORK/ADMIN文件夹下,主要包括三个文件:TNSNAME.ORA、LISENER.ORA、SQLNET.ORA。

       LISENER.ORA是监听器参数文件,配置了监听器的监听SID列表和单个监听程序的协议、主机、端口等等信息,记录了你在NECA中配置的监听程序信息。

       SQLNET.ORA是监听器的解析方式配置文件,主要包括服务认证方式(OS认证还是数据库认证)和服务名解析方式(包括TNSNAME解析、主机名解析还是LDAP协议解析等等)。

TNSNAME.ORA主要包括了连接协议、IP地址、端口和SID,完全跟你在网络配置助手中填写的本地网络服务名内容一致。

如果经过反复调整,你的服务名都无法成功登录,那么请在命令行下输入LSNRCTL STATUS查看监听器状态,并且在提示信息的SQLNET.ORA文件中查看 NAMES.DIRECTORY_PATH 的枚举值中是否有TNSNAMES选项,如果没有,必须加上,否则监听器不会通过TNSNAME.ORA解析服务名。如果你想直接连接,那么加上HOSTNAME。修改配置之后,在命令行下输入LSNRCTL RELOAD重新加载配置文件,并查看结果,如果提示服务名有了,那么应该就可以解析服务名了。如果监听器控制台命令表明服务已经开启,你安装了多个版本或者同一版本多个监听程序,或者由于手动配置的精简客户端和完全安装版本的配置相冲突造成的。或者是你的配置文件不是当前ORACLE_HOME的配置文件。请多多使用LSNRCTL工具,关于它甚至可以专门写一个章节了,LSNRCTL里面实在有太多的门道了。

还有一个网络配置工具是Net Manager由于功能跟NETCA重复了,这里我就不多说了。

       然后我们可以开始尝试连接数据库了。相信大家都知道用SQLPLUS 或者 SQLPLUSW以及SQLPLUS SHEETS对数据库进行连接,我们就以通用的SQLPLUS为例。在命令行中输入SQLPLUS /NOLOG,以非登录的方式进入SQLPLUS界面。

然后开始连接

SQL>conn system/manager@sid as sysdba

如果你前面配置没错的话,是可以连接上的。然后我们再进一步:

SQL>conn /@sid as sysdba

       你会发现不用用户名和密码也可以连上。甚至我们还能再进一步,连服务名都省掉:

SQL>conn / as sysdba

       这样还是能连上。不用用户名和密码的登录方式,叫做操作系统认证,你在数据库所在机器上运行,数据库默认你所在用户组是有ORA_DBA权限的,你可以在管理的用户组下面查看到ORA_DBA的组,并且安装ORACLE的用户已经在ORA_DBA组里面了,这种登录方法和Oracle 8i及其以下版本的conn interval性质是一样的,都是OS认证。

       如果你把SQLNET.ORA下的SQLNET.AUTHENTICATION_SERVICES的值从(NTS)改成NONE,你就会发现,OS认证登录方式无法起作用了。

       登录成功之后使用指令 show user来查看当前登录用户名。如果你是以SYSDBA方式登录并且什么密码都没有输,或者密码随便输入登入的,那么你就可以看到,其实你的用户名还是SYS。系统默认你以SYS用户登录:

结果显示:

SQL> show user

USER 为 "SYS"

       然后你可以通过show db_name查看当前数据库名:

 

NAME                                 TYPE        VALUE

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

db_name                              string      handle

最后一种登录方式为什么可以省略服务名,是因为在创建数据库的时候,建库脚本帮你设定了环境变量:oracle_sid。如果你以后装了多个库,想要在几个库之间切换登录,而又不愿意去配TNSNAME,那么就可以用这个环境变量进行切换: set ORACLE_SID=YOUR_SID。

Windows下命令行中查看当前ORACLE_SID环境变量echo %ORACLE_SID,Linux下用echo $ORACLE_SID。

OK,今天先写到这里,下一节讨论数据库的导入导出。

posted @ 2010-07-15 22:38  hutman  阅读(429)  评论(0编辑  收藏  举报