Oracle EBS数据定义移植工具:FNDLOAD

news/2024/4/24 19:43:59/

在实际的EBS二次开发中,我们经常会碰到需要在各个环境之间移植二次开发的程序对象以及数据定义,如在EBS二次开发中并发请求的定义会涉及到: 可执行、并发程序、值集、请求组等的定义,定义需要从开发环境、测试环境、UAT环境一直到正式环境,开发人员完成一个并发请求开发后,同样的定义需要在 多个环境中手工完成,势必导致中间出现错误,导致浪费很多时间来进行检查,无形中增加了工作量;而更多的时候系统管理人员和开发人员是分离的,开发人员和 系统管理人员之间还需要进行任务的交接,进一步增加了程序移植工作的难度和工作量。

FNDLOAD则是为了移植EBS数据定义而诞生的工具,它可以移植定义在AOL中的数据定义,如我们常见的并发程序、值集、预置文件等等,严格来说它可以实现任意两个Oracle数据库之间数据的移植,有了这个工具,我们就无需在多个环境中重复进行手工定义了。

在Oracle EBS环境下,和FNDLOAD工具类似的移植工具随处可见,并被广泛应用,如用来移植BI Publisher报表模板定义的XDOLoader工具;工作流定义移植工具WFLOAD;数据库对象移植工具ODFXDF.

04年在做一个项目的时候,我简单写过一个通过FNDLOAD工具在多个EBS环境间移植程序定义的文档,其中主要描述了如何使用FNDLOAD将AOL模块中的数据从一个环境移植到另一个环境,下面将从如何掌握并应用FNDLOAD这个工具的角度补充说明。

一、FNDLOAD介绍

数据移植的目的无非是将一个EBS系统下数据库中的某个表中的数据按照条件筛选出来后传到另外EBS系统下数据库中对应的表中。FNNDLOAD的根本原理就是将数据从源数据库中下载到数据文件中,然后再通过FNDLOAD将数据文件上传到目标数据库中。

由于两个数据库系统不能保证是连接的,无法采用Oracle的DBLink技术,因此FNDLOAD采用了数据文件作为两个系统间传递的中介,而为了完成数据的下载和上传,FNDLOAD引入了控制文件(lct):用来定义移植那张表中的数据列,并分DOWNLOAD和UPLOAD模式定义数据抽取和更新的逻辑,DOWNLOAD用在源数据库环境下,UPLOAD应用于目标数据库环境下。

控制文件是FNDLOAD工具的核心,下面我们来分析一下并发请求移植的控制文件($FND_TOP/patch/115/import/afcpprog.lct)的部分内容:

控制文件由4部分组成:

1. 实体(entity):说明控制文件是用来移植什么的,如上面的是 PROGRAM,一个控制文件中可以有多个实体,实体可以实现嵌套,实体和后面的section对应,一般一个实体对应一个数据库表

2. 段(section):定义实体的数据结构,定义了移植时数据的结构和类型,但不会包含内部的ID,如使用APPLICATION_SHOURT_NAME代替APPLICATION_ID,一般和实体对应的数据库表的定义一致,如例子中的EXECUTABLE和PROGRAM段,运行FNDLOAD命令时需要指定段名

3. 下载(download):定义了下载数据时所使用的SQL语句,SQL语句中以冒号(:)打头的变量是FNDLOAD的变量,在运行命令时可传入参数的值来显示数据的提取,如:APPLICATION_SHORT_NAME既是限制并发请求所属的应用

上载(upload):定义了上载数据时所执行的SQL语句或者PLSQL代码,如fnd_concurrent_programs_pkg.TRANSLATE_ROW和fnd_concurrent_programs_pkg.LOAD_ROW方法

FNDLOAD命令工具的语法

FNDLOAD apps/appspwd 0 Y mode configfile datafile entity [ param ... ]

1. Mode:有 DOWNLOAD和UPLOAD

2. Configfile:就是FNDLOAD用来控制上传和下载的控制文件(lct)

3. Datafile:是生成的数据文件

4. Entity:是要多控制文件中的哪部分数据移植(数据可以嵌套,如并发请求包括了引用的值集)

5. Param:是用来控制数据移植的参数,可以多个

下面是FNDLOAD的流程描述图

二、FNDLOAD使用步骤

使用FNDLOAD来移植数据的步骤如下:

1. 找到控制文件,这是非常关键的一步,很多网上文章介绍使用FNDLOAD来移植AOL模块的数据,很少提到其它内容,实际上FNDLOAD可以用来移植数据库中的任何数据,只是说如果Oracle没有提供控制文件(lct)的话,需要自己来制作控制文件会得不偿失,而随着FNDLOAD的广泛应用,很多模块的都提供了FNDLOAD的 功能,控制文件一般都放在各模块下的patch/115/import/目录下,如AOL模块的在$FND_TOP/patch/115/import 下,总帐模块$GL_TOP/patch/115/import下;进入控制文件目录后具体某个控制文件是用来进行什么数据的移植那就只能打开文件看里面 的实体部分、DOWNLOAD和UPLOAD部分了

2. 查看DOWNLOAD部分中SQL语句的参数,通过查看SQL语句得出可以使用哪些参数来限制数据的下 载,如afcpprog.lct控制文件中并发程序的限制可以通过APPLICATION_SHORT_NAME来限制,这样就可以限制只下载某个应用下 的并发,同时可以使用多个参数,参数通过key=value的方式提供,参数之间用空格隔开

3. 运行FNDLOAD命令的下载模式从源系统下载数据,如下载并发请求:FNDLOAD apps/apps 0 Y DOWNLOAD afcpprog.lct prog.ldt PROGRAM APPLICATION_SHORT_NAME=XHU CONCURRENT_PROGRAM_NAME=XHUPOR00

4. 使用ftp工具下载源系统生成的数据文件(ldt)

5. 使用ftp工具上传数据文件(ldt)到目标系统

6. 运行FNDLOAD上载模式将数据从数据文件上载到目标数据库中,如上传上面下载的并发请求: FNDLOAD apps/apps 0 Y UPLOAD afcpprog.lct prog.ldt –

三、如何移植多语言定义数据

AOL模块中很多数据的定义都是多语言的,如并发请求的定义,而通过FNDLOAD来 进行数据的移植一次只包括一个语言的信息,因此如果定义存在多语言的情况,需要按照语言环境进行多次移植,即生成多个数据文件(ldt),在控制文件的目 录下,如$FND_TOP/patch/115/import/下存在US和ZHS这样的语言目录,控制文件内容的开始指定了语言环境, 如LANGUAGE = “US”,而很多控制文件并未分多语言版本,这个需要在运行FNDLOAD命令的时候指定语言环境,所以使用控制文件的时候无需使用指定语言的版本,只要在运行FNDLOAD命令的时候通过下面的命令来切换语言环境

1 2 3 4 5 6 7 --中文 NLS_LANG= "AMERICAN_AMERICA.AL32UTF8" export NLS_LANG   --英文 NLS_LANG= "SIMPLIFIED CHINESE_CHINA.AL32UTF8" export NLS_LANG

通过上面的环境设置后再执行FNDLOAD,生成的数据文件就是相应语言环境的定义,只要切换不同的语言环境执行下载,多次生成数据文件就实现了多语言数据的生成;然后执行多次上载操作即可.

NLS_LANG可以通过下面的SQL查询获得:

1 2 3 4 SELECT '"' || nls_language || '_' || nls_territory || '.' || VALUE || '"' nls_lang FROM fnd_languages, v$nls_parameters WHERE language_code IN ('US', 'ZHS') AND parameter = 'NLS_CHARACTERSET';

四、开发员常用FNDLOAD控制文件列表

模块

文件名

描述

afcpprog.lct

可执行、并发程序、值集、弹性域

afcpexec.lct

可执行程序

afattach.lct

附件

afcpreqg.lct

请求组

afcprset.lct

请求集

afffload.lct

值集、关键性弹性域和描述性弹性域及相关安全性设置

aflvmlu.lct

Lookups

afmdmsg.lct

消息

afscprof.lct

profile options 预制文件

afscursp.lct

Application users,User Responsibilities,Security groups,Applications,Application Responsibilities and Exclusion Functions

afsload.lct

FORM, FUNCTION, MENU, ENTRY, OBJECT, OBJECT_INSTANCE_SET, GRANT

FND affrmcus.lct Form个性化定义

更多控制文件请到各模块的patch/115/import目录下去查找。

 


http://www.ppmy.cn/news/48553.html

相关文章

【微信小程序-原生开发】实用教程21 - 分包

分包的流程 当微信小程序主包大小超过2M时,则需要对微信小程序进行分包,方法如下: 1. 转移页面文件 在项目根目录下,新建文件夹 package1 (即自定义的分包名为 package1 )文件夹 package1 内新建文件夹 p…

差分运算放大电路原理解析

差分运算放大电路,对共模信号得到有效抑制,而只对差分信号进行放大,因而得到广泛的用。 注: (1)共模信号   共模信号(common mode signal)是指同时作用于多个电路或电子设备上的信…

列表、栈、队列

列表(List) 介绍 一系列有序元素的集合。列表中的元素可以是任意类型,允许重复。 可通过索引定位、访问列表中的(单个)元素,还可使用切片(slice)操作一次性访问多个元素&#xff…

深度解析OEKO

【深度解析OEKO】 什么是OEKO-TEX Standard 100? OEKO-TEX Standard 100现在是使用最为广泛的纺织品生态标志。OEKO-TEX Standard 100规定的标准是根据最新的科学知识,对纱线、纤维以及各类纺织品的有害物质含量规定限度。只有按照严格检测和检查程序提供…

浏览器输入URL会做哪些事情

1、浏览器输入URL后会检查缓存 检查资源是否在缓存中并且新鲜,如果有跳到转码步骤, 1.1 检查是否新鲜的方法: ---------HTTP1.0中提供的 Expires,储存的值是绝对时间表示缓存日期; ---------HTTP1.1中提供Cache-Contr…

MySQL运维27-MySQL复制的评估方法和注意事项

文章目录 1、概述2、MySQL复制的意义3、MySQL复制实施前的评估方法3.1、必要性的评估3.2、基础设施的评估3.3、对主库影响的评估 4、MySQL复制实施时的注意事项5、总结 1、概述 2、MySQL复制的意义 扩展读能力:从库的最重要意义在于扩展读能力,但不能扩…

操作系统原理 —— 什么是中断?(四)

我们先来看看早期的计算机的工作流程: 如上图,在早期的计算机假设有三个程序需要执行,执行顺序是:先执行程序1,等待程序1结束之后,再开始执行程序2,以此类推,所以它们是串行执行的…

jsp+springboot基于ssm的人才招聘求职网站推荐模拟考试系统java idea

登录需要随机数字验证码 管理员: 招聘管理 求职信息管理 , 招聘信息管理 人员管理 管理注册的用户进行审核操作 公告管理 发布公告新闻 (公告我想不到啥意思,可修改或增加别的) 个人信息 修改个人信息 招聘者&am…

一天吃透SpringMVC面试八股文

说说你对 SpringMVC 的理解 SpringMVC是一种基于 Java 的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于Spring框架的一个模块。 它通过一套注解,让一个简单的Java类成为处理请求的控制器,而无须实现任何接口。同时它还支持RESTful编程…

Qt扫盲-Qt图表类综述

Qt支持图表类综述 一、概述二、图表类型1. 折线图和柱状图2. 面积图和散点图3. 柱状图4. 饼图5. 盒须图6. 烛台图表7. 星座图图表 三、坐标轴 Axes四、图例五、与图表交互1. 动态绘制数据2. 深入数据3. 缩放和滚动4. 鼠标悬停 六、主题 一、概述 Qt Charts支持创建时尚的、交互…

webpack plugin源码解析(六) CompressionWebpackPlugin

文章目录 作用涉及 webpack API处理 asset 钩子compilation.hooks.processAssets返回或新建缓存:compilation.getCache返回 asset 文件信息:compilation.getAsset文件名匹配函数:compiler.webpack.ModuleFilenameHelpers.matchObject模版字符…

RabbitMQ的介绍和安装

文章目录 1.1 RabbitMQ介绍1.2 RabbitMQ的安装1.2.1 下载镜像1.2.2 安装启动1.2.3 测试 1.1 RabbitMQ介绍 RabbitMQ是一个开源的消息队列中间件,可以用于构建分布式应用程序,使应用程序能够快速、可靠地处理大量消息。它实现了AMQP(高级消息队…

MyBatis小技巧

一、MyBatis中接口代理机制及使用 我们不难发现,以前编写dao/mapper实现类中的方法代码很固定,基本上就是一行代码,通过SqlSession对象调用insert、delete、update、select等方法,这个类中的方法没有任何业务逻辑,既然…

八、express框架解析

文章目录 前言一、express 路由简介1、定义2、基础使用 二、express 获取参数1、获取请求报文参数2、获取路由参数 三、express 响应设置1、一般响应设置2、其他响应设置 四、express 防盗链五、express 路由模块化1、模块中代码如下:2、主文件中代码如下&#xff1…

常见的Web漏洞

一、SQL 注入 SQL 注入就是通过把 SQL 命令插入到 Web 表单,递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令的目的。 1、原理: 网站数据过滤不合格,过分依赖用户输入的数据,没有过滤用…

SpringBoot配置多环境,dev,prod,test

springboot与maven配置多环境 开发任何的项目至少都需要三个环境,分别是 开发环境 测试环境 生产环境 环境不同意味着配置也是不相同的,比如数据库,文件路径等等配置,那么如何解决这么多环境整合在一起既不混乱又能很优雅呢&…

Maven项目中出现【不再支持目标选项 1.5】的解决办法

1 快速解决【单项目】 本方法只适用于单个项目&#xff0c;新建项目使用maven还会出现问题。 在pom.xml配置&#xff1a; <properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target>&l…

grpc实战-pb文件生成问题/空消息体问题

报错信息&#xff1a; proto: message pb.Empty is already registered See https://protobuf.dev/reference/go/faq#namespace-conflict 对比老版本的工具生成的xxxx.pb.go文件。import导入的proto链接不一样&#xff1a; 旧版本&#xff1a;import github.com/golang/proto…

C++篇 ---- 命名空间namespace

由于在c语言中在定义时可能会出现重命名现象&#xff0c;造成空间冲突&#xff0c;c语言中有命名冲突&#xff1a;1 和库冲突。2 互相之间的冲突&#xff0c;变量命名冲突。所以c中就有了对其改进的关键字namespace&#xff0c;针对重定义&#xff0c;解决空间冲突。 文章目录 …

数据库实验 | 第1关:建立和调用存储过程(不带输出参数的存储过程)

任务描述 本关任务&#xff1a; 该实验是针对数据表jdxx&#xff0c;该数据表有四个字段&#xff0c;分别是省份(sf)、城市(cs)、区县(qxmc)、街道(name)。 例如&#xff0c;查询天心区(qxmc)的所有字段的值结果如图所示 任务要求 建立存储过程 dqxx(in city varchar(10),i…