Labels: enhancement, data-source, backend, frontend
Milestone: Q1 2026
Estimated Effort: 5 weeks (120 hours)
Priority: High
📋 Overview
Add Oracle database support to the Data Research Analysis platform, enabling users to connect Oracle 11g+ instances as data sources alongside existing PostgreSQL, MySQL, and MariaDB support.
🎯 Objectives
- Enable users to connect to Oracle databases via the UI
- Support schema introspection and table/column metadata retrieval
- Implement Oracle-to-PostgreSQL data type mappings
- Support data model building from Oracle tables
- Enable cross-source joins with Oracle data sources
- Maintain encryption and security standards
📝 Problem Statement
Users currently cannot connect Oracle databases to the platform, limiting adoption in enterprise environments where Oracle is prevalent. This feature will:
- Expand market reach to Oracle-heavy enterprises
- Enable comprehensive data analysis across heterogeneous database environments
- Maintain architectural consistency with existing SQL database drivers
🏗️ Technical Approach
Follow the established architectural patterns used for PostgreSQL, MySQL, and MariaDB:
- Singleton Processor Pattern: Business logic in processors
- TypeORM Integration: Use TypeORM's Oracle driver (
oracledb)
- Automatic Encryption: Leverage existing
connectionDetailsTransformer
- Factory Pattern: Extend
DBDriver.getDriver() for Oracle
- SSR Compatibility: Frontend guards for browser APIs
✅ Implementation Checklist
Phase 1: Backend Core (Week 1)
Type System
Driver Implementation
Factory Updates
Phase 2: Service Layer (Week 1-2)
Utility Service
Data Source Processor
Phase 3: Database Migration (Week 2)
Phase 4: Frontend Implementation (Week 2-3)
Connection Page
UI Integration
Phase 5: Testing (Week 3)
Unit Tests
Integration Tests
E2E Tests
Frontend Tests
Phase 6: Dependencies & Docker (Week 3-4)
NPM Dependencies
Docker Configuration
Phase 7: Documentation (Week 4)
Phase 8: Final Validation (Week 4-5)
📊 Acceptance Criteria
Functional Requirements
- ✅ Users can connect to Oracle databases via the UI
- ✅ Connection test validates Oracle credentials successfully
- ✅ Tables and columns are correctly retrieved from Oracle schemas
- ✅ Foreign key relationships are detected and displayed
- ✅ Oracle data types are correctly mapped to PostgreSQL equivalents
- ✅ Credentials are encrypted in the database using existing transformer
- ✅ Data models can be built from Oracle data sources
- ✅ Cross-source joins work with Oracle tables
- ✅ Schema names are validated and sanitized
Non-Functional Requirements
- ✅ No breaking changes to existing PostgreSQL/MySQL/MariaDB functionality
- ✅ All existing tests pass (backend: 31+ tests, frontend: 31+ SSR tests)
- ✅ Code coverage remains >80% (backend)
- ✅ SSR compatibility maintained (frontend)
- ✅ Connection pooling properly configured (2-10 connections)
- ✅ Performance comparable to other SQL drivers (<5s connection time)
- ✅ Security standards maintained (encryption, injection prevention)
- ✅ Code follows singleton processor pattern consistently
- ✅ TypeScript ES modules with
.js extensions
- ✅ Documentation is complete and accurate
🗂️ Files to Create/Modify
New Files (7)
backend/src/drivers/OracleDriver.ts (~150 lines)
backend/src/datasources/OracleDataSource.ts (~30 lines)
backend/src/migrations/YYYYMMDDHHMMSS-AddOracleDataSourceType.ts (~20 lines)
frontend/pages/projects/[projectid]/data-sources/connect/oracle.vue (~280 lines)
frontend/assets/images/oracle.png (image file)
documentation/oracle-data-source-guide.md (user guide)
backend/src/__tests__/drivers/OracleDriver.test.ts (~100 lines)
Modified Files (9)
backend/src/types/EDataSourceType.ts (add enum value)
backend/src/models/DRADataSource.ts (add enum value)
backend/src/drivers/DBDriver.ts (add Oracle case)
backend/src/services/UtilityService.ts (add type conversions)
backend/src/processors/DataSourceProcessor.ts (add Oracle to conditionals)
frontend/pages/projects/[projectid]/data-sources/[datasourceid]/index.vue (add icon)
backend/package.json (add oracledb dependency)
docker/backend/Dockerfile (add Oracle Instant Client)
README.md (update supported databases list)
🔍 Technical Details
Oracle Connection Parameters
{
type: "oracle",
host: "oracle.example.com",
port: 1521,
username: "app_user",
password: "secure_password",
sid: "ORCL", // OR serviceName: "xepdb1"
schema: "APP_USER", // Oracle schema (typically username)
}
Oracle Data Type Mappings
| Oracle Type |
PostgreSQL Type |
Notes |
| VARCHAR2(n) |
VARCHAR(n) |
Variable-length string |
| NUMBER |
NUMERIC |
Decimal number |
| NUMBER(*,0) |
INTEGER |
Whole number |
| CLOB |
TEXT |
Large text |
| BLOB |
BYTEA |
Binary large object |
| DATE |
TIMESTAMP |
Date with time |
| TIMESTAMP |
TIMESTAMP |
High-precision timestamp |
| RAW(n) |
BYTEA |
Binary data |
| BINARY_FLOAT |
REAL |
32-bit float |
| BINARY_DOUBLE |
DOUBLE PRECISION |
64-bit float |
Oracle System Catalog Queries
Tables & Columns:
SELECT
tc.TABLE_NAME AS table_name,
tc.COLUMN_NAME AS column_name,
tc.DATA_TYPE AS data_type,
tc.DATA_LENGTH AS character_maximum_length
FROM ALL_TAB_COLUMNS tc
JOIN ALL_TABLES t ON tc.TABLE_NAME = t.TABLE_NAME AND tc.OWNER = t.OWNER
WHERE tc.OWNER = 'SCHEMA_NAME'
ORDER BY tc.TABLE_NAME, tc.COLUMN_ID
Foreign Keys:
SELECT
ac.CONSTRAINT_NAME AS constraint_name,
ac.TABLE_NAME AS local_table_name,
acc.COLUMN_NAME AS local_column_name,
r_ac.TABLE_NAME AS foreign_table_name,
r_acc.COLUMN_NAME AS foreign_column_name
FROM ALL_CONSTRAINTS ac
JOIN ALL_CONS_COLUMNS acc ON ac.CONSTRAINT_NAME = acc.CONSTRAINT_NAME
JOIN ALL_CONSTRAINTS r_ac ON ac.R_CONSTRAINT_NAME = r_ac.CONSTRAINT_NAME
JOIN ALL_CONS_COLUMNS r_acc ON r_ac.CONSTRAINT_NAME = r_acc.CONSTRAINT_NAME
WHERE ac.CONSTRAINT_TYPE = 'R' AND ac.OWNER = 'SCHEMA_NAME'
⚠️ Risks & Mitigation
High Risk: Oracle Instant Client Installation
- Risk: Complex system dependency, platform-specific binaries
- Mitigation: Document thoroughly, provide pre-configured Docker image
- Alternative: Use Oracle Cloud Free Tier with managed connections
Medium Risk: Enum Migration Irreversibility
- Risk: PostgreSQL enum values cannot be easily removed
- Mitigation: Test extensively in dev/staging, backup before production
- Rollback: Manual procedure documented (drop data, recreate enum)
Medium Risk: Type Conversion Edge Cases
- Risk: Oracle has unique types (XMLTYPE, LONG, ROWID) that may not map cleanly
- Mitigation: Comprehensive test coverage, handle unknown types as TEXT
- Monitoring: Log unmapped types for future enhancement
Low Risk: Connection Timeout
- Risk: Oracle connections may be slower than PostgreSQL/MySQL
- Mitigation: Increase timeout to 60s, implement retry logic
- Monitoring: Track connection times, alert on anomalies
📅 Timeline
| Week |
Phase |
Deliverables |
| 1 |
Backend Core + Migration |
OracleDriver, OracleDataSource, enum migration |
| 2 |
Service Layer + Frontend Start |
UtilityService updates, oracle.vue page |
| 3 |
Testing + Docker |
Unit/integration tests, Docker config |
| 4 |
Documentation + Validation |
User guide, code review, security audit |
| 5 |
Final Testing + Deployment |
UAT, performance testing, production prep |
Total Estimated Effort: 5 weeks (1 FTE senior developer)
🔗 References
🎨 Related Issues
- #XXX - MySQL Data Source Implementation (completed)
- #XXX - MariaDB Data Source Implementation (completed)
- #XXX - MongoDB Data Source Implementation (completed)
- #XXX - Cross-Source Join Feature (related)
👥 Assignee
TBD - Senior Backend Developer with Oracle experience preferred
🏷️ Definition of Done
Estimated Story Points: 21
Complexity: High
Business Value: High
Technical Debt: None (follows existing patterns)
Labels:
enhancement,data-source,backend,frontendMilestone: Q1 2026
Estimated Effort: 5 weeks (120 hours)
Priority: High
📋 Overview
Add Oracle database support to the Data Research Analysis platform, enabling users to connect Oracle 11g+ instances as data sources alongside existing PostgreSQL, MySQL, and MariaDB support.
🎯 Objectives
📝 Problem Statement
Users currently cannot connect Oracle databases to the platform, limiting adoption in enterprise environments where Oracle is prevalent. This feature will:
🏗️ Technical Approach
Follow the established architectural patterns used for PostgreSQL, MySQL, and MariaDB:
oracledb)connectionDetailsTransformerDBDriver.getDriver()for Oracle✅ Implementation Checklist
Phase 1: Backend Core (Week 1)
Type System
ORACLE = 'oracle'toEDataSourceTypeenum (backend/src/types/EDataSourceType.ts)DRADataSourcemodel enum to include Oracle (backend/src/models/DRADataSource.ts)Driver Implementation
OracleDataSource.tssingleton factory class (backend/src/datasources/OracleDataSource.ts)getDataSource()method with Oracle-specific configurationOracleDriver.tsimplementingIDBDriverinterface (backend/src/drivers/OracleDriver.ts)initialize(),getConcreteDriver(),query(),close()connectExternalDB()for external Oracle connectionsgetTablesColumnDetails()using Oracle system catalog (ALL_TAB_COLUMNS)getTablesRelationships()using Oracle constraints (ALL_CONSTRAINTS)Factory Updates
DBDriver.getDriver()factory method (backend/src/drivers/DBDriver.ts)OracleDriverinDBDriver.tsPhase 2: Service Layer (Week 1-2)
Utility Service
'oracle'case togetDataSourceType()method (backend/src/services/UtilityService.ts)parseOracleDataType()helper methodmapOracleToPostgreSQL()type conversion methodconvertDataTypeToPostgresDataType()to handle Oracle typesData Source Processor
getTablesFromDataSource()to include Oracle in conditional checkconnectToDataSource()handles Oracle (should work generically)addDataSource()handles Oracle (should work generically)Phase 3: Database Migration (Week 2)
npm run migration:generate -- --name=AddOracleDataSourceTypeALTER TYPE ... ADD VALUE IF NOT EXISTS 'oracle'npm run migration:runSELECT enum_range(NULL::dra_data_sources_data_type_enum);Phase 4: Frontend Implementation (Week 2-3)
Connection Page
oracle.vueconnection page (frontend/pages/projects/[projectid]/data-sources/connect/oracle.vue)mysql.vue1521testConnection()withdata_source_type: "oracle"connectDataSource()with proper API callsimport.meta.client) for browser APIsUI Integration
frontend/assets/images/oracle.png)frontend/pages/projects/[projectid]/data-sources/[datasourceid]/index.vue)oracleImage'oracle': oracleImage'oracle'Phase 5: Testing (Week 3)
Unit Tests
OracleDriver.test.ts(backend/src/__tests__/drivers/OracleDriver.test.ts)getTablesColumnDetails())getTablesRelationships())UtilityServiceOracle tests (backend/src/__tests__/services/UtilityService.test.ts)parseOracleDataType()with various typesmapOracleToPostgreSQL()conversionsIntegration Tests
data-source-operations.integration.test.tsdata-source-oracle.integration.test.tsdata-source-lifecycle.test.tswith Oracle test caseE2E Tests
data-source-lifecycle.test.tsFrontend Tests
ssr-compatibility.nuxt.test.tsnpm run validate:ssrand verify no SSR breaksPhase 6: Dependencies & Docker (Week 3-4)
NPM Dependencies
"oracledb": "^6.3.0"tobackend/package.jsonnpm installin backend directoryoracledbinstalls successfullyDocker Configuration
libaio1system dependencyLD_LIBRARY_PATHenvironment variabledocker-compose build backenddocker-compose.ymlPhase 7: Documentation (Week 4)
oracle-data-source-guide.mduser documentationREADME.mdto list Oracle in supported data sourcescomprehensive-architecture-documentation.mdwith Oracle driver details.envexample)Phase 8: Final Validation (Week 4-5)
.jsextensions)cd backend && npm test(all tests pass)cd backend && npm run test:coverage(>80% coverage)cd frontend && npm test(all tests pass)cd frontend && npm run validate:ssr(all checks pass)📊 Acceptance Criteria
Functional Requirements
Non-Functional Requirements
.jsextensions🗂️ Files to Create/Modify
New Files (7)
backend/src/drivers/OracleDriver.ts(~150 lines)backend/src/datasources/OracleDataSource.ts(~30 lines)backend/src/migrations/YYYYMMDDHHMMSS-AddOracleDataSourceType.ts(~20 lines)frontend/pages/projects/[projectid]/data-sources/connect/oracle.vue(~280 lines)frontend/assets/images/oracle.png(image file)documentation/oracle-data-source-guide.md(user guide)backend/src/__tests__/drivers/OracleDriver.test.ts(~100 lines)Modified Files (9)
backend/src/types/EDataSourceType.ts(add enum value)backend/src/models/DRADataSource.ts(add enum value)backend/src/drivers/DBDriver.ts(add Oracle case)backend/src/services/UtilityService.ts(add type conversions)backend/src/processors/DataSourceProcessor.ts(add Oracle to conditionals)frontend/pages/projects/[projectid]/data-sources/[datasourceid]/index.vue(add icon)backend/package.json(add oracledb dependency)docker/backend/Dockerfile(add Oracle Instant Client)README.md(update supported databases list)🔍 Technical Details
Oracle Connection Parameters
Oracle Data Type Mappings
Oracle System Catalog Queries
Tables & Columns:
Foreign Keys:
High Risk: Oracle Instant Client Installation
Medium Risk: Enum Migration Irreversibility
Medium Risk: Type Conversion Edge Cases
Low Risk: Connection Timeout
📅 Timeline
Total Estimated Effort: 5 weeks (1 FTE senior developer)
🔗 References
🎨 Related Issues
👥 Assignee
TBD - Senior Backend Developer with Oracle experience preferred
🏷️ Definition of Done
Estimated Story Points: 21
Complexity: High
Business Value: High
Technical Debt: None (follows existing patterns)