diff --git a/proxmox/lxc108-oracle/roa-windows-setup/scripts/01-setup-database.ps1 b/proxmox/lxc108-oracle/roa-windows-setup/scripts/01-setup-database.ps1 index 7862e68..643e6c9 100644 --- a/proxmox/lxc108-oracle/roa-windows-setup/scripts/01-setup-database.ps1 +++ b/proxmox/lxc108-oracle/roa-windows-setup/scripts/01-setup-database.ps1 @@ -57,6 +57,12 @@ param( [Parameter(Mandatory = $false)] [string]$ServiceName, + [Parameter(Mandatory = $false)] + [string]$DbHost, + + [Parameter(Mandatory = $false)] + [int]$Port = 1521, + [Parameter(Mandatory = $false)] [string]$SystemPassword = "romfastsoft", @@ -75,6 +81,20 @@ param( $ErrorActionPreference = 'Stop' +# Load config.ps1 if exists (provides defaults) +$configPath = Join-Path (Split-Path $PSScriptRoot -Parent) "config.ps1" +if (Test-Path $configPath) { + . $configPath + # Use config values if parameters not provided + if (-not $OracleHome -and $ORACLE_HOME) { $OracleHome = $ORACLE_HOME } + if (-not $ServiceName -and $SERVICE_NAME) { $ServiceName = $SERVICE_NAME } + if (-not $DbHost -and $DB_HOST) { $DbHost = $DB_HOST } + if (-not $Port -and $DB_PORT) { $Port = $DB_PORT } + if ($SystemPassword -eq "romfastsoft" -and $SYSTEM_PASSWORD) { $SystemPassword = $SYSTEM_PASSWORD } + if ($ContafinPassword -eq "ROMFASTSOFT" -and $CONTAFIN_PASSWORD) { $ContafinPassword = $CONTAFIN_PASSWORD } + if (-not $DatafileDir -and $DATAFILE_DIR) { $DatafileDir = $DATAFILE_DIR } +} + # Source library functions . "$PSScriptRoot\lib\logging-functions.ps1" . "$PSScriptRoot\lib\oracle-functions.ps1" @@ -98,7 +118,7 @@ try { # First try to connect to XE to check CDB status try { - $version = Get-OracleVersion -OracleHome $oraHome -ServiceName "XE" -Password $SystemPassword + $version = Get-OracleVersion -OracleHome $oraHome -ServiceName "XE" -DbHost $DbHost -Port $Port -Password $SystemPassword if ($version.IsCDB) { $ServiceName = "XEPDB1" Write-Log "Detected CDB installation, using PDB: XEPDB1" @@ -111,7 +131,7 @@ try { catch { # Try ROA as fallback try { - $null = Test-OracleConnection -OracleHome $oraHome -ServiceName "ROA" -Password $SystemPassword + $null = Test-OracleConnection -OracleHome $oraHome -ServiceName "ROA" -DbHost $DbHost -Port $Port -Password $SystemPassword $ServiceName = "ROA" Write-Log "Using existing service: ROA" } @@ -123,22 +143,25 @@ try { } Write-LogSuccess "Service Name: $ServiceName" + if ($DbHost) { + Write-Log "Database Host: ${DbHost}:${Port}" + } # Step 3: Test connection Write-Log "Testing database connection..." - if (-not (Test-OracleConnection -OracleHome $oraHome -ServiceName $ServiceName -Password $SystemPassword)) { - throw "Cannot connect to database. Please verify ServiceName and SystemPassword." + if (-not (Test-OracleConnection -OracleHome $oraHome -ServiceName $ServiceName -DbHost $DbHost -Port $Port -Password $SystemPassword)) { + throw "Cannot connect to database. Please verify ServiceName, Host and SystemPassword." } Write-LogSuccess "Database connection successful" # Get version info - $versionInfo = Get-OracleVersion -OracleHome $oraHome -ServiceName $ServiceName -Password $SystemPassword + $versionInfo = Get-OracleVersion -OracleHome $oraHome -ServiceName $ServiceName -DbHost $DbHost -Port $Port -Password $SystemPassword Write-Log "Oracle Version: $($versionInfo.Version)" Write-Log "Oracle Edition: $($versionInfo.Edition)" Write-Log "CDB Mode: $($versionInfo.IsCDB)" # Check container info - $containerInfo = Test-PDB -OracleHome $oraHome -ServiceName $ServiceName -Password $SystemPassword + $containerInfo = Test-PDB -OracleHome $oraHome -ServiceName $ServiceName -DbHost $DbHost -Port $Port -Password $SystemPassword Write-Log "Container: $($containerInfo.ContainerName)" if ($containerInfo.IsPDB) { Write-Log "Connected to PDB (Pluggable Database)" @@ -165,7 +188,7 @@ SELECT 'PROFILE_CONFIGURED' FROM dual; EXIT; "@ - $result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName ` + $result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName -DbHost $DbHost -Port $Port ` -Username "SYS" -Password $SystemPassword -SqlCommand $profileSql -AsSysdba if ($result -match "PROFILE_CONFIGURED") { @@ -286,7 +309,7 @@ SELECT 'TS_EXISTS' FROM dba_tablespaces WHERE tablespace_name = 'ROA'; EXIT; "@ - $tsResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName ` + $tsResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName -DbHost $DbHost -Port $Port ` -Username "SYSTEM" -Password $SystemPassword -SqlCommand $checkTsSql -Silent if ($tsResult -match "TS_EXISTS") { @@ -309,7 +332,7 @@ SELECT 'TS_CREATED' FROM dual; EXIT; "@ - $result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName ` + $result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName -DbHost $DbHost -Port $Port ` -Username "SYSTEM" -Password $SystemPassword -SqlCommand $createTsSql if ($result -match "TS_CREATED") { @@ -339,7 +362,7 @@ COMMIT; SELECT 'PWD_UPDATED' FROM dual; EXIT; "@ - $result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName ` + $result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName -DbHost $DbHost -Port $Port ` -Username "SYSTEM" -Password $SystemPassword -SqlCommand $updatePwdSql -Silent if ($result -match "PWD_UPDATED") { @@ -382,7 +405,7 @@ SELECT 'USER_CREATED' FROM dual; EXIT; "@ - $result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName ` + $result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName -DbHost $DbHost -Port $Port ` -Username "SYSTEM" -Password $SystemPassword -SqlCommand $createUserSql if ($result -match "USER_CREATED") { @@ -402,7 +425,7 @@ SELECT privilege FROM dba_sys_privs WHERE grantee = 'CONTAFIN_ORACLE' ORDER BY p EXIT; "@ - $privileges = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName ` + $privileges = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName -DbHost $DbHost -Port $Port ` -Username "SYSTEM" -Password $SystemPassword -SqlCommand $verifyUserSql -Silent Write-Log "CONTAFIN_ORACLE privileges verified" @@ -432,7 +455,7 @@ SELECT 'PWD_RESET_DONE' FROM DUAL; EXIT; "@ - $result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName ` + $result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName -DbHost $DbHost -Port $Port ` -Username "SYSTEM" -Password $SystemPassword -SqlCommand $resetPwdSql if ($result -match "PWD_RESET_DONE") { @@ -449,7 +472,7 @@ EXIT; # Summary Write-LogSection "Setup Complete" Write-LogSuccess "Database initial setup completed successfully!" - Write-Log "" + Write-Host "" Write-Log "Summary:" Write-Log " Oracle Home: $oraHome" Write-Log " Service Name: $ServiceName" @@ -461,7 +484,7 @@ EXIT; if (-not $SkipSqlnetConfig) { Write-Log " Old Client Auth: Enabled (sqlnet.ora + 10G verifier)" } - Write-Log "" + Write-Host "" Write-Log "Next steps:" Write-Log " 1. Run 02-create-sys-objects.ps1 to install SYS objects" Write-Log " 2. Run 03-import-contafin.ps1 to import CONTAFIN_ORACLE schema" diff --git a/proxmox/lxc108-oracle/roa-windows-setup/scripts/lib/oracle-functions.ps1 b/proxmox/lxc108-oracle/roa-windows-setup/scripts/lib/oracle-functions.ps1 index ee7b73c..de1e25b 100644 --- a/proxmox/lxc108-oracle/roa-windows-setup/scripts/lib/oracle-functions.ps1 +++ b/proxmox/lxc108-oracle/roa-windows-setup/scripts/lib/oracle-functions.ps1 @@ -131,6 +131,12 @@ function Get-OracleVersion { [Parameter(Mandatory = $true)] [string]$ServiceName, + [Parameter(Mandatory = $false)] + [string]$DbHost, + + [Parameter(Mandatory = $false)] + [int]$Port = 1521, + [Parameter(Mandatory = $false)] [string]$Username = "SYSTEM", @@ -149,6 +155,7 @@ EXIT; "@ $result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName ` + -DbHost $DbHost -Port $Port ` -Username $Username -Password $Password -SqlCommand $sql -Silent $versionInfo = [PSCustomObject]@{ @@ -201,6 +208,12 @@ function Get-ServiceName { [Parameter(Mandatory = $false)] [string]$OracleHome, + [Parameter(Mandatory = $false)] + [string]$DbHost, + + [Parameter(Mandatory = $false)] + [int]$Port = 1521, + [Parameter(Mandatory = $true)] [string]$SystemPassword ) @@ -210,6 +223,7 @@ function Get-ServiceName { # First try to connect to XE and check if it's CDB try { $version = Get-OracleVersion -OracleHome $oraHome -ServiceName "XE" ` + -DbHost $DbHost -Port $Port ` -Password $SystemPassword -ErrorAction Stop if ($version.IsCDB) { @@ -224,6 +238,7 @@ function Get-ServiceName { # Try ROA as service name try { $null = Test-OracleConnection -OracleHome $oraHome -ServiceName "ROA" ` + -DbHost $DbHost -Port $Port ` -Username "SYSTEM" -Password $SystemPassword -ErrorAction Stop return "ROA" } @@ -270,6 +285,12 @@ function Test-OracleConnection { [Parameter(Mandatory = $true)] [string]$ServiceName, + [Parameter(Mandatory = $false)] + [string]$DbHost, + + [Parameter(Mandatory = $false)] + [int]$Port = 1521, + [Parameter(Mandatory = $false)] [string]$Username = "SYSTEM", @@ -286,6 +307,7 @@ function Test-OracleConnection { try { $result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName ` + -DbHost $DbHost -Port $Port ` -Username $Username -Password $Password -SqlCommand $sql -AsSysdba:$AsSysdba -Silent return $result -match "CONNECTED" @@ -330,6 +352,12 @@ function Test-PDB { [Parameter(Mandatory = $true)] [string]$ServiceName, + [Parameter(Mandatory = $false)] + [string]$DbHost, + + [Parameter(Mandatory = $false)] + [int]$Port = 1521, + [Parameter(Mandatory = $false)] [string]$Username = "SYSTEM", @@ -347,6 +375,7 @@ EXIT; "@ $result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName ` + -DbHost $DbHost -Port $Port ` -Username $Username -Password $Password -SqlCommand $sql -Silent $containerInfo = [PSCustomObject]@{ @@ -428,6 +457,12 @@ function Invoke-SqlPlus { [Parameter(Mandatory = $true)] [string]$ServiceName, + [Parameter(Mandatory = $false)] + [string]$DbHost, + + [Parameter(Mandatory = $false)] + [int]$Port = 1521, + [Parameter(Mandatory = $false)] [string]$Username = "SYSTEM", @@ -454,9 +489,13 @@ function Invoke-SqlPlus { throw "SQL*Plus not found at: $sqlplus" } - # Build connection string + # Build connection string (EZConnect format if DbHost is provided) $sysdba = if ($AsSysdba) { " as sysdba" } else { "" } - $connString = "$Username/`"$Password`"@$ServiceName$sysdba" + if ($DbHost) { + $connString = "$Username/`"$Password`"@${DbHost}:${Port}/${ServiceName}$sysdba" + } else { + $connString = "$Username/`"$Password`"@$ServiceName$sysdba" + } $tempFile = $null diff --git a/proxmox/lxc108-oracle/roa-windows-setup/sql/sys-updates/README.md b/proxmox/lxc108-oracle/roa-windows-setup/sql/sys-updates/README.md new file mode 100644 index 0000000..6cd2ac2 --- /dev/null +++ b/proxmox/lxc108-oracle/roa-windows-setup/sql/sys-updates/README.md @@ -0,0 +1,61 @@ +# SYS Updates Folder + +This folder is for **future patches and updates only**, not for initial setup. + +## Important Note + +The initial SYS objects (AUTH_PACK, NEWSCHEMA, EXECUTESCRIPTOS, etc.) are already +consolidated in `../sys-objects.sql`. You do NOT need to copy the old individual +scripts (`sys_2006_*.sql` through `sys_2026_*.sql`) here. + +**Initial setup order:** +1. `sys-objects.sql` - Creates all SYS objects (tables, packages, procedures, views) +2. Import `CONTAFIN_ORACLE.dmp` - Application schema +3. `sys-grants.sql` - Grants and public synonyms +4. `sys-updates/*.sql` - (Optional) Post-install patches + +## When to Use This Folder + +Place scripts here when you need to: +- Add new grants or privileges after initial setup +- Patch AUTH_PACK or other SYS objects +- Add new SYS procedures/functions +- Fix issues discovered after deployment + +## Naming Convention + +Use date-based naming for proper ordering: +``` +YYYY_MM_DD_##_DESCRIPTION.sql +``` + +Examples: +- `2026_02_15_01_AUTH_PACK_FIX.sql` +- `2026_03_01_01_NEW_GRANT.sql` + +## How Scripts Are Executed + +1. The `run-sys-updates.sql` master script executes all `.sql` files in this folder +2. Scripts run in alphabetical order (hence the date prefix) +3. Each script should be idempotent (safe to run multiple times) + +## Template + +```sql +-- ============================================================================ +-- YYYY_MM_DD_##_DESCRIPTION +-- ============================================================================ +-- Author: Your Name +-- Date: YYYY-MM-DD +-- Description: What this script does +-- ============================================================================ + +SET SERVEROUTPUT ON +WHENEVER SQLERROR CONTINUE + +-- Your SQL here + +-- Update version tracking (optional) +-- EXEC CONTAFIN_ORACLE.PACK_MIGRARE.UpdateVersiune('sys_YYYY_MM_DD_##_DESCRIPTION','','SYS'); +-- COMMIT; +```