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服务一个是OracleServiceXXXXXXXX是你的实例名比如OracleServiceORCL另一个是OracleOraDb11g_home1TNSListener监听服务。前者负责数据库本体后者负责对外“接电话”——客户端发来连接请求时监听器负责转发给对应的数据库实例。检查方法很简单按Win键输入services.msc打开服务管理器找到这两个服务确认状态是“正在运行”。如果服务没启动右键启动即可。我遇到过一种情况Oracle服务里明明写着“正在运行”但Navicat还是连不上后来发现是监听服务挂了数据库服务再正常也没用因为客户端根本找不到“入口”。所以两个服务都得看缺一不可。2.2 数据库实例名、SID、服务名到底是什么Oracle 11g安装完成后会弹出一个界面让你填全局数据库名Global Database Name最常用的就是orcl。这个全局数据库名由两部分组成数据库名比如orcl和域名比如localhost如果没设域名全局名就是orclSID也是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是超级管理员权限巨大日常管理不建议直接用syssystem是系统管理员建表空间、建用户基本够用了。密码是安装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之间设置了一个空的数据库选项导致服务端和客户端版本对不上。排掉不合理的猜测最可能的原因有三个网络不稳定。如果你的Oracle在远程服务器上中间隔着多层网络设备连接保持时间短很正常。Navicat连接配置的高级标签页里有一个“保持连接”的选项Keep Alive把它勾上再设置一个合理的间隔时间比如30秒能有效缓解。Oracle服务端处理慢客户端等不及就断了。这是客户端超时设置问题把连接超时从默认值调大。Oracle的process数达到了上限。Oracle 11g默认的process数大概是150如果连接数满了新连接会被拒绝已有的连接也可能被挤掉。这时候需要用system登录执行SHOW PARAMETER PROCESS查看然后ALTER SYSTEM SET PROCESSES300 SCOPESPFILE;重启数据库生效。这个方法能根治“连接一会儿就断”且不是网络原因的情况。4.3 连上了但中文乱码字符集问题的一次完整解决过程这是我踩过最深的一个坑。有一次我在Navicat里执行SELECT * FROM一张含有中文备注的表结果全是乱码“”。第一反应是数据本身存坏了后来查了才发现是字符集不一致。Oracle 11g安装时默认字符集一般会选AL32UTF8有些安装包默认是ZHS16GBK而Navicat客户端连接时使用的字符集如果不匹配就会导致中文显示乱码。解决方法是在Navicat连接属性里找到“高级”标签页里面有一个“编码”选项。如果服务器是AL32UTF8这里就选UTF-8如果是ZHS16GBK就选GBK。或者更稳的做法在Oracle服务器上执行SELECT USERENV(LANGUAGE) FROM DUAL;查看会话语言然后调整客户端环境变量比如Windows上设置NLS_LANGSIMPLIFIED CHINESE_CHINA.AL32UTF8再重启Navicat。那次我同时调整了Navicat连接编码和系统的NLS_LANG环境变量后中文乱码立刻消失再也没复发过。这个经验值得记下来因为乱码问题不像连接错误那么“硬”有时能正常出来部分中文有时全乱非常迷惑人。5. 连接成功之后Navicat 17里日常用得最多的三类操作连接建好表空间和用户也创建了接下来就是日常开发维护了。我把Navicat 17管理Oracle时最常用到的功能拆成三块覆盖率能覆盖90%以上的日常工作。5.1 用查询编辑器写SQL不用命令行Navicat里最常用的就是查询编辑器。双击连接进入主界面后点击顶部的“查询”按钮新建查询在打开的编辑器里写SQL然后按CtrlR执行。比如你想快速验证某张表的数据量不用写复杂的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在这些方面也都有对应的功能模块以后有机会我再逐个展开写。你先按本文把连接跑通把日常操作熟练起来后面进阶自然水到渠成。
返回列表