From 648342c0a801eebf8c8f03f769489dc04d240618 Mon Sep 17 00:00:00 2001 From: Marius Date: Thu, 29 Jan 2026 01:24:15 +0200 Subject: [PATCH] Add post-install configuration for ROA Windows setup New files: - 08-post-install-config.ps1: Creates ROAUPDATE folders (54 dirs), Oracle DIRECTORY objects, SERVER_INFO config, scheduler jobs - directories-roaupdate.sql: 54 UPD_* directory objects for PACK_UPDATE - server-info-init.sql: Encoded passwords, paths, email settings - scheduler-jobs.sql: UPDATEROA_ZILNIC, UPDATERTVAI_ZILNIC (disabled) - auth-detalii-init.sql: Customer ID for licensing Updates: - RunAll.cmd: Added step 6 (08-post-install-config.ps1) - README.md: Simplified Quick Start, single execution path (RunAll.cmd) - 00-INSTALL-ORACLE-*.md: Removed redundant manual steps (handled by scripts) Co-Authored-By: Claude Opus 4.5 --- .../lxc108-oracle/roa-windows-setup/README.md | 131 ++-- .../roa-windows-setup/RunAll.cmd | 29 +- .../docs/00-INSTALL-ORACLE-SE.md | 80 +-- .../docs/00-INSTALL-ORACLE-XE.md | 65 +- .../scripts/08-post-install-config.ps1 | 627 ++++++++++++++++++ .../sql/auth-detalii-init.sql | 123 ++++ .../sql/directories-roaupdate.sql | 245 +++++++ .../roa-windows-setup/sql/scheduler-jobs.sql | 231 +++++++ .../sql/server-info-init.sql | 260 ++++++++ 9 files changed, 1614 insertions(+), 177 deletions(-) create mode 100644 proxmox/lxc108-oracle/roa-windows-setup/scripts/08-post-install-config.ps1 create mode 100644 proxmox/lxc108-oracle/roa-windows-setup/sql/auth-detalii-init.sql create mode 100644 proxmox/lxc108-oracle/roa-windows-setup/sql/directories-roaupdate.sql create mode 100644 proxmox/lxc108-oracle/roa-windows-setup/sql/scheduler-jobs.sql create mode 100644 proxmox/lxc108-oracle/roa-windows-setup/sql/server-info-init.sql diff --git a/proxmox/lxc108-oracle/roa-windows-setup/README.md b/proxmox/lxc108-oracle/roa-windows-setup/README.md index 08cd3b0..71ceb90 100644 --- a/proxmox/lxc108-oracle/roa-windows-setup/README.md +++ b/proxmox/lxc108-oracle/roa-windows-setup/README.md @@ -25,49 +25,32 @@ Scripts and documentation for setting up ROA Oracle Database on Windows servers: ## Quick Start -1. Download Oracle 21c XE or SE from Oracle -2. Install Oracle (see `docs/00-INSTALL-ORACLE-XE.md` or `docs/00-INSTALL-ORACLE-SE.md`) -3. Copy DMP files to `C:\DMPDIR\` -4. Copy `config.example.ps1` to `config.ps1` and edit values -5. Run scripts in order: `01` -> `07` +### Oracle 21c Express Edition (XE) - Gratuit +1. Download și instalează Oracle 21c XE (see `docs/00-INSTALL-ORACLE-XE.md`) +2. Copiază fișierele DMP în `C:\DMPDIR\` +3. Rulează instalarea: + ```cmd + RunAll.cmd + ``` -### Option A: Use Batch Wrappers (Recommended) +### Oracle 21c Standard Edition (SE) - Licență +1. Download și instalează Oracle 21c SE (see `docs/00-INSTALL-ORACLE-SE.md`) + - În wizard: "Create and configure a single instance database" + - Global database name: `ROA` + - **Debifează** "Create as Container database" +2. Copiază fișierele DMP în `C:\DMPDIR\` +3. Rulează instalarea: + ```cmd + RunAll.cmd + ``` -The batch wrappers handle PowerShell execution policy automatically: +### Rulare script individual (dacă e necesar) ```cmd -# Complete installation (all scripts in order) -RunAll.cmd - -# Or run individual scripts Run.cmd 01-setup-database.ps1 -Run.cmd 02-create-sys-objects.ps1 -Run.cmd 03-import-contafin.ps1 -Run.cmd 04-create-synonyms-grants.ps1 -Run.cmd 05-import-companies.ps1 Run.cmd 07-verify-installation.ps1 ``` -### Option B: PowerShell Direct (requires Bypass) - -If running PowerShell directly, use `-ExecutionPolicy Bypass`: - -```powershell -# From PowerShell -powershell -ExecutionPolicy Bypass -File .\scripts\01-setup-database.ps1 -powershell -ExecutionPolicy Bypass -File .\scripts\07-verify-installation.ps1 -Detailed -``` - -### Option C: Set Execution Policy (Admin required) - -```powershell -# Run as Administrator (one-time setup) -Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine - -# Then run scripts normally -.\scripts\01-setup-database.ps1 -``` - --- ## Configuration @@ -103,6 +86,7 @@ roa-windows-setup/ │ ├── 05-import-companies.ps1 # Batch import company schemas │ ├── 06-add-company.ps1 # Add new company to existing server │ ├── 07-verify-installation.ps1# Verify installation completeness +│ ├── 08-post-install-config.ps1# ROAUPDATE folders, SERVER_INFO, jobs │ └── 99-uninstall-roa.ps1 # Uninstall/cleanup script │ ├── config/ # Configuration templates @@ -120,6 +104,10 @@ roa-windows-setup/ │ ├── sys-objects.sql # SYS custom objects (AUTH_PACK, etc.) │ ├── synonyms-public.sql # Public synonyms for CONTAFIN_ORACLE │ ├── grants-public.sql # Public grants +│ ├── directories-roaupdate.sql # 54 DIRECTORY objects for PACK_UPDATE +│ ├── server-info-init.sql # SERVER_INFO configuration +│ ├── scheduler-jobs.sql # UPDATEROA_ZILNIC, UPDATERTVAI_ZILNIC +│ ├── auth-detalii-init.sql # Customer ID for licensing │ ├── verify-objects.sql # Verification queries │ └── uninstall-roa.sql # Cleanup script (removes all ROA objects) │ @@ -140,13 +128,14 @@ roa-windows-setup/ | `05-import-companies.ps1` | Batch import company schemas from DMP files | Yes | | `06-add-company.ps1` | Add new company to existing server | Optional | | `07-verify-installation.ps1` | Verify installation completeness (objects, grants, synonyms) | Yes | +| `08-post-install-config.ps1` | ROAUPDATE directories, SERVER_INFO, scheduler jobs, licensing | Yes | | `99-uninstall-roa.ps1` | Remove all ROA objects (cleanup for re-testing) | Optional | --- ## Architecture Differences -### Oracle 21c Standard Edition (non-CDB) +### Oracle 21c Standard Edition (non-CDB) - RECOMANDAT pentru producție Traditional single-database architecture (legacy compatibility). @@ -159,12 +148,19 @@ Traditional single-database architecture (legacy compatibility). | Connection | `system/pass@ROA` | | Datafiles | `C:\app\oracle\oradata\ROA\` | -**Advantages:** -- Simpler administration -- Compatible with Oracle 10g migration scripts -- No PDB management overhead +**La instalare:** +- Selectezi "Create and configure a single instance database" +- **Debifezi** "Create as Container database" +- Global database name: `ROA` +- Wizard-ul creează baza de date automat (~30-45 min) -### Oracle 21c Express Edition (CDB/PDB) +**Avantaje:** +- Fără limitări de resurse (RAM, CPU, spațiu) +- Administrare simplă +- Compatibil cu scripturi de migrare Oracle 10g +- Fără overhead PDB + +### Oracle 21c Express Edition (CDB/PDB) - Gratuit, pentru testare Modern multitenant architecture with Container Database. @@ -177,13 +173,23 @@ Modern multitenant architecture with Container Database. | Connection | `system/pass@XEPDB1` | | Datafiles | `C:\app\oracle\oradata\XE\XEPDB1\` | -**Advantages:** -- Free license (Express Edition) -- Modern architecture -- Easy backup/clone of PDB +**La instalare:** +- Rulezi installer-ul XE +- Baza de date se creează automat (CDB: XE + PDB: XEPDB1) +- Nu ai opțiunea non-CDB (XE suportă doar CDB) + +**Avantaje:** +- Licență gratuită +- Instalare rapidă +- Ideal pentru dezvoltare/testare + +**Limitări XE:** +- Max 2 CPU threads +- Max 2 GB RAM +- Max 12 GB date utilizator **Connection Warning:** -> Always connect to **XEPDB1** (PDB), not to **XE** (CDB root) for ROA operations! +> Conectează-te întotdeauna la **XEPDB1** (PDB), NU la **XE** (CDB root) pentru operații ROA! --- @@ -249,9 +255,42 @@ Copy-Item \\server\dmp\*.dmp C:\DMPDIR\ .\03-import-contafin.ps1 .\04-create-synonyms-grants.ps1 .\05-import-companies.ps1 +.\08-post-install-config.ps1 .\07-verify-installation.ps1 ``` +### Post-Installation Configuration (08-post-install-config.ps1) + +This script completes the ROA setup by configuring: + +1. **ROAUPDATE Directories**: Creates 54 physical folders and Oracle DIRECTORY objects +2. **SERVER_INFO**: Encoded passwords, paths, email settings for PACK_UPDATE +3. **Customer ID**: Sets AUTH_DETALII for license verification +4. **Scheduler Jobs**: UPDATEROA_ZILNIC and UPDATERTVAI_ZILNIC (disabled by default) + +```powershell +# Basic usage (defaults: D:\ROAUPDATE, no Customer ID) +.\08-post-install-config.ps1 + +# With custom ROAUPDATE path and Customer ID +.\08-post-install-config.ps1 -RoaUpdatePath "E:\ROAUPDATE" -CustomerId "138" + +# With email configuration +.\08-post-install-config.ps1 -EmailTo "admin@company.ro" -EmailSmtp "mail.company.ro" + +# Skip specific parts +.\08-post-install-config.ps1 -SkipSchedulerJobs -SkipServerInfo +``` + +**Enable automatic updates after verification:** +```sql +-- Enable daily update job +EXEC DBMS_SCHEDULER.ENABLE('CONTAFIN_ORACLE.UPDATEROA_ZILNIC'); + +-- Run update manually for testing +EXEC DBMS_SCHEDULER.RUN_JOB('CONTAFIN_ORACLE.UPDATEROA_ZILNIC'); +``` + ### Add New Company ```powershell diff --git a/proxmox/lxc108-oracle/roa-windows-setup/RunAll.cmd b/proxmox/lxc108-oracle/roa-windows-setup/RunAll.cmd index a3ef7de..078404b 100644 --- a/proxmox/lxc108-oracle/roa-windows-setup/RunAll.cmd +++ b/proxmox/lxc108-oracle/roa-windows-setup/RunAll.cmd @@ -18,7 +18,8 @@ echo 2. 02-create-sys-objects.ps1 echo 3. 03-import-contafin.ps1 echo 4. 04-create-synonyms-grants.ps1 echo 5. 05-import-companies.ps1 -echo 6. 07-verify-installation.ps1 +echo 6. 08-post-install-config.ps1 +echo 7. 07-verify-installation.ps1 echo. echo Prerequisites: echo - Oracle 21c XE or SE installed and running @@ -37,7 +38,7 @@ set ERRORS=0 REM Script 1: Setup Database echo. -echo [1/6] Running 01-setup-database.ps1... +echo [1/7] Running 01-setup-database.ps1... echo ============================================================ powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%SCRIPTS_DIR%\01-setup-database.ps1" if %ERRORLEVEL% NEQ 0 ( @@ -49,7 +50,7 @@ if %ERRORLEVEL% NEQ 0 ( REM Script 2: Create SYS Objects echo. -echo [2/6] Running 02-create-sys-objects.ps1... +echo [2/7] Running 02-create-sys-objects.ps1... echo ============================================================ powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%SCRIPTS_DIR%\02-create-sys-objects.ps1" if %ERRORLEVEL% NEQ 0 ( @@ -61,7 +62,7 @@ if %ERRORLEVEL% NEQ 0 ( REM Script 3: Import CONTAFIN_ORACLE echo. -echo [3/6] Running 03-import-contafin.ps1... +echo [3/7] Running 03-import-contafin.ps1... echo ============================================================ powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%SCRIPTS_DIR%\03-import-contafin.ps1" if %ERRORLEVEL% NEQ 0 ( @@ -73,7 +74,7 @@ if %ERRORLEVEL% NEQ 0 ( REM Script 4: Create Synonyms and Grants echo. -echo [4/6] Running 04-create-synonyms-grants.ps1... +echo [4/7] Running 04-create-synonyms-grants.ps1... echo ============================================================ powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%SCRIPTS_DIR%\04-create-synonyms-grants.ps1" if %ERRORLEVEL% NEQ 0 ( @@ -85,7 +86,7 @@ if %ERRORLEVEL% NEQ 0 ( REM Script 5: Import Companies echo. -echo [5/6] Running 05-import-companies.ps1... +echo [5/7] Running 05-import-companies.ps1... echo ============================================================ powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%SCRIPTS_DIR%\05-import-companies.ps1" if %ERRORLEVEL% NEQ 0 ( @@ -95,9 +96,21 @@ if %ERRORLEVEL% NEQ 0 ( if /i not "!CONTINUE!"=="Y" goto :summary ) -REM Script 6: Verify Installation +REM Script 6: Post-Installation Configuration echo. -echo [6/6] Running 07-verify-installation.ps1... +echo [6/7] Running 08-post-install-config.ps1... +echo ============================================================ +powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%SCRIPTS_DIR%\08-post-install-config.ps1" +if %ERRORLEVEL% NEQ 0 ( + echo [FAILED] 08-post-install-config.ps1 failed! + set /a ERRORS+=1 + set /p CONTINUE="Continue anyway? [Y/N]: " + if /i not "!CONTINUE!"=="Y" goto :summary +) + +REM Script 7: Verify Installation +echo. +echo [7/7] Running 07-verify-installation.ps1... echo ============================================================ powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%SCRIPTS_DIR%\07-verify-installation.ps1" if %ERRORLEVEL% NEQ 0 ( diff --git a/proxmox/lxc108-oracle/roa-windows-setup/docs/00-INSTALL-ORACLE-SE.md b/proxmox/lxc108-oracle/roa-windows-setup/docs/00-INSTALL-ORACLE-SE.md index 02be5b6..d4fca28 100644 --- a/proxmox/lxc108-oracle/roa-windows-setup/docs/00-INSTALL-ORACLE-SE.md +++ b/proxmox/lxc108-oracle/roa-windows-setup/docs/00-INSTALL-ORACLE-SE.md @@ -173,61 +173,9 @@ $env:PATH = "$env:ORACLE_HOME\bin;$env:PATH" sqlplus system/romfastsoft@localhost:1521/ROA ``` -### Configure for Old Client Compatibility +## Memory Configuration (Opțional) -```powershell -notepad C:\app\oracle\product\21c\dbhome_1\network\admin\sqlnet.ora -``` - -Add: -``` -SQLNET.ALLOWED_LOGON_VERSION_SERVER=8 -SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8 -``` - -Reload listener: -```powershell -lsnrctl reload -``` - ---- - -## Create DMPDIR Directory - -```sql --- Connect as SYSDBA -sqlplus sys/romfastsoft@localhost:1521/ROA as sysdba - --- Create Windows directory -host mkdir C:\DMPDIR - --- Create Oracle DIRECTORY object -CREATE OR REPLACE DIRECTORY DMPDIR AS 'C:\DMPDIR'; -GRANT READ, WRITE ON DIRECTORY DMPDIR TO PUBLIC; - --- Verify -SELECT directory_name, directory_path FROM dba_directories WHERE directory_name = 'DMPDIR'; -``` - ---- - -## Configure Password Policy - -```sql -sqlplus sys/romfastsoft@localhost:1521/ROA as sysdba - --- Modify DEFAULT profile -ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; -ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_TIME UNLIMITED; -ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_MAX UNLIMITED; -ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED; -``` - ---- - -## Memory Configuration - -For Standard Edition with 16GB RAM: +Pentru Standard Edition cu 16GB RAM: ```sql -- Connect as SYSDBA @@ -256,23 +204,19 @@ Recommended memory allocation: --- -## Create ROA Tablespace +## Ce NU trebuie făcut manual -```sql -sqlplus sys/romfastsoft@localhost:1521/ROA as sysdba +Următoarele sunt create **automat** de scriptul `01-setup-database.ps1`: --- Create tablespace -CREATE TABLESPACE ROA - DATAFILE 'C:\app\oracle\oradata\ROA\roa01.dbf' - SIZE 2G - AUTOEXTEND ON NEXT 512M - MAXSIZE UNLIMITED; +| Component | Script | +|-----------|--------| +| Tablespace ROA | `01-setup-database.ps1` | +| DMPDIR directory | `01-setup-database.ps1` | +| Password profile (UNLIMITED) | `01-setup-database.ps1` | +| User CONTAFIN_ORACLE | `01-setup-database.ps1` | +| sqlnet.ora (client vechi) | `01-setup-database.ps1` | --- Verify -SELECT tablespace_name, file_name, bytes/1024/1024 as MB -FROM dba_data_files -WHERE tablespace_name = 'ROA'; -``` +**NU rula manual comenzile SQL pentru acestea** - scripturile le fac automat! --- diff --git a/proxmox/lxc108-oracle/roa-windows-setup/docs/00-INSTALL-ORACLE-XE.md b/proxmox/lxc108-oracle/roa-windows-setup/docs/00-INSTALL-ORACLE-XE.md index f60516b..b67a1e8 100644 --- a/proxmox/lxc108-oracle/roa-windows-setup/docs/00-INSTALL-ORACLE-XE.md +++ b/proxmox/lxc108-oracle/roa-windows-setup/docs/00-INSTALL-ORACLE-XE.md @@ -124,28 +124,6 @@ Version 21.3.0.0.0 SQL> ``` -### Configure for Old Client Compatibility - -If using Instant Client 10/11 (ODBC), configure `sqlnet.ora`: - -```powershell -# Edit sqlnet.ora -notepad C:\app\oracle\product\21c\dbhomeXE\network\admin\sqlnet.ora -``` - -Add these lines: -``` -SQLNET.ALLOWED_LOGON_VERSION_SERVER=8 -SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8 -``` - -Reload listener: -```powershell -lsnrctl reload -``` - ---- - ## CDB/PDB Architecture Oracle XE uses Container Database (CDB) architecture: @@ -198,42 +176,19 @@ ALTER PLUGGABLE DATABASE XEPDB1 SAVE STATE; --- -## Create DMPDIR Directory +## Ce NU trebuie făcut manual -```sql --- Connect to PDB -sqlplus sys/romfastsoft@localhost:1521/XEPDB1 as sysdba +Următoarele sunt create **automat** de scriptul `01-setup-database.ps1`: --- Create Windows directory -host mkdir C:\DMPDIR +| Component | Script | +|-----------|--------| +| Tablespace ROA | `01-setup-database.ps1` | +| DMPDIR directory | `01-setup-database.ps1` | +| Password profile (UNLIMITED) | `01-setup-database.ps1` | +| User CONTAFIN_ORACLE | `01-setup-database.ps1` | +| sqlnet.ora (client vechi) | `01-setup-database.ps1` | --- Create Oracle DIRECTORY object -CREATE OR REPLACE DIRECTORY DMPDIR AS 'C:\DMPDIR'; -GRANT READ, WRITE ON DIRECTORY DMPDIR TO PUBLIC; - --- Verify -SELECT directory_name, directory_path FROM dba_directories WHERE directory_name = 'DMPDIR'; -``` - ---- - -## Configure Password Policy - -Disable password expiration for application users: - -```sql --- Connect to PDB -sqlplus sys/romfastsoft@localhost:1521/XEPDB1 as sysdba - --- Modify DEFAULT profile -ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; -ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_TIME UNLIMITED; -ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_MAX UNLIMITED; -ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED; - --- Verify -SELECT resource_name, limit FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_type = 'PASSWORD'; -``` +**NU rula manual comenzile SQL pentru acestea** - scripturile le fac automat! --- diff --git a/proxmox/lxc108-oracle/roa-windows-setup/scripts/08-post-install-config.ps1 b/proxmox/lxc108-oracle/roa-windows-setup/scripts/08-post-install-config.ps1 new file mode 100644 index 0000000..45e6e8c --- /dev/null +++ b/proxmox/lxc108-oracle/roa-windows-setup/scripts/08-post-install-config.ps1 @@ -0,0 +1,627 @@ +#Requires -Version 5.1 + +<# +.SYNOPSIS + Post-installation configuration for ROA Oracle Database. + +.DESCRIPTION + Performs complete post-installation configuration including: + - Creates ROAUPDATE physical folders (54 directories) + - Creates Oracle DIRECTORY objects for PACK_UPDATE + - Initializes SERVER_INFO with encoded passwords and paths + - Sets AUTH_DETALII.CUSTOMER_ID for licensing + - Creates scheduler jobs for automatic updates (disabled by default) + +.PARAMETER OracleHome + Oracle home directory. If not specified, auto-detects from registry or environment. + +.PARAMETER ServiceName + Database service name. Auto-detects: ROA for non-CDB, XEPDB1 for Oracle XE CDB. + +.PARAMETER SystemPassword + SYSTEM user password. Default: romfastsoft + +.PARAMETER ContafinPassword + CONTAFIN_ORACLE user password. Default: ROMFASTSOFT + +.PARAMETER RoaUpdatePath + Base path for ROAUPDATE folder. Default: D:\ROAUPDATE + +.PARAMETER CustomerId + Customer ID for licensing. Leave empty if not required. + +.PARAMETER EmailFrom + Email sender address for update notifications. + +.PARAMETER EmailTo + Email recipient address for update notifications. + +.PARAMETER EmailSmtp + SMTP server hostname for update notifications. + +.PARAMETER EmailUsername + SMTP authentication username (optional). + +.PARAMETER EmailPassword + SMTP authentication password (optional). + +.PARAMETER SkipDirectories + Skip creating physical directories (they may already exist). + +.PARAMETER SkipServerInfo + Skip SERVER_INFO initialization. + +.PARAMETER SkipSchedulerJobs + Skip creating scheduler jobs. + +.EXAMPLE + .\08-post-install-config.ps1 + +.EXAMPLE + .\08-post-install-config.ps1 -RoaUpdatePath "E:\ROAUPDATE" -CustomerId "138" + +.EXAMPLE + .\08-post-install-config.ps1 -ServiceName "XEPDB1" -EmailTo "admin@company.ro" -EmailSmtp "mail.company.ro" + +.NOTES + File Name : 08-post-install-config.ps1 + Prerequisite : Oracle Database installed, CONTAFIN_ORACLE schema imported + Run After : 01-07 scripts completed + Copyright 2024 : ROMFAST +#> + +[CmdletBinding()] +param( + [Parameter(Mandatory = $false)] + [string]$OracleHome, + + [Parameter(Mandatory = $false)] + [string]$ServiceName, + + [Parameter(Mandatory = $false)] + [string]$DbHost, + + [Parameter(Mandatory = $false)] + [int]$Port = 1521, + + [Parameter(Mandatory = $false)] + [string]$SystemPassword = "romfastsoft", + + [Parameter(Mandatory = $false)] + [string]$ContafinPassword = "ROMFASTSOFT", + + [Parameter(Mandatory = $false)] + [string]$RoaUpdatePath = "D:\ROAUPDATE", + + [Parameter(Mandatory = $false)] + [string]$CustomerId, + + [Parameter(Mandatory = $false)] + [string]$EmailFrom = "roaupdate@romfast.ro", + + [Parameter(Mandatory = $false)] + [string]$EmailTo, + + [Parameter(Mandatory = $false)] + [string]$EmailSmtp = "mail.romfast.ro", + + [Parameter(Mandatory = $false)] + [string]$EmailUsername, + + [Parameter(Mandatory = $false)] + [string]$EmailPassword, + + [Parameter(Mandatory = $false)] + [switch]$SkipDirectories, + + [Parameter(Mandatory = $false)] + [switch]$SkipServerInfo, + + [Parameter(Mandatory = $false)] + [switch]$SkipSchedulerJobs +) + +$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 } +} + +# Source library functions +. "$PSScriptRoot\lib\logging-functions.ps1" +. "$PSScriptRoot\lib\oracle-functions.ps1" + +# Initialize logging +$logPath = Join-Path $PSScriptRoot "..\logs\08-post-install-config_$(Get-Date -Format 'yyyyMMdd_HHmmss').log" +Initialize-LogFile -LogPath $logPath -ScriptName "08-post-install-config.ps1" + +# Define ROAUPDATE subdirectories (54 total) +$roaUpdateSubdirs = @( + "COMUNROA", "USERREPORTS", + "ROAAPROV", "ROAAUTO", "ROABAVERT", "ROACASA", "ROACOMENZI", + "ROACONIMPORT", "ROACONSTRUCTII", "ROACONT", "ROACONTRACTE", + "ROADECL", "ROADEF", "ROADEFSALARII", "ROADEPOZIT", "ROADEVIZE", + "ROAFACTURARE", "ROAFURNIZORI", + "ROAGEN", "ROAGEST", + "ROAGRESTAURANT", "ROAHOTEL", "ROAHOTELCONFIG", + "ROAIMOB", "ROAINCHIDSAL", + "ROALUCRARI", "ROAMANAGER", "ROAMASINI", + "ROANOR", "ROANORFRUVIMED", "ROANORRENAV", "ROANORUTMIDIA", + "ROAOBINV", "ROAOFERTARE", "ROAPRETURI", + "ROAPRINT", "ROAPRINT_INITIALIZARI", + "ROAPRODAGR", "ROAPRODUCTIE", + "ROAREGISTRATURA", "ROAREPARTIZSAL", + "ROARES", "ROARESTAURANT", "ROARETAIL", "ROARETAILMON", + "ROASAL", "ROASALSPEC", + "ROASITFIN", "ROASITOP", + "ROASTART", "ROASUPORT", + "ROATELCOMM", "ROATELMON", + "ROAVIN" +) + +try { + Write-LogSection "ROA Post-Installation Configuration" + + # Step 1: Validate Oracle installation + Write-Log "Detecting Oracle installation..." + + $oraHome = Get-OracleHome -OracleHome $OracleHome + Write-LogSuccess "Oracle Home: $oraHome" + + # Step 2: Auto-detect service name if not specified + if (-not $ServiceName) { + Write-Log "Auto-detecting service name..." + try { + $version = Get-OracleVersion -OracleHome $oraHome -ServiceName "XE" -DbHost $DbHost -Port $Port -Password $SystemPassword + if ($version.IsCDB) { + $ServiceName = "XEPDB1" + } else { + $ServiceName = "XE" + } + } + catch { + try { + $null = Test-OracleConnection -OracleHome $oraHome -ServiceName "ROA" -DbHost $DbHost -Port $Port -Password $SystemPassword + $ServiceName = "ROA" + } + catch { + $ServiceName = "XEPDB1" + } + } + } + + 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 -DbHost $DbHost -Port $Port -Password $SystemPassword)) { + throw "Cannot connect to database. Please verify ServiceName, Host and SystemPassword." + } + Write-LogSuccess "Database connection successful" + + # Step 4: Verify CONTAFIN_ORACLE schema exists + Write-Log "Verifying CONTAFIN_ORACLE schema..." + if (-not (Test-OracleUser -OracleHome $oraHome -ServiceName $ServiceName -Password $SystemPassword -SchemaName "CONTAFIN_ORACLE")) { + throw "CONTAFIN_ORACLE schema not found. Please run scripts 01-07 first." + } + Write-LogSuccess "CONTAFIN_ORACLE schema exists" + + # Step 5: Create ROAUPDATE physical directories + if (-not $SkipDirectories) { + Write-LogSection "Creating ROAUPDATE Physical Directories" + + # Create main ROAUPDATE directory + if (-not (Test-Path $RoaUpdatePath)) { + New-Item -ItemType Directory -Path $RoaUpdatePath -Force | Out-Null + Write-Log "Created: $RoaUpdatePath" + } else { + Write-Log "Exists: $RoaUpdatePath" + } + + # Create _ARHIVE subdirectory + $arhivePath = Join-Path $RoaUpdatePath "_ARHIVE" + if (-not (Test-Path $arhivePath)) { + New-Item -ItemType Directory -Path $arhivePath -Force | Out-Null + Write-Log "Created: $arhivePath" + } + + # Create all module subdirectories + $createdCount = 0 + $existsCount = 0 + foreach ($subdir in $roaUpdateSubdirs) { + $subdirPath = Join-Path $arhivePath $subdir + if (-not (Test-Path $subdirPath)) { + New-Item -ItemType Directory -Path $subdirPath -Force | Out-Null + $createdCount++ + } else { + $existsCount++ + } + } + Write-LogSuccess "Created $createdCount new directories, $existsCount already existed" + Write-LogSuccess "Total: $($roaUpdateSubdirs.Count) module directories" + } else { + Write-Log "Skipping physical directory creation as requested" + } + + # Step 6: Create Oracle DIRECTORY objects + Write-LogSection "Creating Oracle DIRECTORY Objects" + + $sqlDir = Join-Path $PSScriptRoot "..\sql" + $directoriesScript = Join-Path $sqlDir "directories-roaupdate.sql" + + if (Test-Path $directoriesScript) { + # Create temp SQL file with substitution + $tempSql = [System.IO.Path]::GetTempFileName() + $tempSql = [System.IO.Path]::ChangeExtension($tempSql, ".sql") + + $sqlContent = @" +DEFINE roaupdate_path = '$RoaUpdatePath' +@"$directoriesScript" +EXIT; +"@ + Set-Content -Path $tempSql -Value $sqlContent -Encoding ASCII + + $result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName -DbHost $DbHost -Port $Port ` + -Username "SYS" -Password $SystemPassword -SqlFile $tempSql -AsSysdba + + Remove-Item -Path $tempSql -Force -ErrorAction SilentlyContinue + + if ($result -match "UPD_ROAUPDATE") { + Write-LogSuccess "Oracle DIRECTORY objects created successfully" + } else { + Write-LogWarning "Could not verify DIRECTORY objects creation" + Write-LogDebug $result + } + } else { + Write-LogWarning "directories-roaupdate.sql not found at $directoriesScript" + } + + # Step 7: Initialize SERVER_INFO + if (-not $SkipServerInfo) { + Write-LogSection "Initializing SERVER_INFO" + + # Get SQLPlus path + $sqlplusPath = Join-Path $oraHome "bin\sqlplus.exe" + + # Encode passwords using Oracle PACK_UTILS + Write-Log "Encoding passwords..." + + $encodeSql = @" +SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF LINESIZE 500 +SELECT 'SYS_ENCODED:' || CAST(pack_utils.encodebase64(pack_utils.zipblob(pack_utils.Clob2Blob('$SystemPassword'))) AS VARCHAR2(500)) FROM dual; +SELECT 'CONTAFIN_ENCODED:' || CAST(pack_utils.encodebase64(pack_utils.zipblob(pack_utils.Clob2Blob('$ContafinPassword'))) AS VARCHAR2(500)) FROM dual; +EXIT; +"@ + + $encodeResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName -DbHost $DbHost -Port $Port ` + -Username "CONTAFIN_ORACLE" -Password $ContafinPassword -SqlCommand $encodeSql -Silent + + $sysPasswordEncoded = "" + $contafinPasswordEncoded = "" + + foreach ($line in $encodeResult -split "`n") { + if ($line -match "^SYS_ENCODED:(.+)$") { + $sysPasswordEncoded = $Matches[1].Trim() + } + elseif ($line -match "^CONTAFIN_ENCODED:(.+)$") { + $contafinPasswordEncoded = $Matches[1].Trim() + } + } + + if ($sysPasswordEncoded -and $contafinPasswordEncoded) { + Write-LogSuccess "Passwords encoded successfully" + } else { + Write-LogWarning "Could not encode passwords - using placeholders" + $sysPasswordEncoded = "ENCODE_FAILED" + $contafinPasswordEncoded = "ENCODE_FAILED" + } + + # Set default email values if not provided + if (-not $EmailTo) { + $EmailTo = "admin@" + $env:USERDOMAIN + ".local" + } + if (-not $EmailUsername) { + $EmailUsername = $EmailFrom + } + if (-not $EmailPassword) { + $EmailPassword = "changeme" + } + + # Initialize SERVER_INFO + $serverInfoSql = @" +SET FEEDBACK ON SERVEROUTPUT ON VERIFY OFF + +-- System passwords (encoded) +MERGE INTO server_info t +USING (SELECT 'PASSWORD_SYS' AS varname, '$sysPasswordEncoded' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +MERGE INTO server_info t +USING (SELECT 'PASSWORD_CONTAFIN_ORACLE' AS varname, '$contafinPasswordEncoded' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +-- Local paths +MERGE INTO server_info t +USING (SELECT 'ROAUPDATEPATH' AS varname, '$RoaUpdatePath' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +MERGE INTO server_info t +USING (SELECT 'SQLPLUSPATH' AS varname, '$sqlplusPath' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +MERGE INTO server_info t +USING (SELECT 'POWERSHELLPATH' AS varname, 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +-- Update configuration +MERGE INTO server_info t +USING (SELECT 'UPDATEPREREQ' AS varname, '1' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +MERGE INTO server_info t +USING (SELECT 'POWERSHELLDOWNLOAD' AS varname, '1' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +MERGE INTO server_info t +USING (SELECT 'POWERSHELLTIMEOUT' AS varname, '30' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +-- Email configuration +MERGE INTO server_info t +USING (SELECT 'EMAIL_FROM' AS varname, '$EmailFrom' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +MERGE INTO server_info t +USING (SELECT 'EMAIL_TO' AS varname, '$EmailTo' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +MERGE INTO server_info t +USING (SELECT 'EMAIL_CC' AS varname, '' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +MERGE INTO server_info t +USING (SELECT 'EMAIL_SMTP' AS varname, '$EmailSmtp' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +MERGE INTO server_info t +USING (SELECT 'EMAIL_PORT' AS varname, '25' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +MERGE INTO server_info t +USING (SELECT 'EMAIL_METHOD' AS varname, 'UTL_SMTP' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +MERGE INTO server_info t +USING (SELECT 'EMAIL_USERNAME' AS varname, '$EmailUsername' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +MERGE INTO server_info t +USING (SELECT 'EMAIL_PASSWORD' AS varname, '$EmailPassword' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +-- Update server URLs +MERGE INTO server_info t +USING (SELECT 'UPD_URL_APP' AS varname, 'https://update.romfast.ro/roa/' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +MERGE INTO server_info t +USING (SELECT 'UPD_URL_APP_BACKUP' AS varname, 'https://update2.romfast.ro/roa/' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +MERGE INTO server_info t +USING (SELECT 'UPD_URL_VERSION' AS varname, 'https://update.romfast.ro/version.txt' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +COMMIT; + +SELECT 'SERVER_INFO_CONFIGURED' FROM dual; +EXIT; +"@ + + $result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName -DbHost $DbHost -Port $Port ` + -Username "CONTAFIN_ORACLE" -Password $ContafinPassword -SqlCommand $serverInfoSql + + if ($result -match "SERVER_INFO_CONFIGURED") { + Write-LogSuccess "SERVER_INFO initialized successfully" + } else { + Write-LogWarning "Could not verify SERVER_INFO configuration" + Write-LogDebug $result + } + } else { + Write-Log "Skipping SERVER_INFO initialization as requested" + } + + # Step 8: Initialize AUTH_DETALII.CUSTOMER_ID + if ($CustomerId) { + Write-LogSection "Setting AUTH_DETALII Customer ID" + + $authSql = @" +SET FEEDBACK ON SERVEROUTPUT ON VERIFY OFF + +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM sys.auth_detalii; + + IF v_count > 0 THEN + UPDATE sys.auth_detalii SET detalii = '$CustomerId' WHERE ROWNUM = 1; + DBMS_OUTPUT.PUT_LINE('Updated existing record with Customer ID: $CustomerId'); + ELSE + INSERT INTO sys.auth_detalii (detalii) VALUES ('$CustomerId'); + DBMS_OUTPUT.PUT_LINE('Inserted new record with Customer ID: $CustomerId'); + END IF; + + COMMIT; +END; +/ + +SELECT 'CUSTOMER_ID_SET' FROM dual; +EXIT; +"@ + + $result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName -DbHost $DbHost -Port $Port ` + -Username "SYS" -Password $SystemPassword -SqlCommand $authSql -AsSysdba + + if ($result -match "CUSTOMER_ID_SET") { + Write-LogSuccess "Customer ID set to: $CustomerId" + } else { + Write-LogWarning "Could not verify Customer ID configuration" + Write-LogDebug $result + } + } else { + Write-Log "No Customer ID specified - skipping AUTH_DETALII configuration" + } + + # Step 9: Create scheduler jobs + if (-not $SkipSchedulerJobs) { + Write-LogSection "Creating Scheduler Jobs" + + $schedulerScript = Join-Path $sqlDir "scheduler-jobs.sql" + + if (Test-Path $schedulerScript) { + $result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName -DbHost $DbHost -Port $Port ` + -Username "SYS" -Password $SystemPassword -SqlFile $schedulerScript -AsSysdba + + if ($result -match "UPDATEROA_ZILNIC") { + Write-LogSuccess "Scheduler jobs created (DISABLED by default)" + Write-Log "To enable jobs, run:" + Write-Log " EXEC DBMS_SCHEDULER.ENABLE('CONTAFIN_ORACLE.UPDATEROA_ZILNIC');" + Write-Log " EXEC DBMS_SCHEDULER.ENABLE('CONTAFIN_ORACLE.UPDATERTVAI_ZILNIC');" + } else { + Write-LogWarning "Could not verify scheduler jobs creation" + Write-LogDebug $result + } + } else { + Write-LogWarning "scheduler-jobs.sql not found at $schedulerScript" + } + } else { + Write-Log "Skipping scheduler jobs creation as requested" + } + + # Step 10: Verification + Write-LogSection "Post-Installation Verification" + + $verifySql = @" +SET PAGESIZE 100 FEEDBACK OFF VERIFY OFF HEADING ON ECHO OFF LINESIZE 200 + +PROMPT +PROMPT === Oracle DIRECTORY Objects (UPD_*) === +SELECT directory_name, SUBSTR(directory_path, 1, 60) AS directory_path +FROM dba_directories +WHERE directory_name LIKE 'UPD_%' +ORDER BY directory_name; + +PROMPT +PROMPT === SERVER_INFO Configuration === +SELECT varname, + CASE WHEN UPPER(varname) LIKE '%PASSWORD%' THEN '***HIDDEN***' + ELSE SUBSTR(varvalue, 1, 50) + END AS varvalue +FROM contafin_oracle.server_info +WHERE varname IN ( + 'ROAUPDATEPATH', 'SQLPLUSPATH', 'POWERSHELLPATH', + 'UPDATEPREREQ', 'POWERSHELLDOWNLOAD', + 'EMAIL_FROM', 'EMAIL_TO', 'EMAIL_SMTP', + 'UPD_URL_APP', 'PASSWORD_SYS', 'PASSWORD_CONTAFIN_ORACLE' +) +ORDER BY varname; + +PROMPT +PROMPT === AUTH_DETALII Customer ID === +SELECT detalii AS customer_id FROM sys.auth_detalii; + +PROMPT +PROMPT === Scheduler Jobs === +SELECT job_name, enabled, state +FROM dba_scheduler_jobs +WHERE owner = 'CONTAFIN_ORACLE' + AND job_name IN ('UPDATEROA_ZILNIC', 'UPDATERTVAI_ZILNIC'); + +EXIT; +"@ + + $verifyResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName -DbHost $DbHost -Port $Port ` + -Username "SYS" -Password $SystemPassword -SqlCommand $verifySql -AsSysdba + + Write-Host "" + Write-Host $verifyResult + Write-Host "" + + # Summary + Write-LogSection "Setup Complete" + Write-LogSuccess "Post-installation configuration completed successfully!" + Write-Host "" + Write-Log "Summary:" + Write-Log " Oracle Home: $oraHome" + Write-Log " Service Name: $ServiceName" + Write-Log " ROAUPDATE Path: $RoaUpdatePath" + Write-Log " Directories: $($roaUpdateSubdirs.Count) module folders" + if ($CustomerId) { + Write-Log " Customer ID: $CustomerId" + } + Write-Log " Scheduler Jobs: DISABLED (enable manually when ready)" + Write-Host "" + Write-Log "Next steps:" + Write-Log " 1. Run 07-verify-installation.ps1 to verify complete installation" + Write-Log " 2. Test PACK_UPDATE.UPDATEROA manually before enabling scheduler" + Write-Log " 3. Enable scheduler jobs when ready for automatic updates" + + Close-LogFile -Success $true + exit 0 +} +catch { + Write-LogError "Post-installation configuration failed: $_" + Write-LogError $_.ScriptStackTrace + Close-LogFile -Success $false + exit 1 +} diff --git a/proxmox/lxc108-oracle/roa-windows-setup/sql/auth-detalii-init.sql b/proxmox/lxc108-oracle/roa-windows-setup/sql/auth-detalii-init.sql new file mode 100644 index 0000000..62d3836 --- /dev/null +++ b/proxmox/lxc108-oracle/roa-windows-setup/sql/auth-detalii-init.sql @@ -0,0 +1,123 @@ +-- ============================================================================ +-- AUTH_DETALII CUSTOMER_ID INITIALIZATION +-- ============================================================================ +-- Inserts the customer ID for license verification into SYS.AUTH_DETALII +-- This is required for AUTH_PACK license decryption +-- +-- Usage: +-- sqlplus sys/password@service as sysdba @auth-detalii-init.sql +-- +-- Prerequisites: +-- - SYS.AUTH_DETALII table exists (created by sys-objects.sql) +-- +-- Substitution Variables: +-- &customer_id - Customer ID for licensing (e.g., 138 or empty for no license) +-- ============================================================================ + +SET ECHO OFF +SET FEEDBACK ON +SET SERVEROUTPUT ON +SET VERIFY OFF +WHENEVER SQLERROR CONTINUE + +PROMPT +PROMPT ======================================== +PROMPT Initializing AUTH_DETALII Customer ID +PROMPT ======================================== +PROMPT + +-- Define customer_id (will prompt if not defined) +DEFINE customer_id = '&customer_id' + +PROMPT Customer ID: &customer_id +PROMPT + +-- ============================================================================ +-- SECTION 1: CHECK EXISTING DATA +-- ============================================================================ + +PROMPT [1/3] Checking existing AUTH_DETALII data... + +DECLARE + v_count NUMBER; + v_existing VARCHAR2(15); +BEGIN + SELECT COUNT(*), MAX(detalii) + INTO v_count, v_existing + FROM sys.auth_detalii; + + IF v_count > 0 THEN + DBMS_OUTPUT.PUT_LINE(' Existing records found: ' || v_count); + DBMS_OUTPUT.PUT_LINE(' Current value: ' || NVL(v_existing, '(null)')); + ELSE + DBMS_OUTPUT.PUT_LINE(' No existing records found'); + END IF; +END; +/ + +-- ============================================================================ +-- SECTION 2: INSERT/UPDATE CUSTOMER ID +-- ============================================================================ + +PROMPT [2/3] Setting Customer ID... + +DECLARE + v_customer_id VARCHAR2(15) := '&customer_id'; + v_count NUMBER; +BEGIN + -- Trim whitespace + v_customer_id := TRIM(v_customer_id); + + -- Check if empty or null + IF v_customer_id IS NULL OR v_customer_id = '' OR UPPER(v_customer_id) = 'NULL' THEN + DBMS_OUTPUT.PUT_LINE(' Customer ID not specified - skipping'); + RETURN; + END IF; + + -- Check for existing records + SELECT COUNT(*) INTO v_count FROM sys.auth_detalii; + + IF v_count > 0 THEN + -- Update existing + UPDATE sys.auth_detalii + SET detalii = v_customer_id + WHERE ROWNUM = 1; + DBMS_OUTPUT.PUT_LINE(' Updated existing record with Customer ID: ' || v_customer_id); + ELSE + -- Insert new + INSERT INTO sys.auth_detalii (detalii) + VALUES (v_customer_id); + DBMS_OUTPUT.PUT_LINE(' Inserted new record with Customer ID: ' || v_customer_id); + END IF; + + COMMIT; +END; +/ + +-- ============================================================================ +-- SECTION 3: GRANT ACCESS +-- ============================================================================ + +PROMPT [3/3] Granting access to CONTAFIN_ORACLE... + +GRANT SELECT ON sys.auth_detalii TO contafin_oracle; +GRANT SELECT ON sys.auth_detalii TO PUBLIC; + +-- ============================================================================ +-- VERIFICATION +-- ============================================================================ + +PROMPT +PROMPT ======================================== +PROMPT AUTH_DETALII Verification +PROMPT ======================================== +PROMPT + +PROMPT Current AUTH_DETALII content: +SELECT detalii AS customer_id FROM sys.auth_detalii; + +PROMPT +PROMPT ======================================== +PROMPT AUTH_DETALII Initialization Complete +PROMPT ======================================== +PROMPT diff --git a/proxmox/lxc108-oracle/roa-windows-setup/sql/directories-roaupdate.sql b/proxmox/lxc108-oracle/roa-windows-setup/sql/directories-roaupdate.sql new file mode 100644 index 0000000..c5bc3bb --- /dev/null +++ b/proxmox/lxc108-oracle/roa-windows-setup/sql/directories-roaupdate.sql @@ -0,0 +1,245 @@ +-- ============================================================================ +-- ORACLE DIRECTORY OBJECTS FOR ROA UPDATE SYSTEM +-- ============================================================================ +-- Creates 54 Oracle DIRECTORY objects for PACK_UPDATE module +-- Each directory corresponds to a ROAUPDATE subfolder +-- +-- Usage: +-- sqlplus sys/password@service as sysdba @directories-roaupdate.sql +-- +-- Prerequisites: +-- - Physical folders must exist (created by 08-post-install-config.ps1) +-- - Run as SYS with SYSDBA privileges +-- +-- Substitution Variables: +-- &roaupdate_path - Base path for ROAUPDATE folder (e.g., D:\ROAUPDATE) +-- ============================================================================ + +SET ECHO OFF +SET FEEDBACK ON +SET SERVEROUTPUT ON +SET VERIFY OFF +WHENEVER SQLERROR CONTINUE + +PROMPT +PROMPT ======================================== +PROMPT Creating ROAUPDATE Directory Objects +PROMPT ======================================== +PROMPT + +-- Define base path (will prompt if not defined) +DEFINE roaupdate_path = '&roaupdate_path' + +PROMPT Using ROAUPDATE path: &roaupdate_path +PROMPT + +-- ============================================================================ +-- SECTION 1: CREATE MAIN ROAUPDATE DIRECTORY +-- ============================================================================ + +PROMPT [1/3] Creating main ROAUPDATE directory... + +CREATE OR REPLACE DIRECTORY UPD_ROAUPDATE AS '&roaupdate_path'; + +-- ============================================================================ +-- SECTION 2: CREATE MODULE DIRECTORIES (54 directories) +-- ============================================================================ + +PROMPT [2/3] Creating module directories... + +-- Common/Shared +CREATE OR REPLACE DIRECTORY UPD_COMUNROA AS '&roaupdate_path\_ARHIVE\COMUNROA'; +CREATE OR REPLACE DIRECTORY UPD_USERREPORTS AS '&roaupdate_path\_ARHIVE\USERREPORTS'; + +-- Core Applications +CREATE OR REPLACE DIRECTORY UPD_ROAAPROV AS '&roaupdate_path\_ARHIVE\ROAAPROV'; +CREATE OR REPLACE DIRECTORY UPD_ROAAUTO AS '&roaupdate_path\_ARHIVE\ROAAUTO'; +CREATE OR REPLACE DIRECTORY UPD_ROABAVERT AS '&roaupdate_path\_ARHIVE\ROABAVERT'; +CREATE OR REPLACE DIRECTORY UPD_ROACASA AS '&roaupdate_path\_ARHIVE\ROACASA'; +CREATE OR REPLACE DIRECTORY UPD_ROACOMENZI AS '&roaupdate_path\_ARHIVE\ROACOMENZI'; +CREATE OR REPLACE DIRECTORY UPD_ROACONIMPORT AS '&roaupdate_path\_ARHIVE\ROACONIMPORT'; +CREATE OR REPLACE DIRECTORY UPD_ROACONSTRUCTII AS '&roaupdate_path\_ARHIVE\ROACONSTRUCTII'; +CREATE OR REPLACE DIRECTORY UPD_ROACONT AS '&roaupdate_path\_ARHIVE\ROACONT'; +CREATE OR REPLACE DIRECTORY UPD_ROACONTRACTE AS '&roaupdate_path\_ARHIVE\ROACONTRACTE'; + +-- Declarations & Definitions +CREATE OR REPLACE DIRECTORY UPD_ROADECL AS '&roaupdate_path\_ARHIVE\ROADECL'; +CREATE OR REPLACE DIRECTORY UPD_ROADEF AS '&roaupdate_path\_ARHIVE\ROADEF'; +CREATE OR REPLACE DIRECTORY UPD_ROADEFSALARII AS '&roaupdate_path\_ARHIVE\ROADEFSALARII'; +CREATE OR REPLACE DIRECTORY UPD_ROADEPOZIT AS '&roaupdate_path\_ARHIVE\ROADEPOZIT'; +CREATE OR REPLACE DIRECTORY UPD_ROADEVIZE AS '&roaupdate_path\_ARHIVE\ROADEVIZE'; + +-- Invoicing & Suppliers +CREATE OR REPLACE DIRECTORY UPD_ROAFACTURARE AS '&roaupdate_path\_ARHIVE\ROAFACTURARE'; +CREATE OR REPLACE DIRECTORY UPD_ROAFURNIZORI AS '&roaupdate_path\_ARHIVE\ROAFURNIZORI'; + +-- General & Inventory +CREATE OR REPLACE DIRECTORY UPD_ROAGEN AS '&roaupdate_path\_ARHIVE\ROAGEN'; +CREATE OR REPLACE DIRECTORY UPD_ROAGEST AS '&roaupdate_path\_ARHIVE\ROAGEST'; + +-- Restaurant & Hotel +CREATE OR REPLACE DIRECTORY UPD_ROAGRESTAURANT AS '&roaupdate_path\_ARHIVE\ROAGRESTAURANT'; +CREATE OR REPLACE DIRECTORY UPD_ROAHOTEL AS '&roaupdate_path\_ARHIVE\ROAHOTEL'; +CREATE OR REPLACE DIRECTORY UPD_ROAHOTELCONFIG AS '&roaupdate_path\_ARHIVE\ROAHOTELCONFIG'; + +-- Real Estate +CREATE OR REPLACE DIRECTORY UPD_ROAIMOB AS '&roaupdate_path\_ARHIVE\ROAIMOB'; + +-- Payroll +CREATE OR REPLACE DIRECTORY UPD_ROAINCHIDSAL AS '&roaupdate_path\_ARHIVE\ROAINCHIDSAL'; + +-- Services & Operations +CREATE OR REPLACE DIRECTORY UPD_ROALUCRARI AS '&roaupdate_path\_ARHIVE\ROALUCRARI'; +CREATE OR REPLACE DIRECTORY UPD_ROAMANAGER AS '&roaupdate_path\_ARHIVE\ROAMANAGER'; +CREATE OR REPLACE DIRECTORY UPD_ROAMASINI AS '&roaupdate_path\_ARHIVE\ROAMASINI'; + +-- Nomenclatures +CREATE OR REPLACE DIRECTORY UPD_ROANOR AS '&roaupdate_path\_ARHIVE\ROANOR'; +CREATE OR REPLACE DIRECTORY UPD_ROANORFRUVIMED AS '&roaupdate_path\_ARHIVE\ROANORFRUVIMED'; +CREATE OR REPLACE DIRECTORY UPD_ROANORRENAV AS '&roaupdate_path\_ARHIVE\ROANORRENAV'; +CREATE OR REPLACE DIRECTORY UPD_ROANORUTMIDIA AS '&roaupdate_path\_ARHIVE\ROANORUTMIDIA'; + +-- Fixed Assets +CREATE OR REPLACE DIRECTORY UPD_ROAOBINV AS '&roaupdate_path\_ARHIVE\ROAOBINV'; + +-- Offers & Prices +CREATE OR REPLACE DIRECTORY UPD_ROAOFERTARE AS '&roaupdate_path\_ARHIVE\ROAOFERTARE'; +CREATE OR REPLACE DIRECTORY UPD_ROAPRETURI AS '&roaupdate_path\_ARHIVE\ROAPRETURI'; + +-- Printing +CREATE OR REPLACE DIRECTORY UPD_ROAPRINT AS '&roaupdate_path\_ARHIVE\ROAPRINT'; +CREATE OR REPLACE DIRECTORY UPD_ROAPRINT_INITIALIZARI AS '&roaupdate_path\_ARHIVE\ROAPRINT_INITIALIZARI'; + +-- Agriculture & Production +CREATE OR REPLACE DIRECTORY UPD_ROAPRODAGR AS '&roaupdate_path\_ARHIVE\ROAPRODAGR'; +CREATE OR REPLACE DIRECTORY UPD_ROAPRODUCTIE AS '&roaupdate_path\_ARHIVE\ROAPRODUCTIE'; + +-- Documents +CREATE OR REPLACE DIRECTORY UPD_ROAREGISTRATURA AS '&roaupdate_path\_ARHIVE\ROAREGISTRATURA'; + +-- Salary Distribution +CREATE OR REPLACE DIRECTORY UPD_ROAREPARTIZSAL AS '&roaupdate_path\_ARHIVE\ROAREPARTIZSAL'; + +-- Reports & Resources +CREATE OR REPLACE DIRECTORY UPD_ROARES AS '&roaupdate_path\_ARHIVE\ROARES'; + +-- Retail & Restaurant +CREATE OR REPLACE DIRECTORY UPD_ROARESTAURANT AS '&roaupdate_path\_ARHIVE\ROARESTAURANT'; +CREATE OR REPLACE DIRECTORY UPD_ROARETAIL AS '&roaupdate_path\_ARHIVE\ROARETAIL'; +CREATE OR REPLACE DIRECTORY UPD_ROARETAILMON AS '&roaupdate_path\_ARHIVE\ROARETAILMON'; + +-- Payroll & HR +CREATE OR REPLACE DIRECTORY UPD_ROASAL AS '&roaupdate_path\_ARHIVE\ROASAL'; +CREATE OR REPLACE DIRECTORY UPD_ROASALSPEC AS '&roaupdate_path\_ARHIVE\ROASALSPEC'; + +-- Financial Statements +CREATE OR REPLACE DIRECTORY UPD_ROASITFIN AS '&roaupdate_path\_ARHIVE\ROASITFIN'; +CREATE OR REPLACE DIRECTORY UPD_ROASITOP AS '&roaupdate_path\_ARHIVE\ROASITOP'; + +-- Startup & Support +CREATE OR REPLACE DIRECTORY UPD_ROASTART AS '&roaupdate_path\_ARHIVE\ROASTART'; +CREATE OR REPLACE DIRECTORY UPD_ROASUPORT AS '&roaupdate_path\_ARHIVE\ROASUPORT'; + +-- Telecom & Monitoring +CREATE OR REPLACE DIRECTORY UPD_ROATELCOMM AS '&roaupdate_path\_ARHIVE\ROATELCOMM'; +CREATE OR REPLACE DIRECTORY UPD_ROATELMON AS '&roaupdate_path\_ARHIVE\ROATELMON'; + +-- Wine Industry +CREATE OR REPLACE DIRECTORY UPD_ROAVIN AS '&roaupdate_path\_ARHIVE\ROAVIN'; + +-- ============================================================================ +-- SECTION 3: GRANT PERMISSIONS TO CONTAFIN_ORACLE +-- ============================================================================ + +PROMPT [3/3] Granting READ,WRITE permissions to CONTAFIN_ORACLE... + +-- Main directory +GRANT READ, WRITE ON DIRECTORY UPD_ROAUPDATE TO CONTAFIN_ORACLE; + +-- All module directories +GRANT READ, WRITE ON DIRECTORY UPD_COMUNROA TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_USERREPORTS TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAAPROV TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAAUTO TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROABAVERT TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROACASA TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROACOMENZI TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROACONIMPORT TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROACONSTRUCTII TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROACONT TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROACONTRACTE TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROADECL TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROADEF TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROADEFSALARII TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROADEPOZIT TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROADEVIZE TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAFACTURARE TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAFURNIZORI TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAGEN TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAGEST TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAGRESTAURANT TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAHOTEL TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAHOTELCONFIG TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAIMOB TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAINCHIDSAL TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROALUCRARI TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAMANAGER TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAMASINI TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROANOR TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROANORFRUVIMED TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROANORRENAV TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROANORUTMIDIA TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAOBINV TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAOFERTARE TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAPRETURI TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAPRINT TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAPRINT_INITIALIZARI TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAPRODAGR TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAPRODUCTIE TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAREGISTRATURA TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAREPARTIZSAL TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROARES TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROARESTAURANT TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROARETAIL TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROARETAILMON TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROASAL TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROASALSPEC TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROASITFIN TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROASITOP TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROASTART TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROASUPORT TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROATELCOMM TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROATELMON TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAVIN TO CONTAFIN_ORACLE; + +COMMIT; + +-- ============================================================================ +-- VERIFICATION +-- ============================================================================ + +PROMPT +PROMPT ======================================== +PROMPT Directory Objects Verification +PROMPT ======================================== +PROMPT + +PROMPT UPD_* directories created: +SELECT directory_name, directory_path +FROM dba_directories +WHERE directory_name LIKE 'UPD_%' +ORDER BY directory_name; + +PROMPT +PROMPT Directory grants to CONTAFIN_ORACLE: +SELECT table_name AS directory_name, privilege +FROM dba_tab_privs +WHERE grantee = 'CONTAFIN_ORACLE' + AND table_name LIKE 'UPD_%' +ORDER BY table_name; + +PROMPT +PROMPT ======================================== +PROMPT Directory Objects Creation Complete +PROMPT ======================================== +PROMPT diff --git a/proxmox/lxc108-oracle/roa-windows-setup/sql/scheduler-jobs.sql b/proxmox/lxc108-oracle/roa-windows-setup/sql/scheduler-jobs.sql new file mode 100644 index 0000000..67f395c --- /dev/null +++ b/proxmox/lxc108-oracle/roa-windows-setup/sql/scheduler-jobs.sql @@ -0,0 +1,231 @@ +-- ============================================================================ +-- SCHEDULER JOBS FOR ROA UPDATE SYSTEM +-- ============================================================================ +-- Creates Oracle Scheduler jobs for automatic daily updates: +-- - UPDATEROA_ZILNIC: Daily ROA application update (04:00) +-- - UPDATERTVAI_ZILNIC: Daily RTVAI module update (04:30) +-- +-- Jobs are created DISABLED by default - enable manually after verification +-- +-- Usage: +-- sqlplus sys/password@service as sysdba @scheduler-jobs.sql +-- +-- Prerequisites: +-- - CONTAFIN_ORACLE schema with PACK_UPDATE and PACK_ROARTVAI packages +-- - SERVER_INFO configured (server-info-init.sql) +-- - Directory objects created (directories-roaupdate.sql) +-- ============================================================================ + +SET ECHO OFF +SET FEEDBACK ON +SET SERVEROUTPUT ON +WHENEVER SQLERROR CONTINUE + +PROMPT +PROMPT ======================================== +PROMPT Creating ROA Scheduler Jobs +PROMPT ======================================== +PROMPT + +-- ============================================================================ +-- SECTION 1: DROP EXISTING JOBS (if any) +-- ============================================================================ + +PROMPT [1/4] Removing existing jobs (if any)... + +BEGIN + BEGIN + DBMS_SCHEDULER.DROP_JOB(job_name => 'CONTAFIN_ORACLE.UPDATEROA_ZILNIC', force => TRUE); + DBMS_OUTPUT.PUT_LINE(' Dropped existing UPDATEROA_ZILNIC job'); + EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE(' UPDATEROA_ZILNIC job did not exist (OK)'); + END; + + BEGIN + DBMS_SCHEDULER.DROP_JOB(job_name => 'CONTAFIN_ORACLE.UPDATERTVAI_ZILNIC', force => TRUE); + DBMS_OUTPUT.PUT_LINE(' Dropped existing UPDATERTVAI_ZILNIC job'); + EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE(' UPDATERTVAI_ZILNIC job did not exist (OK)'); + END; +END; +/ + +-- ============================================================================ +-- SECTION 2: CREATE UPDATEROA_ZILNIC JOB +-- ============================================================================ + +PROMPT [2/4] Creating UPDATEROA_ZILNIC job... + +BEGIN + DBMS_SCHEDULER.CREATE_JOB( + job_name => 'CONTAFIN_ORACLE.UPDATEROA_ZILNIC', + job_type => 'STORED_PROCEDURE', + job_action => 'CONTAFIN_ORACLE.PACK_UPDATE.UPDATEROA', + number_of_arguments => 6, + start_date => TRUNC(SYSDATE) + 1 + 4/24, -- Tomorrow at 04:00 + repeat_interval => 'FREQ=DAILY;INTERVAL=1', + end_date => NULL, + job_class => 'DEFAULT_JOB_CLASS', + enabled => FALSE, -- DISABLED by default + auto_drop => FALSE, + comments => 'Daily ROA application update - runs at 04:00' + ); + + -- Set job arguments for PACK_UPDATE.UPDATEROA procedure + -- Arguments: p_update_baza, p_update_aplicatii, p_update_rapoarte, p_module, p_versiune, p_nivel + DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE( + job_name => 'CONTAFIN_ORACLE.UPDATEROA_ZILNIC', + argument_position => 1, + argument_value => '1' -- p_update_baza: Update database objects + ); + + DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE( + job_name => 'CONTAFIN_ORACLE.UPDATEROA_ZILNIC', + argument_position => 2, + argument_value => '1' -- p_update_aplicatii: Update applications + ); + + DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE( + job_name => 'CONTAFIN_ORACLE.UPDATEROA_ZILNIC', + argument_position => 3, + argument_value => '1' -- p_update_rapoarte: Update reports + ); + + DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE( + job_name => 'CONTAFIN_ORACLE.UPDATEROA_ZILNIC', + argument_position => 4, + argument_value => '' -- p_module: All modules (empty = all) + ); + + DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE( + job_name => 'CONTAFIN_ORACLE.UPDATEROA_ZILNIC', + argument_position => 5, + argument_value => '' -- p_versiune: Latest version (empty = latest) + ); + + DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE( + job_name => 'CONTAFIN_ORACLE.UPDATEROA_ZILNIC', + argument_position => 6, + argument_value => '-3' -- p_nivel: Update level (-3 = production) + ); + + DBMS_OUTPUT.PUT_LINE(' UPDATEROA_ZILNIC job created (DISABLED)'); + DBMS_OUTPUT.PUT_LINE(' Schedule: Daily at 04:00'); + DBMS_OUTPUT.PUT_LINE(' Action: PACK_UPDATE.UPDATEROA(1, 1, 1, '''', '''', -3)'); +END; +/ + +-- ============================================================================ +-- SECTION 3: CREATE UPDATERTVAI_ZILNIC JOB +-- ============================================================================ + +PROMPT [3/4] Creating UPDATERTVAI_ZILNIC job... + +BEGIN + DBMS_SCHEDULER.CREATE_JOB( + job_name => 'CONTAFIN_ORACLE.UPDATERTVAI_ZILNIC', + job_type => 'STORED_PROCEDURE', + job_action => 'CONTAFIN_ORACLE.PACK_ROARTVAI.UPDATERTVAI', + number_of_arguments => 0, + start_date => TRUNC(SYSDATE) + 1 + 4.5/24, -- Tomorrow at 04:30 + repeat_interval => 'FREQ=DAILY;INTERVAL=1', + end_date => NULL, + job_class => 'DEFAULT_JOB_CLASS', + enabled => FALSE, -- DISABLED by default + auto_drop => FALSE, + comments => 'Daily RTVAI module update - runs at 04:30' + ); + + DBMS_OUTPUT.PUT_LINE(' UPDATERTVAI_ZILNIC job created (DISABLED)'); + DBMS_OUTPUT.PUT_LINE(' Schedule: Daily at 04:30'); + DBMS_OUTPUT.PUT_LINE(' Action: PACK_ROARTVAI.UPDATERTVAI()'); +END; +/ + +-- ============================================================================ +-- SECTION 4: GRANT SCHEDULER PRIVILEGES TO CONTAFIN_ORACLE +-- ============================================================================ + +PROMPT [4/4] Granting scheduler privileges to CONTAFIN_ORACLE... + +-- Grant CREATE JOB privilege (may already exist) +BEGIN + EXECUTE IMMEDIATE 'GRANT CREATE JOB TO CONTAFIN_ORACLE'; + DBMS_OUTPUT.PUT_LINE(' Granted CREATE JOB to CONTAFIN_ORACLE'); +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE(' CREATE JOB privilege already granted or error: ' || SQLERRM); +END; +/ + +-- Grant MANAGE SCHEDULER privilege for job management +BEGIN + EXECUTE IMMEDIATE 'GRANT MANAGE SCHEDULER TO CONTAFIN_ORACLE'; + DBMS_OUTPUT.PUT_LINE(' Granted MANAGE SCHEDULER to CONTAFIN_ORACLE'); +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE(' MANAGE SCHEDULER privilege already granted or error: ' || SQLERRM); +END; +/ + +-- Grant CREATE EXTERNAL JOB for ExecuteScriptOS functionality +BEGIN + EXECUTE IMMEDIATE 'GRANT CREATE EXTERNAL JOB TO CONTAFIN_ORACLE'; + DBMS_OUTPUT.PUT_LINE(' Granted CREATE EXTERNAL JOB to CONTAFIN_ORACLE'); +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE(' CREATE EXTERNAL JOB privilege already granted or error: ' || SQLERRM); +END; +/ + +COMMIT; + +-- ============================================================================ +-- VERIFICATION +-- ============================================================================ + +PROMPT +PROMPT ======================================== +PROMPT Scheduler Jobs Verification +PROMPT ======================================== +PROMPT + +PROMPT CONTAFIN_ORACLE scheduled jobs: +SELECT job_name, + job_type, + enabled, + state, + TO_CHAR(next_run_date, 'YYYY-MM-DD HH24:MI:SS') AS next_run, + repeat_interval +FROM dba_scheduler_jobs +WHERE owner = 'CONTAFIN_ORACLE' + AND job_name IN ('UPDATEROA_ZILNIC', 'UPDATERTVAI_ZILNIC') +ORDER BY job_name; + +PROMPT +PROMPT Job arguments for UPDATEROA_ZILNIC: +SELECT argument_position, argument_name, value +FROM dba_scheduler_job_args +WHERE owner = 'CONTAFIN_ORACLE' + AND job_name = 'UPDATEROA_ZILNIC' +ORDER BY argument_position; + +PROMPT +PROMPT ======================================== +PROMPT Scheduler Jobs Creation Complete +PROMPT ======================================== +PROMPT +PROMPT IMPORTANT: Jobs are created DISABLED by default. +PROMPT To enable a job after verifying configuration: +PROMPT +PROMPT -- Enable UPDATEROA_ZILNIC +PROMPT EXEC DBMS_SCHEDULER.ENABLE('CONTAFIN_ORACLE.UPDATEROA_ZILNIC'); +PROMPT +PROMPT -- Enable UPDATERTVAI_ZILNIC +PROMPT EXEC DBMS_SCHEDULER.ENABLE('CONTAFIN_ORACLE.UPDATERTVAI_ZILNIC'); +PROMPT +PROMPT To run a job immediately for testing: +PROMPT EXEC DBMS_SCHEDULER.RUN_JOB('CONTAFIN_ORACLE.UPDATEROA_ZILNIC'); +PROMPT diff --git a/proxmox/lxc108-oracle/roa-windows-setup/sql/server-info-init.sql b/proxmox/lxc108-oracle/roa-windows-setup/sql/server-info-init.sql new file mode 100644 index 0000000..d7a801b --- /dev/null +++ b/proxmox/lxc108-oracle/roa-windows-setup/sql/server-info-init.sql @@ -0,0 +1,260 @@ +-- ============================================================================ +-- SERVER_INFO INITIALIZATION FOR ROA UPDATE SYSTEM +-- ============================================================================ +-- Initializes SERVER_INFO table with required values for PACK_UPDATE +-- Passwords are encoded using pack_utils.encodebase64(pack_utils.zipblob(pack_utils.Clob2Blob())) +-- +-- Usage: +-- sqlplus contafin_oracle/password@service @server-info-init.sql +-- +-- Prerequisites: +-- - CONTAFIN_ORACLE schema imported with PACK_UTILS package +-- - SERVER_INFO table exists +-- +-- Substitution Variables (prompted if not defined): +-- &roaupdate_path - Base path for ROAUPDATE folder (e.g., D:\ROAUPDATE) +-- &sqlplus_path - Full path to sqlplus.exe +-- &password_sys_encoded - Encoded SYS password (use encode_password helper) +-- &password_contafin_encoded - Encoded CONTAFIN_ORACLE password +-- &email_from - Email sender address +-- &email_to - Email recipient address +-- &email_smtp - SMTP server hostname +-- &email_username - SMTP authentication username +-- &email_password - SMTP authentication password (plain text) +-- ============================================================================ + +SET ECHO OFF +SET FEEDBACK ON +SET SERVEROUTPUT ON +SET VERIFY OFF +WHENEVER SQLERROR CONTINUE + +PROMPT +PROMPT ======================================== +PROMPT Initializing SERVER_INFO Configuration +PROMPT ======================================== +PROMPT + +-- ============================================================================ +-- PASSWORD ENCODING HELPER +-- ============================================================================ +-- To encode a password, run in SQL*Plus: +-- SELECT CAST(pack_utils.encodebase64(pack_utils.zipblob( +-- pack_utils.Clob2Blob('your_password'))) AS VARCHAR2(500)) FROM dual; +-- +-- Examples: +-- 'romfastsoft' => 'H4sIAAAAAAAACyvKz01LLC4pzk8rAQC2TmakCwAAAA==' +-- 'ROMFASTSOFT' => 'H4sIAAAAAAAACwvy93VzDA4J9ncLAQBe3GUpCwAAAA==' +-- ============================================================================ + +-- Define variables (will prompt if not defined) +DEFINE roaupdate_path = '&roaupdate_path' +DEFINE sqlplus_path = '&sqlplus_path' +DEFINE password_sys_encoded = '&password_sys_encoded' +DEFINE password_contafin_encoded = '&password_contafin_encoded' +DEFINE email_from = '&email_from' +DEFINE email_to = '&email_to' +DEFINE email_smtp = '&email_smtp' +DEFINE email_username = '&email_username' +DEFINE email_password = '&email_password' + +PROMPT Configuration values: +PROMPT ROAUPDATE Path: &roaupdate_path +PROMPT SQLPlus Path: &sqlplus_path +PROMPT Email From: &email_from +PROMPT Email To: &email_to +PROMPT SMTP Server: &email_smtp +PROMPT + +-- ============================================================================ +-- SECTION 1: SYSTEM PASSWORDS (ENCODED) +-- ============================================================================ + +PROMPT [1/5] Configuring system passwords... + +MERGE INTO server_info t +USING (SELECT 'PASSWORD_SYS' AS varname, '&password_sys_encoded' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +MERGE INTO server_info t +USING (SELECT 'PASSWORD_CONTAFIN_ORACLE' AS varname, '&password_contafin_encoded' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +-- ============================================================================ +-- SECTION 2: LOCAL PATHS +-- ============================================================================ + +PROMPT [2/5] Configuring local paths... + +MERGE INTO server_info t +USING (SELECT 'ROAUPDATEPATH' AS varname, '&roaupdate_path' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +MERGE INTO server_info t +USING (SELECT 'SQLPLUSPATH' AS varname, '&sqlplus_path' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +MERGE INTO server_info t +USING (SELECT 'POWERSHELLPATH' AS varname, 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +-- ============================================================================ +-- SECTION 3: UPDATE CONFIGURATION +-- ============================================================================ + +PROMPT [3/5] Configuring update settings... + +-- Enable prerequisites check +MERGE INTO server_info t +USING (SELECT 'UPDATEPREREQ' AS varname, '1' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +-- Use PowerShell for downloads (more reliable than UTL_HTTP) +MERGE INTO server_info t +USING (SELECT 'POWERSHELLDOWNLOAD' AS varname, '1' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +-- PowerShell download timeout (seconds) +MERGE INTO server_info t +USING (SELECT 'POWERSHELLTIMEOUT' AS varname, '30' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +-- ============================================================================ +-- SECTION 4: EMAIL CONFIGURATION +-- ============================================================================ + +PROMPT [4/5] Configuring email settings... + +-- Sender address +MERGE INTO server_info t +USING (SELECT 'EMAIL_FROM' AS varname, '&email_from' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +-- Recipient address +MERGE INTO server_info t +USING (SELECT 'EMAIL_TO' AS varname, '&email_to' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +-- CC (empty by default) +MERGE INTO server_info t +USING (SELECT 'EMAIL_CC' AS varname, '' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +-- SMTP Server +MERGE INTO server_info t +USING (SELECT 'EMAIL_SMTP' AS varname, '&email_smtp' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +-- SMTP Port +MERGE INTO server_info t +USING (SELECT 'EMAIL_PORT' AS varname, '25' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +-- Email method (UTL_SMTP is more compatible than UTL_MAIL) +MERGE INTO server_info t +USING (SELECT 'EMAIL_METHOD' AS varname, 'UTL_SMTP' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +-- SMTP authentication username +MERGE INTO server_info t +USING (SELECT 'EMAIL_USERNAME' AS varname, '&email_username' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +-- SMTP authentication password (stored as plain text - encode if needed) +MERGE INTO server_info t +USING (SELECT 'EMAIL_PASSWORD' AS varname, '&email_password' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +-- ============================================================================ +-- SECTION 5: UPDATE SERVER URLs (ROMFAST Standard) +-- ============================================================================ + +PROMPT [5/5] Configuring update server URLs... + +-- Main update server URL +MERGE INTO server_info t +USING (SELECT 'UPD_URL_APP' AS varname, 'https://update.romfast.ro/roa/' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +-- Backup update server URL +MERGE INTO server_info t +USING (SELECT 'UPD_URL_APP_BACKUP' AS varname, 'https://update2.romfast.ro/roa/' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +-- Version check URL +MERGE INTO server_info t +USING (SELECT 'UPD_URL_VERSION' AS varname, 'https://update.romfast.ro/version.txt' AS varvalue FROM dual) s +ON (t.varname = s.varname) +WHEN MATCHED THEN UPDATE SET t.varvalue = s.varvalue +WHEN NOT MATCHED THEN INSERT (varname, varvalue) VALUES (s.varname, s.varvalue); + +COMMIT; + +-- ============================================================================ +-- VERIFICATION +-- ============================================================================ + +PROMPT +PROMPT ======================================== +PROMPT SERVER_INFO Configuration Verification +PROMPT ======================================== +PROMPT + +PROMPT Current SERVER_INFO values (passwords hidden): +SELECT varname, + CASE + WHEN UPPER(varname) LIKE '%PASSWORD%' THEN '***HIDDEN***' + ELSE varvalue + END AS varvalue +FROM server_info +WHERE varname IN ( + 'PASSWORD_SYS', 'PASSWORD_CONTAFIN_ORACLE', + 'ROAUPDATEPATH', 'SQLPLUSPATH', 'POWERSHELLPATH', + 'UPDATEPREREQ', 'POWERSHELLDOWNLOAD', 'POWERSHELLTIMEOUT', + 'EMAIL_FROM', 'EMAIL_TO', 'EMAIL_CC', 'EMAIL_SMTP', 'EMAIL_PORT', + 'EMAIL_METHOD', 'EMAIL_USERNAME', 'EMAIL_PASSWORD', + 'UPD_URL_APP', 'UPD_URL_APP_BACKUP', 'UPD_URL_VERSION' +) +ORDER BY varname; + +PROMPT +PROMPT ======================================== +PROMPT SERVER_INFO Initialization Complete +PROMPT ======================================== +PROMPT