{"id":22569,"date":"2026-08-04T07:02:32","date_gmt":"2026-08-04T07:02:32","guid":{"rendered":"https:\/\/tenthplanet.in\/idempiere\/?p=22569"},"modified":"2026-08-20T07:01:36","modified_gmt":"2026-08-20T07:01:36","slug":"how-to-configure-copy-tenant-in-idempiere","status":"publish","type":"post","link":"https:\/\/tenthplanet.in\/idempiere\/how-to-configure-copy-tenant-in-idempiere\/","title":{"rendered":"How to Configure Copy Tenant in iDempiere"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Learn how to configure the Copy Tenant window in iDempiere to migrate or duplicate retail store tenants, including field setup and validation steps.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Introduction<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Copy Tenant window runs iDempiere&#8217;s Move Client process, used to duplicate a template tenant or migrate a tenant from an external database into the current instance. Retail chains use it when onboarding a new store from a standard template or consolidating an acquired franchise&#8217;s database into a central iDempiere instance. Because tenant data includes business partners, products, price lists, and transactions, this configuration directly affects data integrity, reporting accuracy, and store go-live timelines.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Process Flow<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"382\" src=\"https:\/\/tenthplanet.in\/idempiere\/wp-content\/uploads\/sites\/13\/2026\/08\/TenthPlanet-iDempiere-CopyTenant-WorkFlow.png\" alt=\"Tenthplanet-Idempiere-CopyTenant\" class=\"wp-image-27763\" title=\"\" srcset=\"https:\/\/tenthplanet.in\/idempiere\/wp-content\/uploads\/sites\/13\/2026\/08\/TenthPlanet-iDempiere-CopyTenant-WorkFlow.png 1024w, https:\/\/tenthplanet.in\/idempiere\/wp-content\/uploads\/sites\/13\/2026\/08\/TenthPlanet-iDempiere-CopyTenant-WorkFlow-300x112.png 300w, https:\/\/tenthplanet.in\/idempiere\/wp-content\/uploads\/sites\/13\/2026\/08\/TenthPlanet-iDempiere-CopyTenant-WorkFlow-768x287.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Business Rules<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Only Validate Data must be unchecked to actually copy records; checked mode is validation-only.<\/li>\n\n\n\n<li>Copy Template Tenant duplicates an existing tenant instead of connecting to an external database.<\/li>\n\n\n\n<li>JDBC URL is mandatory when copying from an external database.<\/li>\n\n\n\n<li>Tenants to Include and Tenants to Exclude should not both be used in the same run.<\/li>\n\n\n\n<li>Tables listed in Tables to Exclude are skipped entirely during migration.<\/li>\n\n\n\n<li>Preserve IDs keeps original record IDs instead of generating new ones for listed tables.<\/li>\n\n\n\n<li>Fallback Records apply when a foreign key reference cannot be resolved during migration.<\/li>\n\n\n\n<li>Run as Job executes the migration in the background without blocking the user session.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Prerequisites<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Target iDempiere database instance is installed and accessible.<\/li>\n\n\n\n<li>Source database connection details (JDBC URL, User Name, Password) are available for external migration.<\/li>\n\n\n\n<li>Template tenant already exists when using Copy Template Tenant mode.<\/li>\n\n\n\n<li>System Administrator role access is granted to run the process.<\/li>\n\n\n\n<li>Full backup of the target database is completed before running migration.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Configuration Steps<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 1: Choose the Migration Mode<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This determines whether the process copies a template tenant locally or connects to an external database.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Check Copy Template Tenant to duplicate an existing tenant in the same database. Leave it unchecked to migrate from an external source using JDBC connection details.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><td><strong>Field<\/strong><\/td><td><strong>Sample Value<\/strong><\/td><td><strong>Description<\/strong><\/td><\/tr><\/thead><tbody><tr><td>Copy Template Tenant<\/td><td>Checked \/ Unchecked<\/td><td>Selects internal template copy vs. external database migration<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 2: Configure Source Database Connection<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Required so iDempiere can read tenant data from the external system when not copying a template.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Enter JDBC URL, User Name, and Password for the source database. Leave these blank when Copy Template Tenant is checked.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><td><strong>Field<\/strong><\/td><td><strong>Sample Value<\/strong><\/td><td><strong>Description<\/strong><\/td><\/tr><\/thead><tbody><tr><td>JDBC URL<\/td><td>jdbc:postgresql:\/\/192.168.1.20:5432\/idempiere<\/td><td>Connection string to the external source database<\/td><\/tr><tr><td>User Name<\/td><td>idempiereuser<\/td><td>Database login used to read source data<\/td><\/tr><tr><td>Password<\/td><td>********<\/td><td>Database password for the source login<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 3: Define Migration Scope<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Limits the migration to specific tenants and tables to avoid moving unnecessary data.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Enter tenant IDs in Tenants to Include or Tenants to Exclude. List tables to skip in Tables to Exclude using comma-separated values.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><td><strong>Field<\/strong><\/td><td><strong>Sample Value<\/strong><\/td><td><strong>Description<\/strong><\/td><\/tr><\/thead><tbody><tr><td>Tenants to Include<\/td><td>1000001<\/td><td>Restricts migration to the listed tenant(s) only<\/td><\/tr><tr><td>Tenants to Exclude<\/td><td>11,12<\/td><td>Migrates all tenants except those listed<\/td><\/tr><tr><td>Tables to Exclude<\/td><td>AD_ChangeLog,AD_Session<\/td><td>Skips listed tables during migration<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 4: Run Validation Before Migration<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Confirms the source data is compatible with the target database schema before any records are copied.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Keep Only Validate Data checked and run the process first. Review the log for errors before unchecking it to perform the actual migration.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><td><strong>Field<\/strong><\/td><td><strong>Sample Value<\/strong><\/td><td><strong>Description<\/strong><\/td><\/tr><\/thead><tbody><tr><td>Only Validate Data<\/td><td>Checked<\/td><td>Runs schema and data checks without copying any records<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 5: Configure ID Handling<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Controls whether original record IDs are kept or replaced, and how unresolved references are handled.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Enter table names in Preserve IDs to keep original IDs. Use Fallback Records when FK not found to define default records for broken references.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><td><strong>Field<\/strong><\/td><td><strong>Sample Value<\/strong><\/td><td><strong>Description<\/strong><\/td><\/tr><\/thead><tbody><tr><td>Preserve IDs<\/td><td>C_UOM<\/td><td>Retains original record IDs for the listed tables<\/td><\/tr><tr><td>Fallback Records when FK not found<\/td><td>Standard<\/td><td>Assigns a fallback record when a foreign key cannot be matched<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 6: Execute the Migration<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Starts the actual data copy once validation passes and all parameters are confirmed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uncheck Only Validate Data, optionally check Run as Job for background execution, then click OK to start the migration.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><td><strong>Field<\/strong><\/td><td><strong>Sample Value<\/strong><\/td><td><strong>Description<\/strong><\/td><\/tr><\/thead><tbody><tr><td>Run as Job<\/td><td>Checked<\/td><td>Executes the process asynchronously as a background job<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Note: <\/strong>Always run with Only Validate Data checked first. A clean validation pass significantly reduces migration failures in production.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Common Issues and Resolutions<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><td><strong>Issue<\/strong><\/td><td><strong>Cause<\/strong><\/td><td><strong>Resolution<\/strong><\/td><\/tr><\/thead><tbody><tr><td>Migration stops at validation<\/td><td>Column length mismatch between source and target<\/td><td>Adjust the target column length or exclude the table<\/td><\/tr><tr><td>Duplicate client error<\/td><td>A tenant with the same Name, Value, or UUID already exists<\/td><td>Rename or remove the existing tenant before retrying<\/td><\/tr><tr><td>Orphan record error<\/td><td>A child record references a missing parent, e.g. Order_ID not found<\/td><td>Fix the source data or exclude the affected table<\/td><\/tr><tr><td>Cross-tenant reference error<\/td><td>A record from one tenant references another tenant&#8217;s data<\/td><td>Correct source data so references stay within one tenant<\/td><\/tr><tr><td>External storage not supported<\/td><td>Attachments or archives are stored outside the database<\/td><td>Move attachments into the database before migration<\/td><\/tr><tr><td>Migration runs slowly<\/td><td>Large log or history tables copied without exclusions<\/td><td>Exclude tables like AD_ChangeLog and AD_Session<\/td><\/tr><tr><td>Sequences out of sync after copy<\/td><td>Document sequences are not refreshed after migration<\/td><td>Manually verify and reset sequence next numbers<\/td><\/tr><tr><td>JDBC connection failure<\/td><td>Incorrect URL, credentials, or restricted network access<\/td><td>Verify the JDBC URL format and database accessibility<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Next Steps<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Configure Document Sequence for the newly migrated or copied tenant.<\/li>\n\n\n\n<li>Review Organization and Warehouse setup for the tenant.<\/li>\n\n\n\n<li>Set up Role and User Access for the new tenant.<\/li>\n\n\n\n<li>Run database compression or vacuum after large migrations.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Learn how to configure the Copy Tenant window in iDempiere to migrate or duplicate retail store tenants, including field setup [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,91],"tags":[],"class_list":["post-22569","post","type-post","status-publish","format-standard","hentry","category-idempiere-product","category-idempiere-general-rules"],"_links":{"self":[{"href":"https:\/\/tenthplanet.in\/idempiere\/wp-json\/wp\/v2\/posts\/22569","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tenthplanet.in\/idempiere\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tenthplanet.in\/idempiere\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tenthplanet.in\/idempiere\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/tenthplanet.in\/idempiere\/wp-json\/wp\/v2\/comments?post=22569"}],"version-history":[{"count":2,"href":"https:\/\/tenthplanet.in\/idempiere\/wp-json\/wp\/v2\/posts\/22569\/revisions"}],"predecessor-version":[{"id":27765,"href":"https:\/\/tenthplanet.in\/idempiere\/wp-json\/wp\/v2\/posts\/22569\/revisions\/27765"}],"wp:attachment":[{"href":"https:\/\/tenthplanet.in\/idempiere\/wp-json\/wp\/v2\/media?parent=22569"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tenthplanet.in\/idempiere\/wp-json\/wp\/v2\/categories?post=22569"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tenthplanet.in\/idempiere\/wp-json\/wp\/v2\/tags?post=22569"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}