请问:DELPHI7如何连接ORACLE11G?
能不能不依靠第三方工具?
如:OracleSQLHandler或Oracle10[1].2_Client_Lite
如果可以,请告诉小弟,谢谢。

解决方案 »

  1.   

    连接oracle你必须知道oracle服务器的ip地址、数据库的ID、端口,然后自己在本地建立tns解析。 
    这些都是oracle的配置,跟连接都没关系,但要建立连接又必须有这些前提。 在建立连接的时候,必须知道tns名称,和数据库用户名和密码,就可以建立连接了。其中的3个参数就相当于sql   server的服务器地址,用户名名和密码一样...
      

  2.   

    使用ODAC1)服务器端配置Listener:   
    添加Listeners   ,   设置选择   DataBase   Name方式,填写2个参数   {   HomeDir   =   /ora/   ,   SID   =ora8   }   
    2)启动Net8服务lsnrctl   start   
    3)停止Net8服务lsnrctl   stop   
    4)参数文件摘要   
    5)客户端配置:添加   Net   Service   Name   ,同Windows客户端一样格式   
    1)服务器端配置Listener:   
    执行/ora/bin/netasst 
    填写描述-> 首选Oracle服务: 
    。PROTOCOL   =   TCP 
    。HOST   =   172.17.2.22 
    。PORT   =   1521 
    查看生成的   Net8   Server配置文件:listener.ora 
    [oracle@lin   admin]$   more   listener.ora   
    #   LISTENER.ORA   Configuration   File:/ora/network/admin/listener.ora   
    #   Generated   by   Oracle   Net8   Assistant   LISTENER   =   
    (DESCRIPTION   =   
        (ADDRESS   =   (PROTOCOL   =   TCP)(HOST   =   172.17.2.22)(PORT   =   1521))   
        (PROTOCOL_STACK   =   
            (PRESENTATION   =   TTC)   
            (SESSION   =   NS)   
        )   
      )   SID_LIST_LISTENER   =   
      (SID_LIST   =   
        (SID_DESC   =     
          (ORACLE_HOME   =   /ora)   
          (SID_NAME   =   ora8)   
        )   
    )   
    ###   如果指明监听服务的 "全局名 ",则有类似这一行:(GLOBAL_DBNAME   =   ora8)   
    2)启动Net8服务lsnrctl   start   
    首先你可以这样取得帮助:   
    [oracle@lin   /ora]$   lsnrctl   
    LSNRCTL>   help   
    然后开始启动:start   
    [oracle@lin   bin]$   lsnrctl   start   
    联接时,机器会逐步告诉你正在启动…,正在联接…,已经联接的状态,最后他说成功啦!   下面是一些简要信息:   
    LSNRCTL   for   Linux:   Version   8.1.5.0.0   -   Production   on   19-NOV-99   22:02:54   
    (c)   Copyright   1998   Oracle   Corporation.   All   rights   reserved.   
    Starting   /ora/bin/tnslsnr:   please   wait...   TNSLSNR   for   Linux:   Version   8.1.5.0.0   -   Production   
    System   parameter   file   is   /ora/network/admin/listener.ora   
    Log   messages   written   to   /ora/network/log/listener.log   
    Listening   on:   (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.17.2.22)(PORT=1521))   
    (PROTOCOL_STACK=(PRESENTATION=TTC)(SESSION=NS)))   Connecting   to   (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.17.2.22)(PORT=1521))   
    (PROTOCOL_STACK=(PRESENTATION=TTC)(SESSION=NS)))   
    STATUS   of   the   LISTENER   
    ------------------------   
    Alias   LISTENER   
    Version   TNSLSNR   for   Linux:   Version   8.1.5.0.0   -   Production   
    Start   Date   19-NOV-99   22:02:54   
    Uptime   0   days   0   hr.   0   min.   0   sec   
    Trace   Level   off   
    Security   OFF   
    SNMP   OFF   
    Listener   Parameter   File   /ora/network/admin/listener.ora   
    Listener   Log   File   /ora/network/log/listener.log   
    Services   Summary...   
    ora8   has   1   service   handler(s)   
    The   command   completed   successfully   
    以上提示说,1个服务被处理,命令成功完成。 
    3)停止Net8服务lsnrctl   stop   
    最简单的方法是   [oracle@lin   /ora]$   lsnrctl   stop   
    有时侯,进程出了差错,tnslsnr没有响应,像WindowsNT常犯的毛病一   样, 
    这里有一个强硬的手段:先找出它的进程号,然后   kill掉!   
    [oracle@lin   /ora]$   ps   -ef|grep   tns 
    oracle   1331   1   0   15:51   ?   00:00:00   /ora/bin/tnslsnr   LISTENER   -inher   或使用更少的参数也能找到tnslsnr:   
    [oracle@lin   /ora]$   ps   -e   
    PID   TTY   TIME   CMD 
    1331   ?   00:00:00   tnslsnr   现在杀死PID   =   1331的进程:   
    [oracle@lin   /ora]$   kill   1331   
    LSNRCTL象   SVRMGRL一样,是一个服务器管理程序,有不少参数,或者说是   子程序,带星号的是一个外部程序。   [oracle@lin   bin]$   lsnrctl   stop   
    LSNRCTL   for   Linux:   Version   8.1.5.0.0   -   Production   on   19-NOV-99   22:02:50   
    (c)   Copyright   1998   Oracle   Corporation.   All   rights   reserved.   Connecting   to   (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.17.2.22)(PORT=1521))   
    (PROTOCOL_STACK=(PRESENTATION=TTC)(SESSION=NS)))   
    The   command   completed   successfully   
    Listeners   =DataBase   Name   =   Global   DB   Name   =ora8,   HomeDir   =   /ora/   ,SID   =ora8   [oracle@lin   oracle]$   cd   /ora/net*/ad*   
    [oracle@lin   admin]$   ls   
    listener.ora   namesini.sql   samples   sqlnet.ora   
    namesdrp.sql   namesupg.sql   sqlnet.fdf   tnsnames.ora   下面是在   Windwos   NT/98   上远程控制   TNSLSNR   的情形(图略)。 
    4)参数文件摘要   
    [oracle@lin   admin]$   more   /u01/app/oracle/admin/ora8/pfile/initora8.ora   
    db_name   =   ora8   
    instance_name   =   ora8   ##   "事例名 "是关键字   
    service_names   =   ora8   control_files   =   ( "/u01/app/oracle/oradata/ora8/control01.ctl ",   "/u01/app/oracle/oradata/ora8/control02.ctl ")   
    db_block_buffers   =   8192   
    shared_pool_size   =   4194304   
    log_checkpoint_interval   =   10000   
    log_checkpoint_timeout   =   1800   
    processes   =   50   
    log_buffer   =   163840   log_archive_start   =   true   
    log_archive_dest_1   =   "location=/u01/app/oracle/admin/ora8/arch "   
    log_archive_format   =   %t_%s.dbf   
    #   切记打开回滚段   
    rollback_segments   =   (r01,   r02,   r03,   r04)   #   global_names   =   false   ###   监听服务无需指明 "全局名 "   
    #   oracle_trace_enable   =   true   
    #   define   directories   to   store   trace   and   alert   files   
    background_dump_dest   =   /u01/app/oracle/admin/ora8/bdump   
    core_dump_dest   =   /u01/app/oracle/admin/ora8/cdump   
    user_dump_dest   =   /u01/app/oracle/admin/ora8/udump   
    db_block_size   =   2048   
    remote_login_passwordfile   =   exclusive   
    os_authent_prefix   =   " "   
    compatible   =   "8.1.5 "   ##   也可以兼容   "8.0.5 "   
    5)客户端网络配置   
    [oracle@lin   admin]$   more   tnsnames.ora   
    #   TNSNAMES.ORA   Configuration   File:/ora/network/admin/tnsnames.ora   
    #   Generated   by   Oracle   Net8   Assistant   使用net8助理,结果自动保存在   tnsnames.ora   中, 
    [oracle@lin   /ora]$   netass*   添加Service:   名称ora8,参数如下: PROTOCOL=TCP   HOST=172.17.2.22   PORT=1521   Oracle_SID=ora8   
    机器解释成一个Oracle服务器地址包: 
    (   DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.17.2.22)(PORT=1521))   
        (PROTOCOL_STACK=(PRESENTATION=TTC)(SESSION=NS)) 

    一般说来,客户端采用Windows9x/NT/2000,因为这里软件开发容易,程序员和工具较为普及。 
    Windows   客户端网络配置与此类似,其内容见于:   \OraNT\net80\Admin\tnsname.ora   
    ORA8.WORLD   = 
        (DESCRIPTION   = 
            (ADDRESS   =   (PROTOCOL   =   TCP)(HOST   =   172.17.2.22)(PORT   =   1521)) 
            (CONNECT_DATA   =   (SID   =   ora8)) 
        ) 
      

  3.   

    Oracle   Data   Access   Components http://crlab.com/odac/ 可以不用oracle的客户端TNS,直接采用net方式,即通过IP地址:断口:sid的方式连接oracle数据库。是目前为止delphi开发oracle数据库的比较理想的控件。
      

  4.   

    好像有oracle的控件,很方便的。