{"id":1552,"date":"2026-10-07T16:04:38","date_gmt":"2026-10-07T16:04:38","guid":{"rendered":"https:\/\/www.kingbaseglobal.com\/blog\/tech-blog\/reduce-oracle-licensing-cost-migration-checklist\/"},"modified":"2026-10-07T16:04:38","modified_gmt":"2026-10-07T16:04:38","slug":"reduce-oracle-licensing-cost-migration-checklist","status":"publish","type":"post","link":"https:\/\/www.kingbaseglobal.com\/blog\/tech-blog\/reduce-oracle-licensing-cost-migration-checklist\/","title":{"rendered":"Reduce Oracle Licensing Cost_ Migration Checklist"},"content":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/kingbase-bbs.oss-cn-beijing.aliyuncs.com\/qywx\/blogImage\/2883626b-09b4-4009-bdc2-636b687ab8e1.webp\" alt=\"Empty instruction cards in a workshop rack representing a structured migration checklist\" \/><\/p>\n<h2>Enterprise Reduce Oracle Licensing Cost: Technical Migration Checklist<\/h2>\n<p>Reducing Oracle licensing costs requires a technical strategy that addresses structural licensing metrics, such as processor core factors and virtualization rules, which inflate Total Cost of Ownership (TCO). This checklist provides a structured, executable procedure for migrating to KingbaseES, a commercial database software, focusing on compatibility verification, data integrity, and rollback procedures.<\/p>\n<h3>Prerequisites<\/h3>\n<ul>\n<li><strong>Source Environment:<\/strong> Oracle Database (Version to be verified against KingbaseES compatibility matrix).<\/li>\n<li><strong>Target Environment:<\/strong> KingbaseES V009R002C012 or later (for enhanced Oracle compatibility features).<\/li>\n<li><strong>Access:<\/strong> Administrative privileges on both Oracle and KingbaseES instances.<\/li>\n<li><strong>Backup:<\/strong> Verified full backup of the Oracle source database.<\/li>\n<\/ul>\n<h2>Step-by-Step Migration and Verification Procedure<\/h2>\n<h3>Step 1: Configure Oracle Compatibility Mode<\/h3>\n<p>KingbaseES V009R002C012 enhances Oracle compatibility in SQL, PL\/SQL, and client interfaces. To enable this mode, configure the database instance parameters.<\/p>\n<ol>\n<li>\n<p><strong>Set Compatibility Parameter:<\/strong><br \/>\nExecute the following SQL command to set the compatibility level to Oracle:<\/p>\n<pre><code class=\"language-sql\">ALTER SYSTEM SET compatibility_mode = 'oracle';\n<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>Restart Instance:<\/strong><br \/>\nRestart the KingbaseES instance to apply the configuration changes.<\/p>\n<pre><code class=\"language-bash\"># Example command for service restart\nsystemctl restart kingbasees\n<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>Verify Configuration:<\/strong><br \/>\nCheck the current compatibility setting:<\/p>\n<pre><code class=\"language-sql\">SHOW compatibility_mode;\n<\/code><\/pre>\n<p><em>Expected Output:<\/em> <code>oracle<\/code><\/p>\n<\/li>\n<\/ol>\n<h3>Step 2: Migrate and Validate PL\/SQL Packages<\/h3>\n<p>KingbaseES supports specific PL\/SQL features to minimize refactoring. Verify the following constructs in your source code and target environment.<\/p>\n<ul>\n<li><strong>Nested Tables and VARRAYs:<\/strong> Ensure initialization uses the <code>NEW<\/code> keyword.\n<ul>\n<li><em>Verification:<\/em> Run a test procedure initializing a nested table.<\/li>\n<\/ul>\n<pre><code class=\"language-sql\">-- Example PL\/SQL block for verification\nDECLARE\n  TYPE nested_table_type IS TABLE OF VARCHAR2(100);\n  nt nested_table_type := nested_table_type();\nBEGIN\n  nt := nested_table_type('A', 'B'); -- Verify NEW initialization compatibility\n  DBMS_OUTPUT.PUT_LINE('Nested Table Init OK');\nEND;\n<\/code><\/pre>\n<\/li>\n<li><strong>%ROWTYPE Matching:<\/strong> Verify that stored procedures accepting <code>%ROWTYPE<\/code> parameters execute without type mismatch errors.<\/li>\n<li><strong>DETERMINISTIC Functions:<\/strong> Ensure the <code>DETERMINISTIC<\/code> keyword is declared in the package header.\n<pre><code class=\"language-sql\">-- Verify package header declaration\nCREATE OR REPLACE PACKAGE test_pkg IS\n  FUNCTION calc_value(p_id NUMBER) RETURN NUMBER DETERMINISTIC;\nEND test_pkg;\n<\/code><\/pre>\n<\/li>\n<li><strong>Parallel Execution:<\/strong> Verify <code>PARALLEL_ENABLE<\/code> subclauses allow safe multi-process calls.<\/li>\n<li><strong>Package Capacity:<\/strong> Confirm that packages with up to ~10,000 functions compile successfully.<\/li>\n<\/ul>\n<h3>Step 3: Adapt and Verify SQL Syntax<\/h3>\n<p>Update and verify SQL queries using compatible functions supported in KingbaseES V009R002C012.<\/p>\n<ul>\n<li><strong>String Concatenation:<\/strong> Use <code>CONCAT<\/code> with arbitrary arguments.\n<pre><code class=\"language-sql\">-- Verify flexible CONCAT\nSELECT CONCAT('A', 'B', 'C') FROM dual;\n<\/code><\/pre>\n<\/li>\n<li><strong>Date\/Time Handling:<\/strong> Verify <code>TIMESTAMPADD<\/code> and multi-format <code>TO_TIMESTAMP<\/code>.\n<pre><code class=\"language-sql\">-- Verify TIMESTAMPADD\nSELECT TIMESTAMPADD(HOUR, 1, SYSDATE) FROM dual;\n\n-- Verify Multi-format TO_TIMESTAMP\nSELECT TO_TIMESTAMP('2023-10-27 10:00:00', 'YYYY-MM-DD HH24:MI:SS') FROM dual;\n<\/code><\/pre>\n<\/li>\n<li><strong>List Aggregation:<\/strong> Verify <code>LISTAGG<\/code> with optional <code>WITH GROUP<\/code> clause.\n<pre><code class=\"language-sql\">-- Verify LISTAGG WITH GROUP\nSELECT LISTAGG(column_name, ',') WITHIN GROUP (ORDER BY column_name) FROM table_name;\n<\/code><\/pre>\n<\/li>\n<\/ul>\n<h3>Step 4: Replace and Validate System Views<\/h3>\n<p>Replace Oracle-specific system view queries with KingbaseES equivalents. V009R002C012 supports the following views for migration auditing:<\/p>\n<ul>\n<li><code>V$VERSION<\/code>: Database version information.<\/li>\n<li><code>V$SESSION<\/code>: Active session details.<\/li>\n<li><code>V$LOCKED_OBJECT<\/code>: Current lock status.<\/li>\n<li>Partition Index Views: <code>ALL_PART_INDEXES<\/code>, <code>DBA__PART_INDEXES<\/code>, <code>USER_PART_INDEXES<\/code>.<\/li>\n<\/ul>\n<p><strong>Verification Query:<\/strong><\/p>\n<pre><code class=\"language-sql\">-- Verify system view availability\nSELECT * FROM V$VERSION;\nSELECT * FROM V$SESSION WHERE ROWNUM = 1;\n<\/code><\/pre>\n<h3>Step 5: Data Integrity Verification<\/h3>\n<p>Perform checksum comparisons to ensure data integrity between Oracle and KingbaseES.<\/p>\n<ol>\n<li><strong>Export Oracle Checksums:<\/strong>\n<pre><code class=\"language-sql\">-- Oracle: Generate checksums for a table\nSELECT MD5(TO_CHAR(COL1) || TO_CHAR(COL2)) AS row_checksum\nFROM source_table;\n<\/code><\/pre>\n<\/li>\n<li><strong>Import and Compare in KingbaseES:<\/strong>\n<pre><code class=\"language-sql\">-- KingbaseES: Generate checksums for migrated table\nSELECT MD5(COL1::TEXT || COL2::TEXT) AS row_checksum\nFROM migrated_table;\n<\/code><\/pre>\n<\/li>\n<li><strong>Diff Check:<\/strong> Compare the output sets. Any discrepancy indicates a migration error.<\/li>\n<\/ol>\n<h2>Rollback Procedure<\/h2>\n<p>In case of critical failure, revert to the Oracle environment using the following steps.<\/p>\n<ol>\n<li><strong>Stop KingbaseES Services:<\/strong>\n<pre><code class=\"language-bash\">systemctl stop kingbasees\n<\/code><\/pre>\n<\/li>\n<li><strong>Restore Oracle Database:<\/strong><br \/>\nUse your standard Oracle backup restoration method (e.g., RMAN) to restore the database to the pre-migration state.<\/p>\n<pre><code class=\"language-bash\"># Example RMAN restore command\nrman target \/\nRESTORE DATABASE;\nRECOVER DATABASE;\nALTER DATABASE OPEN RESETLOGS;\n<\/code><\/pre>\n<\/li>\n<li><strong>Verify Oracle Availability:<\/strong><br \/>\nConfirm that Oracle services are running and applications can connect.<\/li>\n<\/ol>\n<h2>Troubleshooting Common Issues<\/h2>\n<ul>\n<li><strong>PL\/SQL Compilation Errors:<\/strong> Check for unsupported Oracle-specific functions. Refer to KingbaseES documentation for the list of supported PL\/SQL features.<\/li>\n<li><strong>Performance Degradation:<\/strong> Analyze execution plans in KingbaseES. Adjust indexes or configuration parameters as needed.<\/li>\n<li><strong>Data Mismatch:<\/strong> Re-run the data integrity verification steps. Check for character set mismatches or data type conversions.<\/li>\n<\/ul>\n<h2>FAQ<\/h2>\n<h3>How do I enable Oracle compatibility mode in KingbaseES?<\/h3>\n<p>Set the <code>compatibility_mode<\/code> parameter to <code>'oracle'<\/code> using <code>ALTER SYSTEM<\/code> and restart the instance. This aligns the SQL parser and PL\/SQL engine with Oracle\u2019s behavior.<\/p>\n<h3>What specific SQL commands verify data integrity during migration?<\/h3>\n<p>Use checksum functions like <code>MD5<\/code> or <code>CHECKSUM<\/code> on both Oracle and KingbaseES to compare row-level data. Example: <code>SELECT MD5(COL1::TEXT || COL2::TEXT) FROM table_name;<\/code><\/p>\n<h3>What is the rollback procedure if migration fails?<\/h3>\n<p>Stop KingbaseES services, restore the Oracle database from the pre-migration backup using RMAN or similar tools, and verify Oracle availability.<\/p>\n<h3>Does KingbaseES support Oracle system views for migration auditing?<\/h3>\n<p>Yes, KingbaseES V009R002C012 supports views such as <code>V$VERSION<\/code>, <code>V$SESSION<\/code>, <code>V$LOCKED_OBJECT<\/code>, and partition index views (<code>ALL_PART_INDEXES<\/code>, <code>DBA__PART_INDEXES<\/code>, <code>USER_PART_INDEXES<\/code>).<\/p>\n<h3>How does KingbaseES handle PL\/SQL nested tables and VARRAYs?<\/h3>\n<p>KingbaseES supports initialization of nested tables and VARRAYs using the <code>NEW<\/code> keyword, matching Oracle\u2019s collection variable initialization syntax.<\/p>\n<hr \/>\n<p><strong>\ud83d\udca1 More Resources<\/strong><\/p>\n<p>If you would like to dive deeper into KingbaseES and its application practices across various industries, we have compiled the following official resources to help you get started quickly and develop and operate with efficiency:<\/p>\n<ul>\n<li><a href=\"https:\/\/bbs.kingbase.com.cn\/\">Kingbase Community<\/a>: A one-stop interactive platform for technical exchanges, Q&amp;A, and experience sharing\u2014join forces with fellow DBAs and developers.<\/li>\n<li><a href=\"https:\/\/www.kingbaseglobal.com\/Solution-Oracle.html\">Kingbase Solutions<\/a>: One-stop full-stack database migration and cloud-native solutions, supporting smooth migration of multi-source heterogeneous data, ensuring high availability, real-time integration, and sustained high performance.<\/li>\n<li><a href=\"https:\/\/www.kingbaseglobal.com\/Customers.html\">Kingbase Case Studies<\/a>: Real-world user scenarios and implementation outcomes, showcasing KingbaseES&#8217;s outstanding capabilities in high availability, high performance, and IT adaptation.<\/li>\n<li><a href=\"https:\/\/docs.kingbase.com.cn\/en\">Kingbase Documentation<\/a>: Authoritative and comprehensive product manuals and technical guides, covering the entire lifecycle from installation and deployment to development, programming, and operations management.<\/li>\n<li><a href=\"https:\/\/www.kingbaseglobal.com\/Download.html\">Free Download<\/a>: Get the latest installation packages, drivers, tools, and patches, supporting multiple platforms and domestic chip architectures.<\/li>\n<li><a href=\"https:\/\/www.kingbaseglobal.com\/blog\/\">Digital Construction Encyclopedia<\/a>: Covers digital strategy planning, data integration, metrics management, database visualization applications, and more to empower enterprise digital transformation.<\/li>\n<\/ul>\n<p><strong>Open Source Resources:<\/strong><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/hgsandy\/Kingbase-docs\">GitHub &#8211; Kingbase-docs<\/a>: Kingbase documentation open-source repository\u2014Stars and contributions are welcome.<\/li>\n<li><a href=\"https:\/\/gitee.com\/hgsandy\/kingbase-docs\">Gitee &#8211; Kingbase-docs<\/a>: Domestic mirror repository for Kingbase documentation for faster access.<\/li>\n<\/ul>\n<p>Welcome to explore the resources above and begin your Kingbase journey!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Enterprise Reduce Oracle Licensing Cost: Technical Migration Checklist Reducing Oracle licensing costs requires a technical strategy that addresses structural licensing metrics, such as processor core factors and virtualization rules, which&#8230;<\/p>\n","protected":false},"author":1239,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"meta_description":"","_kingbase_seo_description":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-1552","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.kingbaseglobal.com\/blog\/wp-json\/wp\/v2\/posts\/1552","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kingbaseglobal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kingbaseglobal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kingbaseglobal.com\/blog\/wp-json\/wp\/v2\/users\/1239"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kingbaseglobal.com\/blog\/wp-json\/wp\/v2\/comments?post=1552"}],"version-history":[{"count":0,"href":"https:\/\/www.kingbaseglobal.com\/blog\/wp-json\/wp\/v2\/posts\/1552\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.kingbaseglobal.com\/blog\/wp-json\/wp\/v2\/media?parent=1552"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kingbaseglobal.com\/blog\/wp-json\/wp\/v2\/categories?post=1552"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kingbaseglobal.com\/blog\/wp-json\/wp\/v2\/tags?post=1552"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}