Compare commits
2 Commits
bcb558f1dc
...
648342c0a8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
648342c0a8 | ||
|
|
aaf5942f6b |
@@ -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
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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!
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -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!
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
@@ -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
|
||||
231
proxmox/lxc108-oracle/roa-windows-setup/sql/scheduler-jobs.sql
Normal file
231
proxmox/lxc108-oracle/roa-windows-setup/sql/scheduler-jobs.sql
Normal 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
|
||||
260
proxmox/lxc108-oracle/roa-windows-setup/sql/server-info-init.sql
Normal file
260
proxmox/lxc108-oracle/roa-windows-setup/sql/server-info-init.sql
Normal 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
|
||||
Reference in New Issue
Block a user