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 <noreply@anthropic.com>
This commit is contained in:
Marius
2026-01-29 01:24:15 +02:00
parent aaf5942f6b
commit 648342c0a8
9 changed files with 1614 additions and 177 deletions

View File

@@ -25,49 +25,32 @@ Scripts and documentation for setting up ROA Oracle Database on Windows servers:
## Quick Start ## Quick Start
1. Download Oracle 21c XE or SE from Oracle ### Oracle 21c Express Edition (XE) - Gratuit
2. Install Oracle (see `docs/00-INSTALL-ORACLE-XE.md` or `docs/00-INSTALL-ORACLE-SE.md`) 1. Download și instalează Oracle 21c XE (see `docs/00-INSTALL-ORACLE-XE.md`)
3. Copy DMP files to `C:\DMPDIR\` 2. Copiază fișierele DMP în `C:\DMPDIR\`
4. Copy `config.example.ps1` to `config.ps1` and edit values 3. Rulează instalarea:
5. Run scripts in order: `01` -> `07` ```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 ```cmd
# Complete installation (all scripts in order)
RunAll.cmd
# Or run individual scripts
Run.cmd 01-setup-database.ps1 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 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 ## Configuration
@@ -103,6 +86,7 @@ roa-windows-setup/
│ ├── 05-import-companies.ps1 # Batch import company schemas │ ├── 05-import-companies.ps1 # Batch import company schemas
│ ├── 06-add-company.ps1 # Add new company to existing server │ ├── 06-add-company.ps1 # Add new company to existing server
│ ├── 07-verify-installation.ps1# Verify installation completeness │ ├── 07-verify-installation.ps1# Verify installation completeness
│ ├── 08-post-install-config.ps1# ROAUPDATE folders, SERVER_INFO, jobs
│ └── 99-uninstall-roa.ps1 # Uninstall/cleanup script │ └── 99-uninstall-roa.ps1 # Uninstall/cleanup script
├── config/ # Configuration templates ├── config/ # Configuration templates
@@ -120,6 +104,10 @@ roa-windows-setup/
│ ├── sys-objects.sql # SYS custom objects (AUTH_PACK, etc.) │ ├── sys-objects.sql # SYS custom objects (AUTH_PACK, etc.)
│ ├── synonyms-public.sql # Public synonyms for CONTAFIN_ORACLE │ ├── synonyms-public.sql # Public synonyms for CONTAFIN_ORACLE
│ ├── grants-public.sql # Public grants │ ├── 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 │ ├── verify-objects.sql # Verification queries
│ └── uninstall-roa.sql # Cleanup script (removes all ROA objects) │ └── 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 | | `05-import-companies.ps1` | Batch import company schemas from DMP files | Yes |
| `06-add-company.ps1` | Add new company to existing server | Optional | | `06-add-company.ps1` | Add new company to existing server | Optional |
| `07-verify-installation.ps1` | Verify installation completeness (objects, grants, synonyms) | Yes | | `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 | | `99-uninstall-roa.ps1` | Remove all ROA objects (cleanup for re-testing) | Optional |
--- ---
## Architecture Differences ## Architecture Differences
### Oracle 21c Standard Edition (non-CDB) ### Oracle 21c Standard Edition (non-CDB) - RECOMANDAT pentru producție
Traditional single-database architecture (legacy compatibility). Traditional single-database architecture (legacy compatibility).
@@ -159,12 +148,19 @@ Traditional single-database architecture (legacy compatibility).
| Connection | `system/pass@ROA` | | Connection | `system/pass@ROA` |
| Datafiles | `C:\app\oracle\oradata\ROA\` | | Datafiles | `C:\app\oracle\oradata\ROA\` |
**Advantages:** **La instalare:**
- Simpler administration - Selectezi "Create and configure a single instance database"
- Compatible with Oracle 10g migration scripts - **Debifezi** "Create as Container database"
- No PDB management overhead - 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. Modern multitenant architecture with Container Database.
@@ -177,13 +173,23 @@ Modern multitenant architecture with Container Database.
| Connection | `system/pass@XEPDB1` | | Connection | `system/pass@XEPDB1` |
| Datafiles | `C:\app\oracle\oradata\XE\XEPDB1\` | | Datafiles | `C:\app\oracle\oradata\XE\XEPDB1\` |
**Advantages:** **La instalare:**
- Free license (Express Edition) - Rulezi installer-ul XE
- Modern architecture - Baza de date se creează automat (CDB: XE + PDB: XEPDB1)
- Easy backup/clone of PDB - 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:** **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 .\03-import-contafin.ps1
.\04-create-synonyms-grants.ps1 .\04-create-synonyms-grants.ps1
.\05-import-companies.ps1 .\05-import-companies.ps1
.\08-post-install-config.ps1
.\07-verify-installation.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 ### Add New Company
```powershell ```powershell

View File

@@ -18,7 +18,8 @@ echo 2. 02-create-sys-objects.ps1
echo 3. 03-import-contafin.ps1 echo 3. 03-import-contafin.ps1
echo 4. 04-create-synonyms-grants.ps1 echo 4. 04-create-synonyms-grants.ps1
echo 5. 05-import-companies.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.
echo Prerequisites: echo Prerequisites:
echo - Oracle 21c XE or SE installed and running echo - Oracle 21c XE or SE installed and running
@@ -37,7 +38,7 @@ set ERRORS=0
REM Script 1: Setup Database REM Script 1: Setup Database
echo. echo.
echo [1/6] Running 01-setup-database.ps1... echo [1/7] Running 01-setup-database.ps1...
echo ============================================================ echo ============================================================
powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%SCRIPTS_DIR%\01-setup-database.ps1" powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%SCRIPTS_DIR%\01-setup-database.ps1"
if %ERRORLEVEL% NEQ 0 ( if %ERRORLEVEL% NEQ 0 (
@@ -49,7 +50,7 @@ if %ERRORLEVEL% NEQ 0 (
REM Script 2: Create SYS Objects REM Script 2: Create SYS Objects
echo. echo.
echo [2/6] Running 02-create-sys-objects.ps1... echo [2/7] Running 02-create-sys-objects.ps1...
echo ============================================================ echo ============================================================
powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%SCRIPTS_DIR%\02-create-sys-objects.ps1" powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%SCRIPTS_DIR%\02-create-sys-objects.ps1"
if %ERRORLEVEL% NEQ 0 ( if %ERRORLEVEL% NEQ 0 (
@@ -61,7 +62,7 @@ if %ERRORLEVEL% NEQ 0 (
REM Script 3: Import CONTAFIN_ORACLE REM Script 3: Import CONTAFIN_ORACLE
echo. echo.
echo [3/6] Running 03-import-contafin.ps1... echo [3/7] Running 03-import-contafin.ps1...
echo ============================================================ echo ============================================================
powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%SCRIPTS_DIR%\03-import-contafin.ps1" powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%SCRIPTS_DIR%\03-import-contafin.ps1"
if %ERRORLEVEL% NEQ 0 ( if %ERRORLEVEL% NEQ 0 (
@@ -73,7 +74,7 @@ if %ERRORLEVEL% NEQ 0 (
REM Script 4: Create Synonyms and Grants REM Script 4: Create Synonyms and Grants
echo. echo.
echo [4/6] Running 04-create-synonyms-grants.ps1... echo [4/7] Running 04-create-synonyms-grants.ps1...
echo ============================================================ echo ============================================================
powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%SCRIPTS_DIR%\04-create-synonyms-grants.ps1" powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%SCRIPTS_DIR%\04-create-synonyms-grants.ps1"
if %ERRORLEVEL% NEQ 0 ( if %ERRORLEVEL% NEQ 0 (
@@ -85,7 +86,7 @@ if %ERRORLEVEL% NEQ 0 (
REM Script 5: Import Companies REM Script 5: Import Companies
echo. echo.
echo [5/6] Running 05-import-companies.ps1... echo [5/7] Running 05-import-companies.ps1...
echo ============================================================ echo ============================================================
powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%SCRIPTS_DIR%\05-import-companies.ps1" powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%SCRIPTS_DIR%\05-import-companies.ps1"
if %ERRORLEVEL% NEQ 0 ( if %ERRORLEVEL% NEQ 0 (
@@ -95,9 +96,21 @@ if %ERRORLEVEL% NEQ 0 (
if /i not "!CONTINUE!"=="Y" goto :summary if /i not "!CONTINUE!"=="Y" goto :summary
) )
REM Script 6: Verify Installation REM Script 6: Post-Installation Configuration
echo. 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 ============================================================ echo ============================================================
powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%SCRIPTS_DIR%\07-verify-installation.ps1" powershell.exe -ExecutionPolicy Bypass -NoProfile -File "%SCRIPTS_DIR%\07-verify-installation.ps1"
if %ERRORLEVEL% NEQ 0 ( if %ERRORLEVEL% NEQ 0 (

View File

@@ -173,61 +173,9 @@ $env:PATH = "$env:ORACLE_HOME\bin;$env:PATH"
sqlplus system/romfastsoft@localhost:1521/ROA sqlplus system/romfastsoft@localhost:1521/ROA
``` ```
### Configure for Old Client Compatibility ## Memory Configuration (Opțional)
```powershell Pentru Standard Edition cu 16GB RAM:
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:
```sql ```sql
-- Connect as SYSDBA -- Connect as SYSDBA
@@ -256,23 +204,19 @@ Recommended memory allocation:
--- ---
## Create ROA Tablespace ## Ce NU trebuie făcut manual
```sql Următoarele sunt create **automat** de scriptul `01-setup-database.ps1`:
sqlplus sys/romfastsoft@localhost:1521/ROA as sysdba
-- Create tablespace | Component | Script |
CREATE TABLESPACE ROA |-----------|--------|
DATAFILE 'C:\app\oracle\oradata\ROA\roa01.dbf' | Tablespace ROA | `01-setup-database.ps1` |
SIZE 2G | DMPDIR directory | `01-setup-database.ps1` |
AUTOEXTEND ON NEXT 512M | Password profile (UNLIMITED) | `01-setup-database.ps1` |
MAXSIZE UNLIMITED; | User CONTAFIN_ORACLE | `01-setup-database.ps1` |
| sqlnet.ora (client vechi) | `01-setup-database.ps1` |
-- Verify **NU rula manual comenzile SQL pentru acestea** - scripturile le fac automat!
SELECT tablespace_name, file_name, bytes/1024/1024 as MB
FROM dba_data_files
WHERE tablespace_name = 'ROA';
```
--- ---

View File

@@ -124,28 +124,6 @@ Version 21.3.0.0.0
SQL> 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 ## CDB/PDB Architecture
Oracle XE uses Container Database (CDB) 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 Următoarele sunt create **automat** de scriptul `01-setup-database.ps1`:
-- Connect to PDB
sqlplus sys/romfastsoft@localhost:1521/XEPDB1 as sysdba
-- Create Windows directory | Component | Script |
host mkdir C:\DMPDIR |-----------|--------|
| 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 **NU rula manual comenzile SQL pentru acestea** - scripturile le fac automat!
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';
```
--- ---

View File

@@ -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
}

View File

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

View File

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

View File

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

View File

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