Compare commits

..

2 Commits

Author SHA1 Message Date
Marius
648342c0a8 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>
2026-01-29 01:24:15 +02:00
Marius
aaf5942f6b Fix 04-create-synonyms-grants.ps1 to use SQL files instead of inline SQL
The script had inline SQL that was missing 20 synonyms compared to
synonyms-public.sql, causing PACK_DEF and other packages to fail with
missing synonym errors (SYN_VNOM_UM_ISO, SYN_ATAS_*, SYN_SAL_*, etc.).

Changes:
- Remove all inline SQL (~350 lines)
- Now runs synonyms-public.sql (81 synonyms vs 61 before)
- Now runs grants-public.sql for all grants and ACL
- Add verification of SESIUNE context

This ensures the script stays in sync with the SQL files and
prevents future desync issues.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 00:30:12 +02:00
10 changed files with 1692 additions and 535 deletions

View File

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

View File

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

View File

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

View File

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

View File

@@ -6,8 +6,8 @@
.DESCRIPTION
Creates public synonyms for CONTAFIN_ORACLE objects and configures:
- Public synonyms for tables, views, packages, types
- Public grants (SELECT, EXECUTE, REFERENCES)
- Public synonyms for tables, views, packages, types (via synonyms-public.sql)
- Public grants (SELECT, EXECUTE, REFERENCES) (via grants-public.sql)
- SESIUNE context
- Network ACL for CONTAFIN_ORACLE
@@ -67,6 +67,24 @@ try {
$oraHome = Get-OracleHome -OracleHome $OracleHome
Write-LogSuccess "Oracle Home: $oraHome"
# Determine SQL scripts directory
if (-not $SqlScriptsDir) {
$SqlScriptsDir = Join-Path $PSScriptRoot "..\sql"
}
# Verify SQL files exist
$synonymsScript = Join-Path $SqlScriptsDir "synonyms-public.sql"
$grantsScript = Join-Path $SqlScriptsDir "grants-public.sql"
if (-not (Test-Path -Path $synonymsScript)) {
throw "synonyms-public.sql not found at $synonymsScript"
}
if (-not (Test-Path -Path $grantsScript)) {
throw "grants-public.sql not found at $grantsScript"
}
Write-Log "SQL scripts directory: $SqlScriptsDir"
# Test connection
Write-Log "Testing database connection..."
if (-not (Test-OracleConnection -OracleHome $oraHome -ServiceName $ServiceName `
@@ -86,307 +104,16 @@ try {
}
Write-LogSuccess "CONTAFIN_ORACLE has $totalObjects objects"
# Create SESIUNE context
Write-LogSection "Creating SESIUNE Context"
$contextSql = @"
SET ECHO OFF FEEDBACK ON VERIFY OFF
-- Drop existing context if exists
BEGIN
EXECUTE IMMEDIATE 'DROP CONTEXT SESIUNE';
EXCEPTION
WHEN OTHERS THEN NULL;
END;
/
-- Create context
CREATE CONTEXT SESIUNE USING CONTAFIN_ORACLE.SET_VARIABILE;
SELECT 'CONTEXT_CREATED' FROM dual;
EXIT;
"@
$result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $contextSql
if ($result -match "CONTEXT_CREATED") {
Write-LogSuccess "Context SESIUNE created"
}
else {
Write-LogWarning "Could not verify context creation"
}
# Create public synonyms SQL
# =========================================================================
# STEP 1: Create Public Synonyms (using synonyms-public.sql)
# =========================================================================
Write-LogSection "Creating Public Synonyms"
$synonymsSql = @"
SET ECHO OFF FEEDBACK ON VERIFY OFF SERVEROUTPUT ON
SPOOL synonyms_grants.log
PROMPT
PROMPT =============================================
PROMPT Creating Public Synonyms for CONTAFIN_ORACLE
PROMPT =============================================
PROMPT
-- Core synonyms with grants
PROMPT Creating SYN_DEF_GRUP...
CREATE OR REPLACE PUBLIC SYNONYM SYN_DEF_GRUP FOR CONTAFIN_ORACLE.DEF_GRUP;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.DEF_GRUP TO PUBLIC;
PROMPT Creating SYN_DEF_PROGRAME...
CREATE OR REPLACE PUBLIC SYNONYM SYN_DEF_PROGRAME FOR CONTAFIN_ORACLE.DEF_PROGRAME;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.DEF_PROGRAME TO PUBLIC;
PROMPT Creating SYN_VDEF_PROGRAME...
CREATE OR REPLACE PUBLIC SYNONYM SYN_VDEF_PROGRAME FOR CONTAFIN_ORACLE.VDEF_PROGRAME;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.VDEF_PROGRAME TO PUBLIC;
PROMPT Creating SYN_LUNILEAN...
CREATE OR REPLACE PUBLIC SYNONYM SYN_LUNILEAN FOR CONTAFIN_ORACLE.LUNILEAN;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.LUNILEAN TO PUBLIC;
PROMPT Creating SYN_NOM_FIRME...
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_FIRME FOR CONTAFIN_ORACLE.NOM_FIRME;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_FIRME TO PUBLIC;
PROMPT Creating SYN_NOM_PROGRAME...
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_PROGRAME FOR CONTAFIN_ORACLE.NOM_PROGRAME;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_PROGRAME TO PUBLIC;
PROMPT Creating SYN_PACK_DREPTURI...
CREATE OR REPLACE PUBLIC SYNONYM SYN_PACK_DREPTURI FOR CONTAFIN_ORACLE.PACK_DREPTURI;
GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_DREPTURI TO PUBLIC;
PROMPT Creating SYN_UTILIZATORI...
CREATE OR REPLACE PUBLIC SYNONYM SYN_UTILIZATORI FOR CONTAFIN_ORACLE.UTILIZATORI;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.UTILIZATORI TO PUBLIC;
PROMPT Creating syn_vdef_util_programe...
CREATE OR REPLACE PUBLIC SYNONYM SYN_VDEF_UTIL_PROGRAME FOR CONTAFIN_ORACLE.VDEF_UTIL_PROGRAME;
GRANT SELECT ON CONTAFIN_ORACLE.VDEF_UTIL_PROGRAME TO PUBLIC;
PROMPT Creating syn_vdef_util_firme...
CREATE OR REPLACE PUBLIC SYNONYM SYN_VDEF_UTIL_FIRME FOR CONTAFIN_ORACLE.VDEF_UTIL_FIRME;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.VDEF_UTIL_FIRME TO PUBLIC;
PROMPT Creating SYN_VDEF_UTIL_OBIECTE...
CREATE OR REPLACE PUBLIC SYNONYM SYN_VDEF_UTIL_OBIECTE FOR CONTAFIN_ORACLE.VDEF_UTIL_OBIECTE;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.VDEF_UTIL_OBIECTE TO PUBLIC;
PROMPT Creating SYN_VUTILIZATORI...
CREATE OR REPLACE PUBLIC SYNONYM SYN_VUTILIZATORI FOR CONTAFIN_ORACLE.VUTILIZATORI;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.VUTILIZATORI TO PUBLIC;
PROMPT Creating SYN_VDEF_UTIL_GRUP...
CREATE OR REPLACE PUBLIC SYNONYM SYN_VDEF_UTIL_GRUP FOR CONTAFIN_ORACLE.VDEF_UTIL_GRUP;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.VDEF_UTIL_GRUP TO PUBLIC;
PROMPT Creating SYN_DEF_GRUP_DREPT...
CREATE OR REPLACE PUBLIC SYNONYM SYN_DEF_GRUP_DREPT FOR CONTAFIN_ORACLE.DEF_GRUP_DREPT;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.DEF_GRUP_DREPT TO PUBLIC;
PROMPT Creating SYN_OPTIUNI_PROGRAME...
CREATE OR REPLACE PUBLIC SYNONYM SYN_OPTIUNI_PROGRAME FOR CONTAFIN_ORACLE.OPTIUNI_PROGRAME;
GRANT SELECT ON CONTAFIN_ORACLE.OPTIUNI_PROGRAME TO PUBLIC;
PROMPT Creating SYN_HELPCONT...
CREATE OR REPLACE PUBLIC SYNONYM SYN_HELPCONT FOR CONTAFIN_ORACLE.HELPCONT;
GRANT SELECT ON CONTAFIN_ORACLE.HELPCONT TO PUBLIC;
PROMPT Creating SYN_V_NOM_FIRME...
CREATE OR REPLACE PUBLIC SYNONYM SYN_V_NOM_FIRME FOR CONTAFIN_ORACLE.V_NOM_FIRME;
GRANT SELECT ON CONTAFIN_ORACLE.V_NOM_FIRME TO PUBLIC;
-- Nomenclators
PROMPT Creating nomenclator synonyms...
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_FORME_JURIDICE FOR CONTAFIN_ORACLE.NOM_FORME_JURIDICE;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_FORME_JURIDICE TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_FORME_ORGANIZARE FOR CONTAFIN_ORACLE.NOM_FORME_ORGANIZARE;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_FORME_ORGANIZARE TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_TIP_SOCIETATE FOR CONTAFIN_ORACLE.NOM_TIP_SOCIETATE;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_TIP_SOCIETATE TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_FORME_PROPRIETATE FOR CONTAFIN_ORACLE.NOM_FORME_PROPRIETATE;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_FORME_PROPRIETATE TO PUBLIC;
-- String aggregation
PROMPT Creating stringAgg synonym...
CREATE OR REPLACE PUBLIC SYNONYM STRINGAGG FOR CONTAFIN_ORACLE.STRINGAGG;
GRANT EXECUTE ON CONTAFIN_ORACLE.STRINGAGG TO PUBLIC;
-- Types
PROMPT Creating type synonyms...
BEGIN
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.STRINGAGGTYPE TO PUBLIC';
EXCEPTION WHEN OTHERS THEN NULL;
END;
/
CREATE OR REPLACE PUBLIC SYNONYM CHAR_ROW FOR CONTAFIN_ORACLE.CHAR_ROW;
CREATE OR REPLACE PUBLIC SYNONYM CHAR_TAB FOR CONTAFIN_ORACLE.CHAR_TAB;
CREATE OR REPLACE PUBLIC SYNONYM NUM_ROW FOR CONTAFIN_ORACLE.NUM_ROW;
CREATE OR REPLACE PUBLIC SYNONYM NUM_TAB FOR CONTAFIN_ORACLE.NUM_TAB;
BEGIN
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.NUM_ROW TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.NUM_TAB TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.CHAR_ROW TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.CHAR_TAB TO PUBLIC';
EXCEPTION WHEN OTHERS THEN NULL;
END;
/
CREATE OR REPLACE PUBLIC SYNONYM UW_SEL_ROW FOR CONTAFIN_ORACLE.UW_SEL_ROW;
CREATE OR REPLACE PUBLIC SYNONYM UW_SEL_TAB FOR CONTAFIN_ORACLE.UW_SEL_TAB;
BEGIN
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.UW_SEL_ROW TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.UW_SEL_TAB TO PUBLIC';
EXCEPTION WHEN OTHERS THEN NULL;
END;
/
-- Functions
PROMPT Creating function synonyms...
CREATE OR REPLACE PUBLIC SYNONYM VALOARETAG FOR CONTAFIN_ORACLE.VALOARETAG;
CREATE OR REPLACE PUBLIC SYNONYM GETWORDCOUNT FOR CONTAFIN_ORACLE.GETWORDCOUNT;
CREATE OR REPLACE PUBLIC SYNONYM GETWORDNUM FOR CONTAFIN_ORACLE.GETWORDNUM;
CREATE OR REPLACE PUBLIC SYNONYM CHARC2COLLECTION FOR CONTAFIN_ORACLE.CHARC2COLLECTION;
CREATE OR REPLACE PUBLIC SYNONYM CHARN2COLLECTION FOR CONTAFIN_ORACLE.CHARN2COLLECTION;
BEGIN
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.VALOARETAG TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.GETWORDCOUNT TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.GETWORDNUM TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.CHARC2COLLECTION TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.CHARN2COLLECTION TO PUBLIC';
EXCEPTION WHEN OTHERS THEN NULL;
END;
/
-- VAUTH_SERII synonym for CONTAFIN_ORACLE
PROMPT Creating VDEF_PROGRAME_SERII synonym...
BEGIN
EXECUTE IMMEDIATE 'DROP SYNONYM CONTAFIN_ORACLE.VDEF_PROGRAME_SERII';
EXCEPTION WHEN OTHERS THEN NULL;
END;
/
CREATE SYNONYM CONTAFIN_ORACLE.VDEF_PROGRAME_SERII FOR SYS.VAUTH_SERII;
GRANT SELECT ON CONTAFIN_ORACLE.VDEF_PROGRAME_SERII TO CONTAFIN_ORACLE;
-- Currency and location synonyms
PROMPT Creating currency/location synonyms...
CREATE OR REPLACE PUBLIC SYNONYM SYN_VNOM_VALUTE_ISO FOR CONTAFIN_ORACLE.VNOM_VALUTE_ISO;
GRANT SELECT ON CONTAFIN_ORACLE.VNOM_VALUTE_ISO TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_CURS_ACTUALIZARI FOR CONTAFIN_ORACLE.CURS_ACTUALIZARI;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.CURS_ACTUALIZARI TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_VALUTE_ISO FOR CONTAFIN_ORACLE.NOM_VALUTE_ISO;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_VALUTE_ISO TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_CURS_COTATII FOR CONTAFIN_ORACLE.CURS_COTATII;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.CURS_COTATII TO PUBLIC;
-- Location synonyms
PROMPT Creating location synonyms...
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_JUDETE FOR CONTAFIN_ORACLE.NOM_JUDETE;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_JUDETE TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_LOCALITATI FOR CONTAFIN_ORACLE.NOM_LOCALITATI;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_LOCALITATI TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_VNOM_JUDETE FOR CONTAFIN_ORACLE.VNOM_JUDETE;
GRANT SELECT ON CONTAFIN_ORACLE.VNOM_JUDETE TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_VNOM_LOCALITATI FOR CONTAFIN_ORACLE.VNOM_LOCALITATI;
GRANT SELECT ON CONTAFIN_ORACLE.VNOM_LOCALITATI TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_VNOM_TARI FOR CONTAFIN_ORACLE.VNOM_TARI;
GRANT SELECT ON CONTAFIN_ORACLE.VNOM_TARI TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_CETATENII FOR CONTAFIN_ORACLE.NOM_CETATENII;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_CETATENII TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_TARI FOR CONTAFIN_ORACLE.NOM_TARI;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_TARI TO PUBLIC;
-- Packages
PROMPT Creating package synonyms...
CREATE OR REPLACE PUBLIC SYNONYM SYN_PACK_DEF_CO FOR CONTAFIN_ORACLE.PACK_DEF_CO;
GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_DEF_CO TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM PACK_UTILS FOR CONTAFIN_ORACLE.PACK_UTILS;
GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_UTILS TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM PACK_UTILS_FILE FOR CONTAFIN_ORACLE.PACK_UTILS_FILE;
GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_UTILS_FILE TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM PACK_ROARTVAI FOR CONTAFIN_ORACLE.PACK_ROARTVAI;
GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_ROARTVAI TO PUBLIC;
-- More types and synonyms
PROMPT Creating additional type synonyms...
CREATE OR REPLACE PUBLIC SYNONYM CONTRACT_M FOR CONTAFIN_ORACLE.CONTRACT_M;
CREATE OR REPLACE PUBLIC SYNONYM SAL_CONTRACT_M FOR CONTAFIN_ORACLE.SAL_CONTRACT_M;
CREATE OR REPLACE PUBLIC SYNONYM SAL_RED FOR CONTAFIN_ORACLE.SAL_RED;
CREATE OR REPLACE PUBLIC SYNONYM SAL_CAMPURI_RED FOR CONTAFIN_ORACLE.SAL_CAMPURI_RED;
CREATE OR REPLACE PUBLIC SYNONYM TABSTERS FOR CONTAFIN_ORACLE.TABSTERS;
CREATE OR REPLACE PUBLIC SYNONYM SAL_TABELESTERS FOR CONTAFIN_ORACLE.SAL_TABELESTERS;
CREATE OR REPLACE PUBLIC SYNONYM FF_SUME FOR CONTAFIN_ORACLE.FF_SUME;
CREATE OR REPLACE PUBLIC SYNONYM FF_PERSINTRET FOR CONTAFIN_ORACLE.FF_PERSINTRET;
CREATE OR REPLACE PUBLIC SYNONYM VANZARI_DETALII_TAB FOR CONTAFIN_ORACLE.VANZARI_DETALII_TAB;
CREATE OR REPLACE PUBLIC SYNONYM PIVOT_TABLE FOR CONTAFIN_ORACLE.PIVOT_TABLE;
CREATE OR REPLACE PUBLIC SYNONYM PIVOT_ROW FOR CONTAFIN_ORACLE.PIVOT_ROW;
BEGIN
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.CONTRACT_M TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.SAL_CONTRACT_M TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.SAL_RED TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.SAL_CAMPURI_RED TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.TABSTERS TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.SAL_TABELESTERS TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.FF_SUME TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.FF_PERSINTRET TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.VANZARI_DETALII_TAB TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.PIVOT_TABLE TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.PIVOT_ROW TO PUBLIC';
EXCEPTION WHEN OTHERS THEN NULL;
END;
/
-- SERVER_INFO
PROMPT Creating SERVER_INFO synonym...
CREATE OR REPLACE PUBLIC SYNONYM SERVER_INFO FOR CONTAFIN_ORACLE.SERVER_INFO;
GRANT SELECT, UPDATE ON CONTAFIN_ORACLE.SERVER_INFO TO PUBLIC;
-- CAEN codes
PROMPT Creating SYN_NOM_CODURI_CAEN...
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_CODURI_CAEN FOR CONTAFIN_ORACLE.NOM_CODURI_CAEN;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_CODURI_CAEN TO PUBLIC;
-- Directory grants
PROMPT Granting directory access...
GRANT ALL ON DIRECTORY DMPDIR TO PUBLIC;
GRANT EXECUTE ON UTL_FILE TO PUBLIC;
GRANT EXECUTE ON DBMS_LOCK TO PUBLIC;
COMMIT;
SPOOL OFF
SELECT 'SYNONYMS_COMPLETE' FROM dual;
EXIT;
"@
Write-Log "Running synonyms-public.sql..."
$result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $synonymsSql
-Username "SYS" -Password $SystemPassword -SqlFile $synonymsScript -AsSysdba
if ($result -match "SYNONYMS_COMPLETE") {
if ($result -match "synonym_count|SYNONYM_NAME") {
Write-LogSuccess "Public synonyms created successfully"
}
else {
@@ -394,70 +121,29 @@ EXIT;
Write-LogDebug $result
}
# Configure Network ACL
Write-LogSection "Configuring Network ACL"
# =========================================================================
# STEP 2: Create Grants and ACL (using grants-public.sql)
# =========================================================================
Write-LogSection "Creating Grants and Network ACL"
Write-Log "Running grants-public.sql..."
$aclSql = @"
SET ECHO OFF FEEDBACK ON VERIFY OFF SERVEROUTPUT ON
$grantsResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYS" -Password $SystemPassword -SqlFile $grantsScript -AsSysdba
PROMPT Configuring Network ACL for CONTAFIN_ORACLE...
-- Drop existing ACL
BEGIN
DBMS_NETWORK_ACL_ADMIN.DROP_ACL(acl => 'roaupdate.xml');
EXCEPTION
WHEN OTHERS THEN NULL;
END;
/
-- Create new ACL
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(
acl => 'roaupdate.xml',
description => 'Permissions to connect and resolve for ROA',
principal => 'CONTAFIN_ORACLE',
is_grant => TRUE,
privilege => 'connect'
);
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
acl => 'roaupdate.xml',
principal => 'CONTAFIN_ORACLE',
is_grant => TRUE,
privilege => 'resolve'
);
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
acl => 'roaupdate.xml',
host => '*'
);
END;
/
COMMIT;
-- Grant UTL packages to CONTAFIN_ORACLE
GRANT EXECUTE ON UTL_INADDR TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_TCP TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_SMTP TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_HTTP TO CONTAFIN_ORACLE;
SELECT 'ACL_CONFIGURED' FROM dual;
EXIT;
"@
$aclResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYS" -Password $SystemPassword -SqlCommand $aclSql -AsSysdba
if ($aclResult -match "ACL_CONFIGURED") {
Write-LogSuccess "Network ACL configured"
if ($grantsResult -match "Grant|ACL|Grants Complete") {
Write-LogSuccess "Grants and ACL configured successfully"
}
else {
Write-LogWarning "Could not verify ACL configuration"
Write-LogWarning "Could not verify grants configuration"
Write-LogDebug $grantsResult
}
# Count synonyms created
Write-LogSection "Verifying Synonyms"
# =========================================================================
# STEP 3: Verify Results
# =========================================================================
Write-LogSection "Verifying Configuration"
# Count synonyms
$countSql = @"
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT 'SYNONYM_COUNT:' || COUNT(*)
@@ -477,15 +163,49 @@ EXIT;
Write-Log "Public synonyms for CONTAFIN_ORACLE: $synonymCount"
# Verify SESIUNE context exists (created by grants-public.sql or synonyms-public.sql)
$contextSql = @"
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT 'CONTEXT_EXISTS:' || COUNT(*)
FROM dba_context
WHERE namespace = 'SESIUNE';
EXIT;
"@
$contextResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $contextSql -Silent
$contextExists = $false
if ($contextResult -match "CONTEXT_EXISTS:(\d+)") {
$contextExists = [int]$Matches[1] -gt 0
}
if ($contextExists) {
Write-LogSuccess "SESIUNE context exists"
}
else {
Write-LogWarning "SESIUNE context not found - creating..."
$createContextSql = @"
CREATE CONTEXT SESIUNE USING CONTAFIN_ORACLE.SET_VARIABILE;
EXIT;
"@
Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYS" -Password $SystemPassword -SqlCommand $createContextSql -AsSysdba
}
# =========================================================================
# Summary
# =========================================================================
Write-LogSection "Setup Complete"
Write-LogSuccess "Public synonyms and grants configured!"
Write-Log ""
Write-Log "Summary:"
Write-Log " SQL scripts used:"
Write-Log " - synonyms-public.sql (all public synonyms)"
Write-Log " - grants-public.sql (all grants and ACL)"
Write-Log " Public synonyms created: $synonymCount"
Write-Log " SESIUNE context: Created"
Write-Log " SESIUNE context: $(if ($contextExists) { 'Verified' } else { 'Created' })"
Write-Log " Network ACL: Configured (roaupdate.xml)"
Write-Log " UTL packages granted: UTL_INADDR, UTL_TCP, UTL_SMTP, UTL_HTTP"
Write-Log ""
Write-Log "Next steps:"
Write-Log " 1. Run 05-import-companies.ps1 to import company schemas"

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