If you’ve ever been involved in an Oracle Fusion Cloud HCM implementation or post-production support, you are intimately familiar with the mandatory ritual known as P2T (Production to Test). It’s that crucial post-clone phase where production data gets copied down to your Stage, Test, or Development environments so developers, functional consultants, and business analysts can test patches, new configurations, or custom reports against real-life data.
However, P2T brings a major compliance and security headache: unmasked, highly confidential compensation data. Executives, payroll team members, and everyday employees suddenly have their exact salary figures, bonuses, and compensation histories living on lower non-production environments—where access restrictions are typically far more relaxed than in Production.
The Dilemma: Native Subscription vs. Internal IT DIY
Oracle offers an optional, enterprise-grade tool called the Oracle Fusion Cloud Data Masking Subscription. It automatically obfuscates sensitive personally identifiable information (PII) and compensation data during or immediately following the environment refresh process.
So, what’s the issue? Simple: Cost and licensing. Many organizations choose not to purchase the optional Data Masking subscription due to tight IT budgets or licensing priorities. When leadership or audit teams ask, “Why aren’t our test salaries masked?”, the responsibility lands squarely on the internal IT and Oracle HRMS support team to implement a manual, scriptable masking workflow.
Fortunately, Oracle’s native bulk data import feature—HCM Data Loader (HDL)—provides a reliable, repeatable mechanism to safely overwrite actual compensation data with masked, dummy, or randomized values post-cloning.
Step-by-Step Execution Guide
Step 1: Extract Active & Historical Salary Records via BI Publisher
To safely update existing salary records via HDL without creating unwanted duplicate rows or corrupting effective dates, extract the current salary keys from your freshly cloned Test instance using a BI Publisher query:
SELECT paf.assignment_number AS "AssignmentNumber", csb.name AS "SalaryBasisName", TO_CHAR(cs.date_from, 'YYYY/MM/DD') AS "DateFrom", TO_CHAR(cs.date_to, 'YYYY/MM/DD') AS "DateTo", cs.salary_amount AS "OriginalAmount", cs.currency_code AS "CurrencyCode", cs.salary_id AS "SalaryId"FROM cmp_salary cs JOIN per_all_assignments_m paf ON cs.assignment_id = paf.assignment_id AND TRUNC(SYSDATE) BETWEEN paf.effective_start_date AND paf.effective_end_date JOIN cmp_salary_bases csb ON cs.salary_basis_id = csb.salary_basis_idWHERE paf.assignment_status_type = 'ACTIVE'ORDER BY paf.assignment_number, cs.date_from DESC;
Step 2: Apply the Masking Algorithm
When obfuscating salary numbers, you have three common options depending on your business requirements:
- Flat Fixed Value: Set every single employee’s salary to a constant (e.g., $50,000 or $10,000). Easiest to implement, though it removes real-world salary distribution variance.
- Randomized Noise / Offset: Multiply the original salary by a random factor (e.g.,
original * random(0.6, 1.4)) or assign a random integer within a standard band. - Grade-Based Midpoints: Replace individual compensation with the exact midpoint of their associated job/grade scale.
Step 3: Construct the CMP_SALARY.dat File
HCM Data Loader uses the business object structure for Salary under the file name CMP_SALARY.dat. Below is a standard HDL structure ready for testing and execution:
METADATA|Salary|AssignmentNumber|SalaryAmount|DateFrom|DateTo|SalaryBasisId|SalaryIdMERGE|Salary|18166|3023.81|2024/10/16|4712/12/31|300000061139279|300000278365318MERGE|Salary|23158|2051.47|2020/01/01|2022/12/31|300000001940142|300000027995330
Best Practices for Internal IT Teams
- Disable Salary Workflow Notifications: Before uploading your HDL file in Test, ensure that Fusion HCM approvals and notification routing for Salary Changes are temporarily paused or bypassed in Transaction Console. Otherwise, thousands of automated email notifications will flood managers’ inboxes announcing salary changes!
- Handle Salary Components: If your setup utilizes Simple or Complex Salary Components (e.g., Base Pay + Allowance + Housing Benefit = Total Salary), uploading a top-level
SalaryAmountwithout component lines may throw validation errors. EnsureMultipleComponentsis set correctly or includeSalaryComponentchild lines in your HDL.
Conclusion
While Oracle’s native Data Masking subscription provides an out-of-the-box solution, internal IT teams don’t need to panic if it’s not in the budget. By building a disciplined post-P2T execution playbook using BI Publisher and HCM Data Loader (SALARY.dat), you can systematically replace actual production salary figures with safe, obfuscated data in a matter of minutes.

Share your Feedback