拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Navicat 17连接Oracle 11g实例:从监听配置到表空间创建全攻略

Navicat 17连接Oracle 11g实例:从监听配置到表空间创建全攻略

1. 动手之前:先说清楚Navicat 17和Oracle 11g这对组合的关系

很多朋友一看到“Navicat 17创建Oracle 11g数据库实例”这个标题,下意识以为打开Navicat点几下“新建数据库”就完事了,实际上这里有两个常见的误解得先纠正。

Navicat 17本身不是一个数据库服务器,它只是一个数据库客户端管理工具。你电脑上真正运行Oracle数据库的,要么是一台独立的服务器,要么是你本机装的Oracle 11g数据库软件。Navicat做的事情,是通过网络协议连到那台数据库服务器上,帮你执行SQL、管理表结构、导入导出数据。所以标题里的“创建一个数据库实例”,准确说应该分成两步理解:第一步是确认Oracle 11g那边有一个能连的实例(也就是一个能响应的数据库服务),第二步是在Navicat里新建一个连接指向这个实例,然后再通过这个连接去创建表空间、用户这些实际操作。

我在帮朋友处理Oracle 11g的时候,见过太多人卡在“明明Oracle装好了,Navicat却连不上”这一步,绝大多数问题不是Navicat不会用,而是对Oracle实例和监听服务的概念没理顺。Oracle 11g里,一个实例名通常对应一个数据库,你在服务器上装的Oracle数据库软件建好库之后,会有一个全局数据库名(比如orcl),还有对应的SID(系统标识符)和Service Name(服务名)。Navicat连接时填的“服务名”或者“SID”,必须和Oracle那边实际配置的对上,差一个字母都连不上。

这篇文章适合谁看呢?如果你刚装好Oracle 11g,想在Windows上用图形化工具快速管理数据库;或者你公司有一台现成的Oracle 11g服务器,你需要用Navicat从自己电脑连过去做日常开发维护;再或者你正在自学Oracle但被命令行吓住了,想先有个可视化工具建立信心——这篇内容就是给你准备的。我会把从环境检查、Navicat 17下载安装、新建连接、到创建表空间和用户、再到常见报错排查的完整链路走一遍,所有步骤都是我在各种Windows环境实测过的,不是纸上谈兵。

提示:Navicat 17有Premium、DBeaver等不同版本选择,本教程以Navicat 17 Premium为例,因为Premium支持多种数据库,构建连接时选择Oracle类型即可。连Oracle 11g建议用Navicat 17,它对旧版本Oracle的兼容性比一些轻量级工具好很多。

2. 连接Oracle 11g前必须确认的四件事

很多教程上来就让大家打开Navicat填IP和密码,结果一堆人连不上。我自己踩过的坑告诉你,连Oracle比连MySQL多了一道门槛——Oracle的客户端连接机制本身就复杂,所以咱们先花点时间把前置条件检查完,后面就顺了。

2.1 Oracle实例和监听服务是否真的在运行

Oracle数据库运行起来,依赖两个Windows服务,一个是OracleServiceXXXX(XXXX是你的实例名,比如OracleServiceORCL),另一个是OracleOraDb11g_home1TNSListener(监听服务)。前者负责数据库本体,后者负责对外“接电话”——客户端发来连接请求时,监听器负责转发给对应的数据库实例。

检查方法很简单:按Win键输入services.msc,打开服务管理器,找到这两个服务,确认状态是“正在运行”。如果服务没启动,右键启动即可。我遇到过一种情况:Oracle服务里明明写着“正在运行”,但Navicat还是连不上,后来发现是监听服务挂了,数据库服务再正常也没用,因为客户端根本找不到“入口”。所以两个服务都得看,缺一不可。

2.2 数据库实例名、SID、服务名到底是什么

Oracle 11g安装完成后,会弹出一个界面让你填全局数据库名(Global Database Name),最常用的就是orcl。这个全局数据库名由两部分组成:数据库名(比如orcl)和域名(比如localhost),如果没设域名,全局名就是orcl,SID也是orcl。

Oracle的连接识别方式有点绕:老式的连接方式认SID,新式的认Service Name。Navicat 17默认连接Oracle用的是“服务名”模式(Service Name),所以你得知道自己Oracle那边的Service Name。默认情况下,Service Name就是全局数据库名。如果你安装时填的是orcl,那Service Name就是orcl;如果有域名,比如orcl.example.com,那Service Name一般也是orcl.example.com。

怎么确认?最简单的方式是看服务器上的tnsnames.ora文件,一般路径是$ORACLE_HOME\network\admin\tnsnames.ora,打开看里面写的SERVICE_NAME = orcl,那个就是服务名;如果写的是SID = orcl,那就是SID。Navicat连接时,可以在“服务名”和“SID”两个标签里切换填写,我建议你两个都试一下,有时候Oracle版本不同、配置不同,填哪个能连上得实测。

2.3 账号密码和默认用户

Oracle装好之后,有两个常用账号:sys和system。sys是超级管理员,权限巨大,日常管理不建议直接用sys;system是系统管理员,建表空间、建用户基本够用了。密码是安装Oracle时你自己设置的那个密码。

这里有个细节:Oracle默认有一个scott用户,密码是tiger,这是一个经典示例账号。但Oracle 11g安装时scott默认是锁定的,需要你先用system登录后执行ALTER USER scott ACCOUNT UNLOCK;才能解锁。如果你是新手想练手,解锁scott是个不错的选择;如果做正经开发,建议自己创建新的用户和表空间。

2.4 Navicat 17安装完成了吗?版本对不对

Navicat 17安装没什么特殊的,一路按默认安装就行。注意一点:你的Navicat版本必须支持Oracle,也就是Premium版本或者专门的Navicat for Oracle。我见过有人用Navicat for MySQL去连Oracle,连接类型下拉框里压根没有Oracle选项,这就没法搞。Navicat 17安装完成后,打开主界面,左侧连接树区域会有空白的连接列表,右上角有一个“连接”按钮,点开会看到支持MySQL、PostgreSQL、SQL Server、Oracle等一堆类型。能看到Oracle选项,环境就OK了。

注意:如果你的Navicat是旧版本(比如Navicat 12以下),连Oracle 11g一般也没问题,但界面布局可能和我下面说的不太一样。本教程以Navicat 17 Premium为准,界面截图党可以直接按编号对照操作。

3. 保姆级实操:Navicat 17新建Oracle连接,从零到能跑通

3.1 第一步:打开新建连接面板,选择Oracle

启动Navicat 17后,主界面左上角或者连接列表区域会有一个“连接”按钮。在我的习惯里,我更喜欢在左侧连接区域的空白处右键,选择“新建连接”,然后在下拉菜单里选“Oracle”。

如果你用的是Navicat Premium,新建连接时会弹出多数据库支持列表,选Oracle就好。这一步没什么技术含量,唯一要注意的是别选错类型——我见过有人选了PostgreSQL然后填Oracle的信息,折腾半天才知道选错了。

3.2 第二步:填连接参数,每个字段的含义说明

进入Oracle新建连接窗口后,你会看到一堆输入框,和MySQL那种简单连接不同,Oracle的连接配置项更多。这里逐个说一下:

  • 连接名:这是你自己给这个连接起的名字,比如“oracle-测试库”,纯粹是为了识别,随便写。注意连接名不等于数据库名,别混淆。
  • 主机:Oracle服务器IP地址,如果是本机就填localhost或者127.0.0.1。
  • 端口:Oracle默认端口是1521,如果你安装时没改过就用1521。
  • 服务名和SID:上面说了,Oracle有两个模式,Navicat 17界面上有标签切换,默认好像是服务名模式。如果你服务器上的Service Name是orcl,就填orcl;如果连接失败,切换到SID标签,填SID的名称,比如orcl。
  • 用户名和密码:填system和你设置的密码,或者后续创建的业务账号。

这里我特别强调一下:主机那里千万别填错,有些公司Oracle装在服务器上,你从自己电脑连,主机填的是服务器的局域网IP,不是自己电脑的IP。如果你不确定,可以在服务器上执行ipconfig命令查看IP地址。

填完之后,先别急着点确定,先点一下“测试连接”按钮。如果一切顺利,会弹出“连接成功”的提示,这一步很关键,它会帮你确认参数是否对得上。

如果你看到如下错误信息,也别慌,下一章专门讲排错:

报错信息原因
ORA-12514: TNS: listener does not currently know of service requested服务名配错了,和tnsnames.ora里的不一致
ORA-12541: TNS: no listener监听服务没启动,或IP和端口写错了
ORA-01017: invalid username/password; logon denied用户名或密码错误,注意密码区分大小写
ORA-28000: the account is locked账号被锁定,需要先解锁

3.3 第三步:测试连接,确认成功后再保存

测试连接成功后,再点击“确定”保存。左侧连接列表就会出现你新建的数据库连接。双击这个连接,会建立会话并进入Oracle数据库管理界面。此时你看到的是表、视图、索引、存储过程、函数、包、序列这些对象列表,说明你这个连接已经真正通上了。

进入之后建议先做两件事:第一,展开“用户”目录看看有哪些账号;第二,展开“表空间”目录看看现有的表空间情况。这样你对自己要操作的库有个直观认识。

提示:Navicat 17的连接配置里有一个“高级”标签页,里面可以设置连接超时时间、保持连接等参数。如果你的网络环境慢,把超时时间调大一点,防止操作稍微久一点就被断开。

3.4 连接成功只是开始:用Navicat快速创建表空间和用户

连接上之后,你就可以通过图形化界面创建表空间和用户了。这是很多教程忽略的地方——大家以为连上库就算完事,但你要建业务表、导入数据,第一步通常是建表空间和用户。

在Navicat左侧连接下,找到“表空间”节点,右键选择“新建表空间”。Oracle 11g创建表空间需要指定数据文件路径,比如:

CREATE TABLESPACE TEST_DATA DATAFILE 'C:\app\Administrator\oradata\orcl\TEST_DATA.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;

如果你熟悉SQL,可以直接在Navicat的查询编辑器里执行这段代码;不熟悉SQL就直接用界面填。Navicat的表空间新建窗口里可以填表空间名称、文件路径、初始大小、自动扩展配置等,填完点保存,后台自动执行建表空间语句。

建完表空间,接着建用户。右键“用户”节点,选择“新建用户”,填写用户名、密码、默认表空间(选刚才建的TEST_DATA)、临时表空间(一般用TEMP),然后在“成员属于”标签页里给用户赋角色权限。Oracle常规操作时,一般给CONNECT和RESOURCE两个角色就够了,如果需要大范围管理权限,再给DBA角色。把“管理员选项”里的权限勾选好,保存即可。

这一套操作下来,你就有了一个能用的业务用户。从此刻起,建议你以后都用这个业务账号连接,别再用system做日常操作了——这不是Navicat的规矩,而是Oracle数据库使用的安全习惯,避免误删、误操作影响整个数据库实例。

4. 实测中的常见坑:连不上、连上就断、字符集乱码,我逐个说

4.1 监听器的坑:ORA-12541和ORA-12514的完整排查链路

这两个错误是Oracle新人碰到最多的,我在论坛上也看过无数求助帖。有一次我帮朋友排查,他的Oracle装在自己笔记本上,Navicat一直报ORA-12541。检查清单如下:

第一,确认监听服务是否在运行。服务管理器里找到OracleOraDb11g_home1TNSListener,看状态。如果没运行,右键启动。

第二,确认监听器配置是否正确。运行lsnrctl status命令(在命令行里输入,确保PATH里有Oracle的bin目录),如果返回“The command completed successfully”并列出监听的服务名,说明监听器本身没问题。如果返回“TNS-12541: TNS:no listener”,那多半是监听配置的问题。

第三,确认防火墙是否拦截了1521端口。Windows防火墙经常会拦截Oracle的网络端口,尤其是从别的机器远程连接时。在服务器上执行telnet 服务器IP 1521测试端口连通性。我们那次排查发现,朋友笔记本的杀毒软件把Oracle的监听进程拦了,放行之后立刻正常。

ORA-12514的情况则不同,它说明监听器是通的,但监听器不知道你要连接的那个服务。这个报错的原因绝大多数是连接工具里填的Service Name和Oracle实际服务名不一致。解决办法:打开tnsnames.ora文件看SERVICE_NAME的值,然后照抄到Navicat的服务名里。如果你填的是SID模式,要确认SID名称和实际的一致。

4.2 连接成功后一操作就掉线,是什么原因

还有一种情况:测试连接能成功,双击连接也能进,但执行稍微复杂的操作(比如打开表列表、查询大量数据)时,Navicat直接提示连接丢失。我遇到过一次,特别魔幻——后来发现是Navicat和Oracle之间设置了一个空的数据库选项,导致服务端和客户端版本对不上。

排掉不合理的猜测,最可能的原因有三个:

  1. 网络不稳定。如果你的Oracle在远程服务器上,中间隔着多层网络设备,连接保持时间短很正常。Navicat连接配置的高级标签页里有一个“保持连接”的选项(Keep Alive),把它勾上,再设置一个合理的间隔时间(比如30秒),能有效缓解。
  2. Oracle服务端处理慢,客户端等不及就断了。这是客户端超时设置问题,把连接超时从默认值调大。
  3. Oracle的process数达到了上限。Oracle 11g默认的process数大概是150,如果连接数满了,新连接会被拒绝,已有的连接也可能被挤掉。这时候需要用system登录,执行SHOW PARAMETER PROCESS查看,然后ALTER SYSTEM SET PROCESSES=300 SCOPE=SPFILE;,重启数据库生效。这个方法能根治“连接一会儿就断”且不是网络原因的情况。

4.3 连上了但中文乱码,字符集问题的一次完整解决过程

这是我踩过最深的一个坑。有一次我在Navicat里执行SELECT * FROM一张含有中文备注的表,结果全是乱码“???”。第一反应是数据本身存坏了,后来查了才发现是字符集不一致。

Oracle 11g安装时,默认字符集一般会选AL32UTF8(有些安装包默认是ZHS16GBK),而Navicat客户端连接时使用的字符集如果不匹配,就会导致中文显示乱码。解决方法是:

  • 在Navicat连接属性里找到“高级”标签页,里面有一个“编码”选项。如果服务器是AL32UTF8,这里就选UTF-8;如果是ZHS16GBK,就选GBK。
  • 或者更稳的做法:在Oracle服务器上执行SELECT USERENV('LANGUAGE') FROM DUAL;查看会话语言,然后调整客户端环境变量,比如Windows上设置NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8,再重启Navicat。

那次我同时调整了Navicat连接编码和系统的NLS_LANG环境变量后,中文乱码立刻消失,再也没复发过。这个经验值得记下来,因为乱码问题不像连接错误那么“硬”,有时能正常出来部分中文,有时全乱,非常迷惑人。

5. 连接成功之后,Navicat 17里日常用得最多的三类操作

连接建好,表空间和用户也创建了,接下来就是日常开发维护了。我把Navicat 17管理Oracle时最常用到的功能拆成三块,覆盖率能覆盖90%以上的日常工作。

5.1 用查询编辑器写SQL,不用命令行

Navicat里最常用的就是查询编辑器。双击连接进入主界面后,点击顶部的“查询”按钮,新建查询,在打开的编辑器里写SQL,然后按Ctrl+R执行。

比如你想快速验证某张表的数据量,不用写复杂的PL/SQL,直接:

SELECT COUNT(*) FROM 你的表名;

和命令行里敲SQL相比,Navicat查询编辑器有语法高亮、代码提示、自动补全表名和字段名,还能多标签页并行开几个查询窗口。对于SQL写了一半手滑执行了DELETE这种惨剧,Navicat的帮助提示和结果预览能在一定程度上减少误操作,但还是建议重要操作前备份。

5.2 可视化查看表结构和数据,比命令查字典高效

想查看一张表有哪些字段、字段类型、主键、索引,双击左侧的表名就能打开表设计器,结构一目了然。查看数据直接右键表名选择“打开表”,Navicat会显示前100行数据,你可以直接在结果里编辑、筛选、排序,不用写任何SQL。这对不熟悉Oracle数据字典(比如USER_TAB_COLUMNS这些视图)的朋友来说,简直是救星。

我自己有个习惯:拿到一个陌生的库,先看它的表数量、最大表是什么、有没有索引很奇怪的地方,通过Navicat的可视化界面几分钟就能摸清底细。换成命令行一行行查,估计得小半天。

5.3 导入导出数据:Excel表格灌进Oracle,用Navicat最省事

Navicat 17在数据导入导出方面做得相当成熟。你最常遇到的场景是把Excel里的数据导入到Oracle表里,或者把Oracle表导出成Excel发给别人。

导入的完整操作流程是:右键目标表选择“导入向导”,选择Excel格式,指定Excel文件路径,然后Navicat会显示“源字段”和“目标字段”的映射关系,确认无误后点开始。这里有一个细节:Excel里的日期格式和Oracle的DATE类型可能对不上,导入前最好先检查Excel中的日期列格式,否则容易导入出错。

导出更简单,右键表选“导出向导”,输出格式选Excel,按提示一路下一步就行。Navicat 17还支持导出成SQL文件、CSV等格式,应对不同需求很灵活。

注意:导入大文件(几万行以上)时,Navicat如果按默认的“逐条插入”方式运行会很慢,建议在导入向导的“高级”选项里启用“批量插入”,一次插入几百条甚至几千条,速度能提升一个数量级。这是我自己在导20万行数据时测试出来的经验,不设置的话可能要等十几分钟,设置了基本几十秒搞定。

6. 进阶技巧:优化Navicat连接Oracle的使用体验

6.1 多个环境多套连接,用颜色和分组管理

如果你手里有开发库、测试库、生产库好几个环境,连接列表多了之后容易混。Navicat 17支持连接分组,你可以在连接列表里右键选择“新建分组”,比如叫“开发环境”“测试环境”“生产环境”,然后把对应连接拖到对应分组里。还有一个细节,Navicat允许给每个连接设置颜色,把生产库设为红色,开发库设为绿色,能有效避免误连生产库。这个习惯强烈建议养成——我见过不止一次有人一恍惚把生产库当成测试库执行了危险操作。

6.2 使用SSH通道连接远程Oracle

有一种情况比较特殊:Oracle服务器没有直接暴露1521端口给外部,只允许通过SSH登录后再访问。这时候Navicat连接配置里的“SSH”标签页就派上用场了——填写服务器的SSH地址、端口、用户名和密码,然后在“常规”标签页里主机填localhost或者内网IP,就可以先经过SSH加密通道再连Oracle。这种方式既安全又绕过了防火墙对1521端口的限制,在远程办公场景很实用。

配置步骤注意:勾选“使用SSH隧道”后,主机的IP要改成Oracle服务器的内网地址(或本机localhost,如果你SSH登录的就是Oracle所在机器),端口保持1521不变。测试连接时Navicat会先验证SSH登录是否通过,再验证Oracle连接,两个都要正确才行。

6.3 定期保存查询记录和模型,别白干活

Navicat里写过的SQL,它默认会保存在历史记录里,方便你之后翻找。但更靠谱的做法是:把常用的、复杂的SQL保存成查询文件,放在Navicat左侧的“查询”目录下。这样换一台电脑或者重新安装客户端,也能从备份文件中恢复这些常用脚本。

另外,Navicat支持ER图表(实体关系图)。当你面对的是一个几百张表的老库,想理清表之间的关系,可以用“模型”功能打开一个数据库的ER图。Oracle的数据字典复杂,靠人脑硬记表关系太痛苦,生成ER图之后从宏观上把握库的架构,效率会高很多。

7. 总结一下我自己用Navicat 17连Oracle 11g的几点体会

说句实在话,Navicat 17连接Oracle 11g这件事本身不复杂,但“不复杂”不等于“没坑”。我见过太多人被ORA-12514折磨一下午,最后发现只是Service Name少写了一个字母;也见过有人连接成功后就以为万事大吉,结果建表空间时发现数据文件目录不存在,报错后不知所措。这些坑我在前面每一章都按实际经历拆开了,照着走基本能避开。

最后再分享一个小技巧:如果你愿意在Navicat里多用“测试连接”那个按钮,很多参数问题都能提前暴露,不用等保存完连接、双击进入时才报错。我在配任何一个新环境时,都会先测试连接,测试通过再保存。这个习惯帮我省下了大量无意义的时间。

这个教程的下一步扩展方向:当你把连接和基础对象都打通之后,会开始接触Oracle的复杂体系——分区表、存储过程调试、性能监控、数据同步等。Navicat 17在这些方面也都有对应的功能模块,以后有机会我再逐个展开写。你先按本文把连接跑通,把日常操作熟练起来,后面进阶自然水到渠成。

返回列表