# How to use FNDLOAD to migrate lookups, profiles and menus between Oracle EBS instances

> Source: https://netray.co/erp-help/ebs-fndload-migrate-lookups-profiles-menus-how-to
> Publisher: Netray (netray.co), AI and integration engineering for ERP and manufacturing systems.
> Section: ERP Help

## Short answer

FNDLOAD is the command line utility that downloads AOL setup data into a flat .ldt file using a .lct configuration file, and uploads that file into another instance. The pattern is the same for every object: pick the correct .lct, download with the entity name, review the .ldt, then upload on the target as the APPS user.

## Kind

how-to

## System

oracle-ebs

## Erp

Oracle E-Business Suite

## Module

Application Object Library / FNDLOAD

## Query

How to use FNDLOAD to migrate lookups, profile options and menus between Oracle EBS instances

## Alternate Queries

- FNDLOAD download upload syntax R12
- FNDLOAD afscprof.lct profile option migrate
- FNDLOAD lookup type aflvmlu.lct example
- migrate EBS setup DEV to TEST without re-keying

## Applies To

Oracle E-Business Suite 11i, R12.1 and R12.2 (run from the application tier with the environment file sourced)

## Steps

### Move one lookup type and one profile option from DEV to TEST

**Items:**

- Log on to the DEV application tier as the applmgr OS user and source the environment file (for R12.2, the run file system environment).
- Download the lookup: FNDLOAD apps/<pwd> 0 Y DOWNLOAD $FND_TOP/patch/115/import/aflvmlu.lct xx_lookup.ldt FND_LOOKUP_TYPE LOOKUP_TYPE="XX_MY_LOOKUP" APPLICATION_SHORT_NAME="FND"
- Download the profile: FNDLOAD apps/<pwd> 0 Y DOWNLOAD $FND_TOP/patch/115/import/afscprof.lct xx_profile.ldt PROFILE PROFILE_NAME="XX_MY_PROFILE" APPLICATION_SHORT_NAME="XX"
- Open each .ldt in a text editor and confirm it contains only the entity you expect and no unexpected owner or last update values.
- Copy the .ldt files to the TEST application tier and source its environment.
- Upload: FNDLOAD apps/<pwd> 0 Y UPLOAD $FND_TOP/patch/115/import/aflvmlu.lct xx_lookup.ldt, then the same for afscprof.lct.
- Check the log file written to the current directory (L plus a request number .log) for the line that reports the entity and zero errors.
- Verify in the forms: Application > Lookups > Common for the lookup, System Administrator > Profile > System for the profile.

## Sections

### How FNDLOAD works and the arguments

**Body:**

FNDLOAD takes a connect string, a 0 for the program mode, a Y for the exit-on-error flag, the action (DOWNLOAD or UPLOAD), the path to a .lct file, the .ldt file name, and for downloads an entity name with filter arguments. The .lct file is the definition: it tells FNDLOAD which tables to read and how to write them back. The .ldt file is the data.

On upload, FNDLOAD matches rows by their natural key (for a lookup, the type plus application) and inserts or updates them. It does not delete rows that exist on the target but not in the file. That one-way behaviour is why a lookup code you removed on DEV still lingers on TEST after an upload.

Because the data is plain text, FNDLOAD output works well under version control. Most customisation teams keep one folder of .ldt files per release and run them in a fixed order from a deployment script.

**Code:**

- FNDLOAD apps/<pwd> 0 Y DOWNLOAD $FND_TOP/patch/115/import/aflvmlu.lct xx_lookup.ldt FND_LOOKUP_TYPE LOOKUP_TYPE="XX_MY_LOOKUP" APPLICATION_SHORT_NAME="FND"
- FNDLOAD apps/<pwd> 0 Y UPLOAD $FND_TOP/patch/115/import/aflvmlu.lct xx_lookup.ldt

### The .lct files you will use most

**Body:**

A short list covers most migrations. afscprof.lct handles profile options (entity PROFILE). aflvmlu.lct handles lookups (FND_LOOKUP_TYPE). afcpprog.lct handles concurrent programs (PROGRAM) and afcpreqg.lct handles request groups (REQUEST_GROUP). afcprset.lct handles request sets. afsload.lct handles menus (MENU). afscursp.lct handles responsibilities (FND_RESPONSIBILITY). afffload.lct handles flexfields, including VALUE_SET, DESC_FLEX and KEY_FLEX.

Each one has its own entity name and its own filter arguments, so copy the exact syntax from a working example and change only the names. If a download returns an empty .ldt, the filter value almost always does not match: lookup types and profile names are case sensitive and the application short name must be the owning application, not the one you are working in.

For concurrent programs the executable must exist on the target first, or the upload of the program fails. Migrate the executable definition in the same run, or register the executable and its file on the target beforehand.

**Code:**

- FNDLOAD apps/<pwd> 0 Y DOWNLOAD $FND_TOP/patch/115/import/afcpprog.lct xx_prog.ldt PROGRAM APPLICATION_SHORT_NAME="XX" CONCURRENT_PROGRAM_NAME="XXMYPROG"
- FNDLOAD apps/<pwd> 0 Y DOWNLOAD $FND_TOP/patch/115/import/afsload.lct xx_menu.ldt MENU MENU_NAME="XX_CUSTOM_MENU"

### Flexfields and the P_LEVEL argument

**Body:**

Descriptive flexfields are moved with afffload.lct and a P_LEVEL parameter that controls how much of the definition is downloaded: columns, references, contexts and segments. A common value is COL_ALL:REF_ALL:CTX_ONE:SEG_ALL, which brings one context and all its segments rather than every context in the flexfield.

Value sets used by those segments are separate entities. If a segment points at a new value set, download VALUE_SET too, and upload it before the flexfield. After uploading flexfield changes you must compile the flexfield from the Descriptive Flexfield Segments form or run the Compile Descriptive Flexfields program, otherwise users do not see the new segments.

Flexfield definitions that are frozen on the target can reject changes, so unfreeze, upload and recompile in a controlled window.

**Code:**

FNDLOAD apps/<pwd> 0 Y DOWNLOAD $FND_TOP/patch/115/import/afffload.lct xx_dff.ldt DESC_FLEX P_LEVEL="COL_ALL:REF_ALL:CTX_ONE:SEG_ALL" APPLICATION_SHORT_NAME="AR" DESCRIPTIVE_FLEXFIELD_NAME="RA_CUSTOMER_TRX_LINES" DESCRIPTIVE_FLEX_CONTEXT_CODE="XX_CTX"

### Ownership, CUSTOM_MODE and what gets overwritten

**Body:**

FNDLOAD compares the last update date and owner on each row. By default a row owned by SEED data will not be overwritten by a customer row and a newer target row is not overwritten by an older file row. Adding CUSTOM_MODE=FORCE to the upload command forces the file to win regardless of dates.

Use FORCE deliberately. It is the right choice when TEST has drifted and you want it to match DEV, and the wrong choice when someone legitimately changed a profile value on PROD that the file does not know about.

Profile option values at site, responsibility or user level are not part of the profile definition download. Move them separately, or set them on the target by hand or by script.

## Pitfalls

- Passing the wrong application short name returns an empty .ldt with no error, so always open the file before uploading.
- Upload never deletes. Removed lookup codes or profile levels stay on the target until you end date or delete them there.
- Uploading a concurrent program before its executable exists on the target fails.
- Flexfield changes uploaded but not compiled look like they did nothing to users.
- CUSTOM_MODE=FORCE can overwrite legitimate target-side changes.
- Putting the APPS password on the command line exposes it in the process list; use a restricted shell or a wrapper that reads it securely.

## Ai Angle

An assistant grounded in your EBS metadata can read FND_LOOKUP_TYPES, FND_PROFILE_OPTIONS and the menu tables on DEV and TEST, diff them, and list exactly which objects differ before anyone writes a FNDLOAD command. It can draft the command with the right .lct and entity names for review. Running the upload stays a human step in your change process, and the model runs on your own infrastructure if the metadata is sensitive.

## Faq

### What does the 0 Y mean in a FNDLOAD command?

**Answer:** The 0 is the program mode used by the utility and the Y tells it to exit on error. In practice these two values are copied unchanged from Oracle's own examples. The parameters that vary are the action, the .lct path, the .ldt name and the entity filters after them.

### Can FNDLOAD move profile option values and not just the definition?

**Answer:** The profile .lct moves the option definition. Values set at site, application, responsibility or user level are a separate matter and are generally set on the target by hand or by a script against the profile APIs, since the right value usually differs by instance.

### Why did my upload report success but nothing changed?

**Answer:** Most often the target row was newer or owned differently, so FNDLOAD skipped it without failing. Re-run with CUSTOM_MODE=FORCE if you intend the file to win, and read the log for the per-entity messages rather than only the final status.

### Is FNDLOAD still supported in R12.2?

**Answer:** Yes. In R12.2 you run it from the run file system with the environment sourced. Be aware of online patching rules: seed data uploaded while an adop cycle is active should follow your patching procedure so changes land in the right file system edition.

## Search terms

FNDLOAD, FNDLOAD syntax, FNDLOAD afscprof.lct, FNDLOAD aflvmlu.lct, FNDLOAD afffload.lct, oracle ebs migrate setup, FNDLOAD CUSTOM_MODE FORCE, download upload ldt file, oracle apps lookup migration

---
Talk to an engineer: https://netray.co/contact?intent=erp_ai | Machine catalog: https://netray.co/agent/catalog.json
