简介:面向Teamcenter初学者与PLM实施人员的2007版安装文档,聚焦早期版本部署中最易卡壳的Oracle 10g数据库准备环节,帮助读者理解Teamcenter的基础架构与组件依赖关系,适合用于搭建实验环境、复现旧版安装流程或排查数据库层配置问题。压缩包仅含1个doc文件,约3MB,以文字步骤和图解式说明组织内容,体积轻便,便于离线查阅与打印对照。该文档已有217人学习,说明其对旧版本部署仍具参考价值。内容围绕Oracle高级安装、企业版选择、仅安装数据库软件、监听程序创建与启动、Teamcenter数据库模板准备,以及通过DBCA创建tceng数据库等关键环节展开,并提示后续服务器、客户端与权限配置的部署顺序。读者可据此梳理安装前的依赖检查清单,理解监听、模板与实例之间的关系,减少因环境准备不足导致的返工。
1. 从一台离线的旧工作站说起:为什么还要把 Teamcenter 2007 装一遍
前段时间有人搬来一台不联网的工作站,要求在上面复现一条停产产品线的结构树,能用的资产只有一份 Teamcenter 2007 安装介质和一套干净的操作系统。这事儿的难点从来不在 Teamcenter 本身,而在它脚下那层 Oracle 10g:顺序错了、监听没起、模板没拷、库名和口令对不上,安装程序往往要跑到最后一步才告诉你连不上库。我把这套「数据库先行」的流程从头走了一遍,包括 Oracle 10g 企业版的安装取舍、LISTENER 的创建与验证、把db_scripts\oracle里的模板塞进 DBCA、最后用tceng这个全局库名把库建出来。它适合手里有介质、需要搭一套能跑通的验证环境的同行;如果你的目标是生产部署,这份笔记只能当参照,不能当方案。
2. 先装库再装 TC:Oracle 10g 的版本、路径与账户边界
Teamcenter 2007 时代绑定的数据库版本是 Oracle 10g,安装介质多为 10.2.0.x 的 Windows 版本。这一步最常见的误区是把「装数据库软件」和「建数据库实例」当成一件事,结果在 Oracle 安装器里选了默认的「创建数据库」,装出一个带有示例库的实例,后面再用 DBCA 建tceng时端口、服务名、内存全打架。正确姿势是先只把二进制铺上去,实例留给 Teamcenter 的模板去建。
2.1 为什么安装类型选「企业版」,配置却只勾「仅安装数据库软件」
安装类型这一屏有企业版、标准版、个人版三个选项。选企业版不是因为这台机器真要用到分区表或者并行查询,而是 Teamcenter 2007 的建库模板在参数上按企业版的能力写的,选标准版会在建库阶段因为某些初始化参数不被识别而中断。磁盘占用多几百兆,换一个不会中途报错的建库过程,这个交换是划算的。
真正决定成败的是后面那屏「配置选项」。这里有三个选项:创建数据库、配置仅安装软件、仅安装数据库软件。要选的是第三个。它的含义是:只把%ORACLE_HOME%下的可执行文件、网络组件、DBCA 工具铺好,不创建任何实例,也不注册OracleServiceXXX服务。
这么做的理由很实在。第一,Teamcenter 的库不是标准库,它需要一套特定的表空间布局和数据文件尺寸,这套东西写在模板里,只有 DBCA 加载模板后建出来的库才对得上。第二,如果先建了一个默认实例,后面 DBCA 建新库时要么改端口,要么停旧服务,多出来的每一步都是一次翻车机会。第三,只装软件的耗时大约十几分钟,建库另外算,两段分开之后,出问题能立刻定位在哪一段。
有一点需要提前准备:安装前把机器名确认一遍。主机名不要带下划线、不要带中文、不要超过 15 个字符,因为 Oracle 的实例名和服务名会拿主机名做拼接,超长或者带特殊字符会在注册服务时静默失败,表现是安装完成但服务列表里少东西。这一步装完再改就得重装,属于典型的后悔药没处买。
2.2 目录、主机名和系统账户:三个装完才发现改不了的参数
安装目录建议单独一个盘,路径形如D:\oracle\product\10.2.0\db_1。三个硬约束:不能有空格、不能有中文、不要放在Program Files下面。Oracle 10g 的某些脚本在拼接路径时不做引号转义,路径里有空格会在建库阶段报找不到文件,而报错信息指向的是一个看起来完全正常的路径,非常迷惑。
主机名和 IP 的映射要提前写进 hosts。Oracle 的监听注册走的是主机名解析,如果 hosts 里没有对应条目,监听器会把地址注册成一个解析不出来的名字,本机sqlplus / as sysdba能连,远程客户端连不上,这个现象后面第 5 章还会细说。常见做法是在C:\Windows\System32\drivers\etc\hosts里加一行:
:: 主机名必须与「我的电脑-属性」里的计算机名完全一致(大小写不敏感) 192.168.10.21 tcserver01执行安装的账户要在 Administrators 组里,并且安装程序会自动创建ORA_DBA组,把当前账户加进去。这一组的用途是操作系统认证——加进去之后sqlplus / as sysdba不需要口令,排错时会省很多事。如果是用域账户装,注意 UAC 会拦安装器,右键「以管理员身份运行」是必须的,否则装到一半权限不足,回滚还回不干净。
2.3 高级安装的实操路径与装完后的第一轮体检
进入安装界面后不要点「基本安装」,走「高级安装」,这样才有安装类型和配置选项的选择权。完整路径如下:
:: 1. 解压介质到不含空格与中文的目录,例如 D:\stage\db10g :: 2. 右键 setup.exe -> 属性 -> 兼容性 -> 以兼容模式运行(较新的 Windows 上必须) :: 3. 右键 setup.exe -> 以管理员身份运行 :: 4. 安装程序内:高级安装 -> 企业版 :: 5. 主目录位置:D:\oracle\product\10.2.0\db_1 :: 6. 配置选项:仅安装数据库软件 :: 7. 先决条件检查:忽略与操作系统版本相关的告警,其余逐条处理 :: 8. 摘要 -> 安装 -> 退出第 2 步的兼容模式是老版本安装器的通病。在比它新的 Windows 上直接双击,表现是进程起来了但界面不出现,任务管理器里能看到setup.exe挂着,等十分钟也没反应。设成兼容模式之后一般能正常拉起。如果仍然不行,可以改install\oraparam.ini里的认证版本段,把当前系统版本加进去,但这属于绕检查,只在实验室环境这么干。
装完之后先做一轮体检,确认「只装了软件」这个前提成立:
:: 服务里应该找不到实例服务,返回 1060 才是对的 sc query OracleServiceTCENG :: 监听服务应该已经存在(随软件一起装的) sc query OracleOraDb10g_home1TNSListener :: 确认 sqlplus 可用 "%ORACLE_HOME%\bin\sqlplus" -V第一条返回「指定的服务未安装」(错误 1060),说明实例确实没建,符合预期;如果这里已经有了OracleServiceTCENG,那多半是前面选错了配置选项。第二条存在监听服务是正常的,监听是软件层组件,跟实例无关,实例建好之后它会自动把服务注册进来。
接着把环境变量配上,别依赖安装器自己写的用户变量:
:: 需要管理员权限执行,/M 表示写系统变量 setx ORACLE_HOME "D:\oracle\product\10.2.0\db_1" /M setx ORACLE_SID "tceng" /M setx PATH "%ORACLE_HOME%\bin;%PATH%" /MORACLE_SID这里先按最终要建的库名写成tceng。有人习惯等建库成功后再设,实际上 DBCA 建库时会读这个变量作为默认实例名,先设好能少填几次。NLS_LANG先别急着设,等库建完查到实际字符集再回头配,否则客户端和库的字符集对不上,中文数据进库就变问号,这种事在 PLM 场景里是灾难。
3. 监听器不是建完就完:LISTENER 的四个参数与三条验证
监听器是数据库对外的一层壳,Teamcenter 的服务器组件、客户端、以及后续的 CAD 集成,全都要通过它连库。这一步看着简单——建个监听、起个服务——但参数填错一个,后面所有环节都会以一种不直观的方式失败。
3.1 Net Manager 里真正要动的只有三处
从开始菜单进入Oracle - OraDb10g_home1→配置和移植工具→Net Manager,展开「监听程序」,点「创建」,名称填LISTENER。这个名称不是随便起的,它是 Oracle 的默认监听名,服务名和注册表键都按这个名字对应,改成别的会连带影响lsnrctl的默认行为,除非你有明确的理由,否则保持默认。
建完之后有三个参数要确认:
| 参数 | 建议值 | 说明 |
|---|---|---|
| 协议 | TCP/IP | 不要选 IPC 或命名管道,Teamcenter 的 JDBC 连接只走 TCP |
| 主机 | 主机名或 IP | 填主机名时 hosts 里必须有解析;填 IP 则换个网段就失效 |
| 端口 | 1521 | Oracle 默认端口,改了之后客户端连接串必须同步改 |
主机这一项是分支点。填主机名(如tcserver01)的好处是 IP 变了不用改配置,前提是 hosts 里做过映射;填 IP 则相反,配置是死的,机器一换网段就得回来改。我在实验室环境一般填主机名,因为这类环境经常挪机器。
端口用 1521,虽然理论上可以改,但 Teamcenter 的安装向导里有一屏会带出默认连接串,改端口意味着后面每一处手填的地方都要记得改,漏一处就报 ORA-12541(无监听程序)。这类错误信息不会告诉你端口错了,只会说连不上。
3.2 listener.ora 与 tnsnames.ora:手写一遍比点十遍清楚
Net Manager 保存之后,实际写进两个文件。知道它们长什么样,排错的时候才不用靠猜。监听配置在%ORACLE_HOME%\network\admin\listener.ora:
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = tcserver01)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = D:\oracle\product\10.2.0\db_1) (PROGRAM = extproc) ) )SID_LIST_LISTENER这一段是给静态注册用的,早期版本里常见。10g 支持动态注册——实例启动后通过local_listener参数往监听器上报自己的服务名,所以建库完成之后lsnrctl status里会自动多出tceng的服务条目,不需要手工往SID_LIST里加。手工加反而容易加错,因为静态注册的条目优先级高于动态注册,写错了会覆盖掉真实的服务信息。
客户端侧的名字解析在tnsnames.ora,同目录下:
TCENG = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = tcserver01)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = tceng) ) )这里的TCENG是连接别名,SERVICE_NAME才是库里注册的服务名。两个名字可以不同,但为了少一层心智负担,我一般让别名、SID、服务名三者一致,都是tceng。SERVER = DEDICATED表示专用服务器模式,Teamcenter 这种长连接场景必须用专用模式,共享服务器模式在并发上来之后会出现会话漂移。
3.3 lsnrctl 与 tnsping:怎么判断「起来」和「可用」是两件事
监听的启动和状态查询都在命令行:
:: 启动监听(需要管理员权限开命令行) lsnrctl start :: 查看状态,重点看「服务摘要」里是否有 tceng lsnrctl status :: 改完 listener.ora 后重新加载,不用重启服务 lsnrctl reloadlsnrctl start返回「命令执行成功」只能说明监听进程起来了,不代表库能被找到。真正的判断依据是lsnrctl status输出末尾的「服务摘要」段落:如果里面出现了tceng且状态是 READY,说明实例已经向监听注册了;如果这一段是空的或者只有PLSExtProc,那就是实例没起或者注册失败。
第二层验证是名字解析:
:: 测试客户端能否把别名解析成连接描述 tnsping tcengtnsping走的是tnsnames.ora的解析路径,不真正建立数据库连接。它返回 OK 说明网络层和名字解析没问题,但不代表账号口令对、库是打开的。这一步失败通常是tnsnames.ora里没写这个别名,或者TNS_ADMIN指向了别的目录。
第三层才是真连接:
:: 本地操作系统认证,不经过监听 sqlplus / as sysdba :: 走监听和名字解析,验证完整链路 sqlplus system/tceng@tceng第一条能进、第二条进不去,问题就在监听或名字解析这一段;两条都进不去,问题在实例本身。把这三层拆开验证,比对着一个「连接失败」的报错瞎猜要快得多。
4. 把模板喂给 DBCA:从 db_scripts\oracle 到 tceng 库
前面两章都是在给这一章铺路。Teamcenter 的数据库不是靠 DBCA 的通用模板建出来的——那样建出来的库没有 PLM 需要的表空间划分、没有对应的初始化参数、也没有合适的块尺寸。它需要把安装介质里自带的一套模板先放进 DBCA 的模板目录,让 DBCA 在「创建数据库」时能把这个模板列出来。
4.1 db_scripts\oracle 里的文件是什么,为什么必须落到 templates
介质里的模板位置是Tc2007.1_wnti\tc\db_scripts\oracle。这个目录下的文件本质上是 DBCA 的库模板:一套描述初始化参数、数据文件尺寸、表空间布局和字符集的种子文件,DBCA 在建库时按它来分配文件、写参数文件、执行建库脚本。少了这套东西,DBCA 只能按通用模板建一个「标准库」,Teamcenter 装上去之后会在初始化阶段因为找不到预期表空间而失败。
目标目录是%ORACLE_HOME%\assistants\dbca\templates。这个路径是 DBCA 扫描模板的固定位置,不能改。拷贝动作本身很简单:
:: 源目录按实际介质路径调整,注意 wnti 是 Windows 平台的代号 xcopy "D:\stage\Tc2007.1_wnti\tc\db_scripts\oracle\*.*" ^ "D:\oracle\product\10.2.0\db_1\assistants\dbca\templates\" /Y :: 确认文件落地 dir "D:\oracle\product\10.2.0\db_1\assistants\dbca\templates\" /O-D这里有个细节:拷贝要发生在启动 DBCA 之前。DBCA 是在启动时扫描一次模板目录并缓存列表的,如果先开了 DBCA 再拷文件,界面上不会出现新模板,得关掉重开。这个坑很浅但很常见,很多人以为拷错了位置,来回折腾目录。
另一个细节是权限。assistants目录在安装时是归 Oracle 安装账户所有的,如果当前登录账户和安装账户不是同一个,拷贝会提示拒绝访问。要么切回安装账户,要么用管理员权限的robocopy带/COPYALL参数,别用资源管理器拖拽——拖拽失败时它只弹一个笼统的错误框,不告诉你卡在哪。
4.2 DBCA 的前四屏决定后面八成问题
启动入口:开始菜单 →Oracle - OraDb10g_home1→配置和移植工具→Database Configuration Assistant。图形界面加载比较慢,等它出来,别连点。
第 1 屏选「创建数据库」。别选「配置数据库选件」或者「删除数据库」,那两件事跟这里无关。
第 2 屏是数据库模板列表。正常情况下能看到四类:一般用途、事务处理、数据仓库、自定义。拷贝正确的话,列表里会多出一个 Teamcenter 相关的模板条目,选它。这里如果看不到,直接跳到第 5 章的坑 3,不要将就着选「一般用途」——用通用模板建出来的库,后续 Teamcenter 初始化一定失败,而且失败信息指向的是表空间不存在,跟模板没关系,排查方向会被带偏。
第 3 屏填全局数据库名,填tceng。SID 会自动跟着变成tceng(大小写由系统决定,Windows 上不敏感)。这一屏的全局数据库名是库的唯一标识,写进v$database的NAME字段,装完之后改这个名要重建控制文件,成本很高,填之前多看两眼。
第 4 屏是口令管理。选「所有账户使用同一口令」,填tceng,确认一遍。这一步是为了省事:SYS、SYSTEM、SYSMAN、DBSNMP 全用同一个口令,后续 Teamcenter 安装向导里配连接时不用来回翻记录。生产环境当然不能这么干,但实验室的一次性验证环境,统一口令能省掉至少两次「口令不对」的无效排查。
提示:口令里不要带
@、$、#这类字符。它们在连接串里是分隔符,在批处理里是特殊变量,混在一起会出现「明明口令对但就是连不上」的玄学问题。
后面几屏基本是默认值:数据文件位置、闪回恢复区、内存分配、字符集、初始化参数。这中间只有字符集需要看一眼——模板里如果已经预设了字符集,界面上的选项会是灰的,别想办法去改它。Teamcenter 2007 的模板通常按 GBK 或者 UTF8 定死,跟当时的中文环境有关,强行改字符集建库,后面导入数据会大面积乱码,而且这种乱码在库层面看不出问题,要等到客户端显示才是乱码。
内存那一屏按机器实际内存给。10g 的自动内存管理在这一版还不成熟,建议手工指定 SGA 大小,给到物理内存的 40% 左右,剩下的留给系统和 Teamcenter 的 Java 进程。给太多会导致操作系统层面的换页,库响应变慢,表现是「什么都对但就是卡」,非常难查。
最后一屏点「完成」,DBCA 会先弹一个摘要,确认之后开始建库。建库过程会执行克隆、创建数据文件、编译组件,视机器性能大约 15 到 40 分钟。
4.3 建库完成后先查字符集、表空间和服务名
建库完成之后别急着装 Teamcenter,先把库本身的几个属性确认一遍。用操作系统认证登录:
:: 设置会话环境,避免连到别的实例上 set ORACLE_SID=tceng sqlplus / as sysdba进去之后逐条跑:
-- 库名、打开模式、实例状态,三项都正常才算建库成功 select name, open_mode from v$database; select instance_name, status from v$instance; -- 字符集,记下来,客户端 NLS_LANG 要跟它一致 select parameter, value from nls_database_parameters where parameter in ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET'); -- 表空间清单,Teamcenter 模板建出来的应该不止 SYSTEM 和 SYSAUX select tablespace_name, round(sum(bytes) / 1024 / 1024) as size_mb from dba_data_files group by tablespace_name order by 1; -- 服务名,必须包含 tceng,动态注册靠的就是它 select name from v$services;v$database的OPEN_MODE应该是READ WRITE。如果显示MOUNTED,说明建库过程中途失败,库只到挂载状态,这时候要去看 DBCA 的日志——在%ORACLE_HOME%\cfgtoollogs\dbca\tceng\下面,找trace.log,里面会写清楚是哪一步的脚本报了错。
表空间清单是判断模板有没有生效的关键。通用模板建出来通常只有 SYSTEM、SYSAUX、UNDOTBS1、TEMP、USERS 五六个;Teamcenter 模板建出来会多出几个按业务划分的表空间,名字跟 PLM 的数据分区对应。如果这里跟通用模板一样,那说明第 2 屏选错了模板,别往下走,删库重来比修补快。
有一处容易误会:很多人到这一步就想查infodba这个账号,查不到就以为建库失败。这个账号是 Teamcenter 企业服务器初始化时创建的,属于应用层账号,DBCA 阶段本来就没有。在第 4 章这个节点上去找它,只会给自己制造焦虑。
5. 五个真会让人返工的坑:从安装器闪退到 ORA-12514
这一章的五条都是从实际环境里攒出来的,现象、原因、解决按顺序写,遇到对得上的直接照做。
5.1 现象:双击安装器没反应,或卡在「正在检查操作系统版本」
现象很直观:以管理员身份运行setup.exe,任务管理器里能看到进程,但界面永远不出来;或者界面出来了,卡在检查操作系统版本那一屏,进度条不动,十几分钟后自己退出。
原因是 Oracle 10g 的安装器内部维护了一份认证操作系统的版本清单,遇到比清单更新的系统会直接放弃,而且不做任何提示——它把「不支持」处理成了「静默退出」。这不是权限问题,也不是介质损坏,用管理员权限重跑十次结果一样。
解决办法是给setup.exe设兼容模式:右键属性 → 兼容性 → 勾选「以兼容模式运行这个程序」,选一个比介质年代稍新的系统版本。设完再以管理员身份运行,界面能正常拉起。如果这样还不行,退一步改install\oraparam.ini,在认证版本段里补上当前系统的版本号,绕过检查。后一种做法只在实验室环境用,因为它跳过了全部环境校验,后面出问题得自己兜着。
另一个变体是卡在「先决条件检查」这一屏。这屏的检查项里有一项是操作系统版本,一项是物理内存,还有一项是交换空间。物理内存和交换空间的告警可以直接忽略,操作系统版本的告警要按上面的方式处理。别在这一屏点「全部忽略」,那会把真正的路径冲突和权限问题一起吞掉。
5.2 现象:监听显示 READY,客户端却报 ORA-12541
现象是lsnrctl status一切正常,状态 READY,服务摘要里也有tceng,但是从另一台机器连过来就是ORA-12541: TNS: 无监听程序。同一台机器上本地sqlplus / as sysdba完全正常。
原因是监听器绑定的地址和你以为的不一样。listener.ora里HOST那一项如果填的是主机名,而 hosts 里没做映射,监听器启动时会把这个名字解析成一个本机回环地址,结果是只监听127.0.0.1。本机连没问题,外部连过来就找不到监听。lsnrctl status不会把这个差异显示得很醒目,它只告诉你监听起来了。
解决办法分两步。第一步查实际绑定:
:: Windows 上看 1521 端口绑在哪个地址 netstat -ano | findstr :1521如果输出是127.0.0.1:1521,那就是绑错了。第二步改listener.ora,把HOST改成主机名并在 hosts 里补上映射,或者直接改成实际的内网 IP,然后lsnrctl reload,再netstat确认变成0.0.0.0:1521或实际 IP。改完记得把tnsnames.ora里的HOST同步改掉,这两个文件里的地址必须一致,不一致的表现是本地能连、远程报ORA-12514。
顺带说一句防火墙。Windows 防火墙默认会拦 1521 的入站,现象同样是ORA-12541,但它和绑定地址错误的区别在于:绑定错误时本机也连不上(如果你用 IP 而不是回环连),防火墙拦截时本机连得上、远程连不上。加一条入站规则放行 1521 就能排除这一项。
5.3 现象:DBCA 模板列表里没有 Teamcenter Oracle 10g
现象是 DBCA 正常启动,走到选模板那一屏,只有「一般用途」「事务处理」「数据仓库」三类,找不到 Teamcenter 的条目。或者更奇怪:明明已经拷了文件,列表还是老样子。
原因通常有三个。一是拷贝目标搞错了,拷到了%ORACLE_HOME%\assistants\dbca\templates的同级目录或者类似的路径下面。二是拷贝动作发生在 DBCA 启动之后,模板列表是启动时扫描并缓存的,后拷的文件不会出现在当前会话里。三是文件权限不对,DBCA 以 Oracle 服务账户身份扫描目录,当前用户拷进去的文件它读不到,读不到就跳过,不报错。
解决办法按顺序排查:先dir目标目录确认文件真的在那儿,文件名和源目录一致;然后完全退出 DBCA(包括右下角托盘里的进程),重新启动;还不行就看文件权限,右键属性 → 安全 → 确认ORA_DBA组或者 Oracle 服务账户有读取权限。三条都过了还看不到,那多半是介质版本和数据库版本不匹配——比如拿的是给 10.2.0.4 准备的模板,装在 10.2.0.1 的库上,DBCA 会因为模板格式版本高于自身而静默跳过。
提示:确认目标路径的时候别凭记忆敲,从
%ORACLE_HOME%变量展开。装了两套 Oracle 产品的机器上,assistants目录可能有好几份,拷错到另一套产品的目录下,DBCA 一样看不到。
5.4 现象:建库跑到一半报 ORA-12514,或者服务名对不上
现象是 DBCA 进度到 80% 左右,弹出一个错误框,内容是ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务。有时候 DBCA 界面不报错,但建完之后lsnrctl status的服务摘要里没有tceng,客户端连过去还是ORA-12514。
原因是 DBCA 建库的最后阶段要连一次库去执行后续脚本,这次连接走的是监听。如果监听是在建库之前启动的,而实例还没注册上去,这一瞬间就会出现「监听活着但认不出服务」的情况。10g 的动态注册有延迟,实例启动到向监听上报服务名之间有个几秒到几十秒的窗口,DBCA 恰好撞在这个窗口里就会失败。
解决办法是先确认库本身建成了没有。用sqlplus / as sysdba本地登录(不走监听),跑select name, open_mode from v$database。如果库是READ WRITE,说明库没问题,只是注册没完成。这时候手动触发一次注册:
-- 让实例立刻向监听上报服务名 alter system register; -- 顺便确认服务名参数不是空的 show parameter service_names;执行完再lsnrctl status,服务摘要里应该出现tceng。如果service_names是空的,用alter system set service_names='tceng' scope=both;补上,再注册一次。
如果库根本没建成,v$database都查不到,那就去看 DBCA 的日志,别在这里反复重试。日志在%ORACLE_HOME%\cfgtoollogs\dbca\下面按库名分目录,trace.log里从下往上翻,第一条真实错误往往被后面几十条衍生错误埋着。
5.5 现象:库建好了,Teamcenter 安装程序仍连不上
现象是前面所有验证都过了——lsnrctl status有服务、tnsping tceng返回 OK、sqlplus system/tceng@tceng能进——但跑 Teamcenter 的安装向导,配数据库连接那一屏测试连接失败,错误信息很笼统,只说连不上。
原因是连接方式不一样。前面所有验证用的都是SYSTEM账户,走的是数据库默认的认证方式;Teamcenter 安装向导用的是它自己的应用账户,而且要连的库必须满足两个额外条件:字符集和库的兼容参数。前者对不上会报字符集不匹配,后者对不上会报版本不支持,两种错误在向导里被统一处理成「连接失败」。
解决办法是先确认字符集。回头跑第 4 章那条nls_database_parameters查询,把NLS_CHARACTERSET的值记下来,然后设客户端环境变量:
:: 库是 ZHS16GBK 就写 ZHS16GBK,是 AL32UTF8 就写 AL32UTF8,必须一比一对应 setx NLS_LANG "AMERICAN_AMERICA.ZHS16GBK" /M设完要重开命令行窗口才生效,然后重新跑一次sqlplus system/tceng@tceng,看有没有字符集告警。再确认compatible参数:show parameter compatible,10g 上应该是10.2.0这一档,如果被改成了更低的版本,某些 Teamcenter 依赖的特性不可用,向导会在连接测试阶段就拒绝。
还有一处容易被忽略:安装向导跑在 Java 环境里,它读的是系统环境变量,不读当前命令行窗口的临时变量。如果在 cmd 里set完就去点安装程序,变量根本没传过去。必须用setx写进系统变量,或者干脆重启一次机器,让所有进程拿到新环境。
6. 交付前的一次冷启动验证:把顺序倒过来跑一遍
环境搭完当天一切正常,第二天重启机器就出问题,这是这类老系统最常见的翻车方式。原因是 Oracle 的服务启动顺序不固定,实例服务和监听服务谁先起来取决于系统调度,监听先起来、实例后起来,动态注册的窗口就拉长了,客户端在窗口期连过来全是ORA-12514。
我一般会在交付前做一次冷启动验证,把重启这件事当成一次真实故障来演练:
:: 1. 两个服务都停掉,模拟关机状态 net stop OracleServiceTCENG net stop OracleOraDb10g_home1TNSListener :: 2. 按「先监听、后实例」的顺序手动拉起 net start OracleOraDb10g_home1TNSListener net start OracleServiceTCENG :: 3. 等 30 秒,让动态注册完成,再查服务摘要 timeout /t 30 lsnrctl status | findstr /i tceng :: 4. 三层连接验证,从本地到远程走一遍 sqlplus -s / as sysdba @D:\check\verify.sql tnsping tceng sqlplus -s system/tceng@tceng @D:\check\verify.sql第 4 步用的verify.sql内容不多,但能一次把关键属性打印出来:
set feedback off pagesize 50 linesize 120 select sys_context('USERENV', 'SERVER_HOST') as host, sys_context('USERENV', 'DB_NAME') as db_name, sys_context('USERENV', 'SERVICE_NAME') as service_name from dual; select tablespace_name, status from dba_tablespaces where status <> 'ONLINE'; select count(*) as invalid_objects from dba_objects where status = 'INVALID';第一段确认连上的是对的库、对的服务名——在多实例机器上,这一条能挡住「连错库还以为一切正常」的问题。第二段查非 ONLINE 状态的表空间,正常应该是 0 行,有输出说明某个表空间处在 OFFLINE 或者 READ ONLY,后续建表会失败。第三段查无效对象,刚建完库这个数字可能不小(Oracle 自带的组件有历史遗留),但如果在几百以内且不再增长,就不用管它;如果是四位数并且每次重启都在涨,说明有组件编译失败,得看告警日志。
冷启动验证通过的标志是:三步连接全部成功,lsnrctl status在等待 30 秒后稳定显示tceng为 READY,verify.sql查出来的库名和服务名都是tceng。这个顺序跑通一次,后面无论是服务自动启动还是人工启动,行为都是可预期的。
从那以后我每次交付这类老环境,都会在关机前把服务启动类型改成手动,再按上面的顺序跑一遍冷启动,不给自己留「应该没问题」的侥幸。老版本数据库的启动竞态不是玄学,它只是没有人在第一次装完之后去验证过。希望帮到你。
本文还有配套的精品资源,点击获取