1. 跨系统 Client Copy 到底在解决什么问题
SAP Basis 日常运维里,跨系统 client copy 是一个绕不开的活儿。简单说,它就是把一个系统里的客户端数据(比如 300 测试机)搬到另一个系统(比如 400 预生产机),或者在同一系统内从一个 client 复制到另一个 client。你能用它做新项目上线前的环境搭建、做数据脱敏后的测试环境、做年度归档前的快照备份。
适合谁看?刚接手 Basis 的运维、需要独立完成一次可追溯 client copy 的顾问、以及被 SCC9 报错卡住过的朋友。核心事务码就那几个:SCC9 远程复制、SCC8 导出、SCC7 导入、SM59 维护 RFC、STMS 管传输路由。听起来多,其实链路是固定的:源端导出 → 传输层搬运 → 目标端导入 → 验证。
我试过最典型的一次,是从 DEV 300 复制到 QAS 400,中间因为 SM59 的 RFC 目标没配对,SCC9 直接卡在“无法建立远程连接”。后来把 RFC 和传输路由理顺,整个流程 40 分钟跑完。下面按可跟做的顺序拆开讲,每一步都给参数和验证动作。
先明确一个概念:client copy 分本地和远程。本地用 SCCL,远程用 SCC9。远程的本质是“源端用 RFC 把数据推到目标端”,所以 SM59 的 RFC 连接是命脉。SCC8 和 SCC7 是手动分步版:SCC8 在源端导出生成传输请求,SCC7 在目标端导入。STMS 则负责把导出的请求从源系统传输队列释放到目标系统。理解这个分工,后面排错就有方向。
还有一个常被忽略的点:client copy 不是“复制整个数据库”,它按 profile 选表。SAP 预置了 SAP_ALL、SAP_APPL、SAP_CUST、SAP_USER 等 profile。SAP_ALL 最全但最慢,SAP_CUST 只搬定制,SAP_USER 只搬用户主数据。选错 profile 会导致目标端缺配置或用户登录不了。所以动手前先想清楚:你要的是完整环境,还是只要定制和用户。
2. TaoToken 前置准备:把模型对话和 API Key 理顺
在真正敲 SCC9 之前,我习惯先把辅助工具准备好。Basis 排错经常要查 SAP Note、读报错日志、比对参数含义,这时候一个顺手的模型对话入口能省不少时间。TaoToken 的模型对话页面可以直接问“SCC9 报 RFC 连接失败怎么排查”,它会结合上下文给排查顺序,比翻文档快。
访问入口:模型对话在 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite ,API Key 管理在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 。如果你要写脚本批量跑 client copy 前后的检查,可以用 API 端点 https://taotoken.net/api 配合 Key 调用。
拿 Key 的步骤不复杂:登录后进 console,创建 API Key,复制保存。注意 Key 只显示一次,丢了就重建。拿到 Key 后,如果你用 Cline 或 Claude Code 这类工具做运维脚本辅助,配置三件套是 Base URL、Key、Model ID。Base URL 填 https://taotoken.net/api ,Key 填刚复制的,Model ID 按你选的模型填。这三样缺一不可,少一个就报 401。
为什么要在 client copy 前做这个?因为跨系统复制动辄几十分钟,期间你可能要查十几个报错。有个能随时问的模型入口,比在多个系统间切来切去高效。而且 SCC9 的日志是 ABAP 短文本,新手看不懂,丢给模型翻译成大白话很实用。
需要长期做编码或 Agent 辅助的,可以看 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite ,里面有各工具的配置示例。Claude Code 相关配置参考 https://taotoken.net/claudecode?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 。
强调一点:TaoToken 是辅助你查资料、写脚本、翻译报错的工具,不是替代 SAP GUI 或 STMS。client copy 本身必须在 SAP 系统里操作,别搞混。
3. 可复制配置:SM59 RFC 与传输路由参数清单
这一节是核心,配置对了后面才顺。先配 SM59。进事务码 SM59,创建类型 3 的 RFC 目标(ABAP 连接)。关键参数如下:
| 参数项 | 填写值 | 说明 |
|---|---|---|
| RFC Destination | QASCLNT400 | 命名建议带目标系统+client |
| Connection Type | 3 (ABAP Connection) | 远程 client copy 必须用类型 3 |
| Target Host | 目标系统应用服务器 IP 或主机名 | 用 SM51 确认 |
| System Number | 目标系统实例号 | 如 00 |
| Client | 400 | 目标 client |
| User | RFCUSER 或专用通信用户 | 需有 S_RFC 权限 |
| Password | 对应密码 | 保存后测试 |
配完点“Connection Test”和“Authorization Test”,两个都绿了才算通。如果 Connection Test 报 “local proxy failed” 或超时,先查目标系统 ICM 和网关是否正常。
接着配传输路由。进 STMS,确认源系统和目标系统在同一个传输域(Transport Domain)。如果不在,需要在域控制器的 STMS 里“Approve”目标系统加入。路由配好后,SCC9 才能把导出的请求推到目标端。
SCC9 本身的参数在初始界面选:
- Profile:按需选 SAP_ALL / SAP_CUST / SAP_USER
- Source Client:源 client,如 300
- Target Client:目标 client,如 400
- RFC Destination:选刚建的 QASCLNT400
- 勾选 “Schedule as Background Job”,避免前台超时
如果你走分步版,SCC8 在源端执行,选 profile 和 client 后生成传输请求,记下请求号。然后到 STMS 里找到这个请求,释放到目标系统。目标端用 SCC7 导入,选同一个请求号。
一个可复制的 settings 片段(用于脚本化检查,非 SAP 原生格式,仅示意参数结构):
{ "rfc_destination": "QASCLNT400", "connection_type": "3", "target_host": "10.0.0.20", "system_number": "00", "target_client": "400", "source_client": "300", "profile": "SAP_CUST", "schedule_background": true }注意:SCC9 的 profile 一旦选定不能中途改,跑之前确认清楚。SAP_ALL 会搬用户和权限,目标端已有用户可能被覆盖,生产环境慎用。
4. 验证请求与成功结果:从日志到数据核对
配置完就开跑。SCC9 提交后,用 SM37 看后台作业状态。作业名通常是 RSCLICOP 或类似。状态从 “Released” 到 “Active” 再到 “Finished”。如果卡在 Active 超过预期时间,去 SM50 看是否有进程占用。
跑完后验证分三层。第一层看日志:SCC3 查看 client copy 日志,选目标 client,能看到每个步骤的返回码。返回码 0 是成功,4 是警告,8 以上是错误。第二层看表数据:用 SE16 查 CCJOBS 或直接查关键定制表,比如 T000(client 表)、USR02(用户表),确认记录数对得上。第三层做业务验证:登录目标 client,跑一个简单事务码,比如 SE16 查一条定制数据,看是否搬过来了。
如果走 SCC8+SCC7,验证点在 STMS。SCC8 导出后,STMS 里请求状态应为 “Waiting”。释放后变 “Running”,导入完成变 “Completed”。SCC7 导入日志在目标端用 SCC3 看。
成功的结果长这样:SM37 作业 Finished,SCC3 日志无 8 以上返回码,SE16 查 T000 能看到目标 client 记录,登录后事务码正常。实测下来,SAP_CUST 从 300 到 400 大约 15-25 分钟,SAP_ALL 可能 1 小时以上,取决于数据量。
一个容易忽略的验证:检查目标端的 number range 和 RFC 连接是否被覆盖。SAP_ALL 会搬 RFC 目标,如果目标端有指向生产的 RFC,可能被源端的覆盖,导致后续接口出错。跑完务必用 SM59 复查关键 RFC。
5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth
排错是 Basis 的日常。下面按真实报错给排查路径。
401 Unauthorized:多出现在用 API 或脚本调 TaoToken 时。原因通常是 Key 没填、填错、或 Base URL 写成了带路径的地址。检查三件套:Base URL 用 https://taotoken.net/api ,Key 从 api-keys 页面复制,Model ID 别写错。如果还报 401,去 console 看 Key 是否被禁用或额度耗尽。
local proxy failed:SCC9 里常见。意思是源端连不上目标端的 RFC。排查顺序:SM59 里 Connection Test 是否通;目标系统 ICM 是否启动(SMICM);网关服务是否正常(SMGW);防火墙是否放行 SAP 端口(通常是 33xx)。如果 Connection Test 通但 SCC9 还报,检查 RFC 用户是否有 S_RFC 和 S_CPIC 权限。
reading choices:这个报错多出现在用模型 API 做流式输出时,返回体解析失败。检查请求头是否带了正确的 Content-Type,以及是否用了流式参数。如果是脚本解析,确认返回 JSON 结构没变。TaoToken 的 API 文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 有返回示例。
OAuth 相关报错:如果你用 Claude Code 或类似工具接入,报 OAuth 失败通常是认证方式没选对。Claude Code 的配置参考 https://taotoken.net/claudecode?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite ,按文档填 Base URL、Key、Model ID。别用账号密码去套 OAuth 流程。
SCC9 本身还有几个高频错:目标 client 已存在且非空,会报 “Client already exists”;profile 权限不足,报 “No authorization for client copy”;传输路由没配,报 “No route to target system”。对应处理:目标 client 先清空或换一个;用 SAP_ALL 权限的账号跑;STMS 里补路由。
6. 语义一致 CTA:把工具链固定下来
跑通一次 client copy 后,建议把配置和排查路径固化。SM59 的 RFC 目标、STMS 的路由、SCC9 的 profile 选择,做成 checklist。下次换系统复制,照着改 IP 和 client 号就行。
辅助工具这边,把 TaoToken 的 API Key 和模型对话入口固定到你的运维工作台。排障和接入问题看 API Keys 和接入文档:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 和 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 。验证模型输出是否正常,用模型对话:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 。长期做编码和 Agent 辅助,看 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 。
最后给个实用技巧:SCC9 跑之前,先在目标端用 SCCL 做一次本地空跑测试,确认 profile 和权限没问题,再上远程。这样能把 RFC 问题和 profile 问题分开定位,省一半排查时间。