Fix PowerShell $Host reserved variable conflict in ROA setup scripts

- Rename $Host parameter to $DbHost in oracle-functions.ps1 (Invoke-SqlPlus,
  Test-OracleConnection, Get-OracleVersion, Test-PDB, Get-ServiceName)
- Update all function calls in 01-setup-database.ps1 to use -DbHost instead of -Host
- Fix ${Host} -> ${DbHost} in log message (line 147)
- Fix Write-Log "" -> Write-Host "" to avoid empty string parameter error
- Add DbHost/Port parameters and config.ps1 support to setup script
- Update sys-updates/README.md to clarify folder is for future patches only

Tested successfully on ROACENTRAL (10.0.20.130) with Oracle XE 21c.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Marius
2026-01-28 18:30:31 +02:00
parent a74d93f3ac
commit 498025160e
3 changed files with 140 additions and 17 deletions

View File

@@ -57,6 +57,12 @@ param(
[Parameter(Mandatory = $false)] [Parameter(Mandatory = $false)]
[string]$ServiceName, [string]$ServiceName,
[Parameter(Mandatory = $false)]
[string]$DbHost,
[Parameter(Mandatory = $false)]
[int]$Port = 1521,
[Parameter(Mandatory = $false)] [Parameter(Mandatory = $false)]
[string]$SystemPassword = "romfastsoft", [string]$SystemPassword = "romfastsoft",
@@ -75,6 +81,20 @@ param(
$ErrorActionPreference = 'Stop' $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 # Source library functions
. "$PSScriptRoot\lib\logging-functions.ps1" . "$PSScriptRoot\lib\logging-functions.ps1"
. "$PSScriptRoot\lib\oracle-functions.ps1" . "$PSScriptRoot\lib\oracle-functions.ps1"
@@ -98,7 +118,7 @@ try {
# First try to connect to XE to check CDB status # First try to connect to XE to check CDB status
try { 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) { if ($version.IsCDB) {
$ServiceName = "XEPDB1" $ServiceName = "XEPDB1"
Write-Log "Detected CDB installation, using PDB: XEPDB1" Write-Log "Detected CDB installation, using PDB: XEPDB1"
@@ -111,7 +131,7 @@ try {
catch { catch {
# Try ROA as fallback # Try ROA as fallback
try { 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" $ServiceName = "ROA"
Write-Log "Using existing service: ROA" Write-Log "Using existing service: ROA"
} }
@@ -123,22 +143,25 @@ try {
} }
Write-LogSuccess "Service Name: $ServiceName" Write-LogSuccess "Service Name: $ServiceName"
if ($DbHost) {
Write-Log "Database Host: ${DbHost}:${Port}"
}
# Step 3: Test connection # Step 3: Test connection
Write-Log "Testing database connection..." Write-Log "Testing database connection..."
if (-not (Test-OracleConnection -OracleHome $oraHome -ServiceName $ServiceName -Password $SystemPassword)) { if (-not (Test-OracleConnection -OracleHome $oraHome -ServiceName $ServiceName -DbHost $DbHost -Port $Port -Password $SystemPassword)) {
throw "Cannot connect to database. Please verify ServiceName and SystemPassword." throw "Cannot connect to database. Please verify ServiceName, Host and SystemPassword."
} }
Write-LogSuccess "Database connection successful" Write-LogSuccess "Database connection successful"
# Get version info # 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 Version: $($versionInfo.Version)"
Write-Log "Oracle Edition: $($versionInfo.Edition)" Write-Log "Oracle Edition: $($versionInfo.Edition)"
Write-Log "CDB Mode: $($versionInfo.IsCDB)" Write-Log "CDB Mode: $($versionInfo.IsCDB)"
# Check container info # 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)" Write-Log "Container: $($containerInfo.ContainerName)"
if ($containerInfo.IsPDB) { if ($containerInfo.IsPDB) {
Write-Log "Connected to PDB (Pluggable Database)" Write-Log "Connected to PDB (Pluggable Database)"
@@ -165,7 +188,7 @@ SELECT 'PROFILE_CONFIGURED' FROM dual;
EXIT; 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 -Username "SYS" -Password $SystemPassword -SqlCommand $profileSql -AsSysdba
if ($result -match "PROFILE_CONFIGURED") { if ($result -match "PROFILE_CONFIGURED") {
@@ -286,7 +309,7 @@ SELECT 'TS_EXISTS' FROM dba_tablespaces WHERE tablespace_name = 'ROA';
EXIT; 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 -Username "SYSTEM" -Password $SystemPassword -SqlCommand $checkTsSql -Silent
if ($tsResult -match "TS_EXISTS") { if ($tsResult -match "TS_EXISTS") {
@@ -309,7 +332,7 @@ SELECT 'TS_CREATED' FROM dual;
EXIT; 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 -Username "SYSTEM" -Password $SystemPassword -SqlCommand $createTsSql
if ($result -match "TS_CREATED") { if ($result -match "TS_CREATED") {
@@ -339,7 +362,7 @@ COMMIT;
SELECT 'PWD_UPDATED' FROM dual; SELECT 'PWD_UPDATED' FROM dual;
EXIT; 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 -Username "SYSTEM" -Password $SystemPassword -SqlCommand $updatePwdSql -Silent
if ($result -match "PWD_UPDATED") { if ($result -match "PWD_UPDATED") {
@@ -382,7 +405,7 @@ SELECT 'USER_CREATED' FROM dual;
EXIT; 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 -Username "SYSTEM" -Password $SystemPassword -SqlCommand $createUserSql
if ($result -match "USER_CREATED") { if ($result -match "USER_CREATED") {
@@ -402,7 +425,7 @@ SELECT privilege FROM dba_sys_privs WHERE grantee = 'CONTAFIN_ORACLE' ORDER BY p
EXIT; 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 -Username "SYSTEM" -Password $SystemPassword -SqlCommand $verifyUserSql -Silent
Write-Log "CONTAFIN_ORACLE privileges verified" Write-Log "CONTAFIN_ORACLE privileges verified"
@@ -432,7 +455,7 @@ SELECT 'PWD_RESET_DONE' FROM DUAL;
EXIT; 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 -Username "SYSTEM" -Password $SystemPassword -SqlCommand $resetPwdSql
if ($result -match "PWD_RESET_DONE") { if ($result -match "PWD_RESET_DONE") {
@@ -449,7 +472,7 @@ EXIT;
# Summary # Summary
Write-LogSection "Setup Complete" Write-LogSection "Setup Complete"
Write-LogSuccess "Database initial setup completed successfully!" Write-LogSuccess "Database initial setup completed successfully!"
Write-Log "" Write-Host ""
Write-Log "Summary:" Write-Log "Summary:"
Write-Log " Oracle Home: $oraHome" Write-Log " Oracle Home: $oraHome"
Write-Log " Service Name: $ServiceName" Write-Log " Service Name: $ServiceName"
@@ -461,7 +484,7 @@ EXIT;
if (-not $SkipSqlnetConfig) { if (-not $SkipSqlnetConfig) {
Write-Log " Old Client Auth: Enabled (sqlnet.ora + 10G verifier)" Write-Log " Old Client Auth: Enabled (sqlnet.ora + 10G verifier)"
} }
Write-Log "" Write-Host ""
Write-Log "Next steps:" Write-Log "Next steps:"
Write-Log " 1. Run 02-create-sys-objects.ps1 to install SYS objects" 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" Write-Log " 2. Run 03-import-contafin.ps1 to import CONTAFIN_ORACLE schema"

View File

@@ -131,6 +131,12 @@ function Get-OracleVersion {
[Parameter(Mandatory = $true)] [Parameter(Mandatory = $true)]
[string]$ServiceName, [string]$ServiceName,
[Parameter(Mandatory = $false)]
[string]$DbHost,
[Parameter(Mandatory = $false)]
[int]$Port = 1521,
[Parameter(Mandatory = $false)] [Parameter(Mandatory = $false)]
[string]$Username = "SYSTEM", [string]$Username = "SYSTEM",
@@ -149,6 +155,7 @@ EXIT;
"@ "@
$result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName ` $result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-DbHost $DbHost -Port $Port `
-Username $Username -Password $Password -SqlCommand $sql -Silent -Username $Username -Password $Password -SqlCommand $sql -Silent
$versionInfo = [PSCustomObject]@{ $versionInfo = [PSCustomObject]@{
@@ -201,6 +208,12 @@ function Get-ServiceName {
[Parameter(Mandatory = $false)] [Parameter(Mandatory = $false)]
[string]$OracleHome, [string]$OracleHome,
[Parameter(Mandatory = $false)]
[string]$DbHost,
[Parameter(Mandatory = $false)]
[int]$Port = 1521,
[Parameter(Mandatory = $true)] [Parameter(Mandatory = $true)]
[string]$SystemPassword [string]$SystemPassword
) )
@@ -210,6 +223,7 @@ function Get-ServiceName {
# First try to connect to XE and check if it's CDB # First try to connect to XE and check if it's CDB
try { try {
$version = Get-OracleVersion -OracleHome $oraHome -ServiceName "XE" ` $version = Get-OracleVersion -OracleHome $oraHome -ServiceName "XE" `
-DbHost $DbHost -Port $Port `
-Password $SystemPassword -ErrorAction Stop -Password $SystemPassword -ErrorAction Stop
if ($version.IsCDB) { if ($version.IsCDB) {
@@ -224,6 +238,7 @@ function Get-ServiceName {
# Try ROA as service name # Try ROA as service name
try { try {
$null = Test-OracleConnection -OracleHome $oraHome -ServiceName "ROA" ` $null = Test-OracleConnection -OracleHome $oraHome -ServiceName "ROA" `
-DbHost $DbHost -Port $Port `
-Username "SYSTEM" -Password $SystemPassword -ErrorAction Stop -Username "SYSTEM" -Password $SystemPassword -ErrorAction Stop
return "ROA" return "ROA"
} }
@@ -270,6 +285,12 @@ function Test-OracleConnection {
[Parameter(Mandatory = $true)] [Parameter(Mandatory = $true)]
[string]$ServiceName, [string]$ServiceName,
[Parameter(Mandatory = $false)]
[string]$DbHost,
[Parameter(Mandatory = $false)]
[int]$Port = 1521,
[Parameter(Mandatory = $false)] [Parameter(Mandatory = $false)]
[string]$Username = "SYSTEM", [string]$Username = "SYSTEM",
@@ -286,6 +307,7 @@ function Test-OracleConnection {
try { try {
$result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName ` $result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-DbHost $DbHost -Port $Port `
-Username $Username -Password $Password -SqlCommand $sql -AsSysdba:$AsSysdba -Silent -Username $Username -Password $Password -SqlCommand $sql -AsSysdba:$AsSysdba -Silent
return $result -match "CONNECTED" return $result -match "CONNECTED"
@@ -330,6 +352,12 @@ function Test-PDB {
[Parameter(Mandatory = $true)] [Parameter(Mandatory = $true)]
[string]$ServiceName, [string]$ServiceName,
[Parameter(Mandatory = $false)]
[string]$DbHost,
[Parameter(Mandatory = $false)]
[int]$Port = 1521,
[Parameter(Mandatory = $false)] [Parameter(Mandatory = $false)]
[string]$Username = "SYSTEM", [string]$Username = "SYSTEM",
@@ -347,6 +375,7 @@ EXIT;
"@ "@
$result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName ` $result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-DbHost $DbHost -Port $Port `
-Username $Username -Password $Password -SqlCommand $sql -Silent -Username $Username -Password $Password -SqlCommand $sql -Silent
$containerInfo = [PSCustomObject]@{ $containerInfo = [PSCustomObject]@{
@@ -428,6 +457,12 @@ function Invoke-SqlPlus {
[Parameter(Mandatory = $true)] [Parameter(Mandatory = $true)]
[string]$ServiceName, [string]$ServiceName,
[Parameter(Mandatory = $false)]
[string]$DbHost,
[Parameter(Mandatory = $false)]
[int]$Port = 1521,
[Parameter(Mandatory = $false)] [Parameter(Mandatory = $false)]
[string]$Username = "SYSTEM", [string]$Username = "SYSTEM",
@@ -454,9 +489,13 @@ function Invoke-SqlPlus {
throw "SQL*Plus not found at: $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 { "" } $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 $tempFile = $null

View File

@@ -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;
```