Compare commits

...

3 Commits

Author SHA1 Message Date
Claude Agent
11001933f2 feat(cleanup): add advisor objects, scheduler log cleanup and datafile resize
Add cleanup for WRI$_ADV_* tables (can accumulate millions of rows/GBs),
scheduler$_event_log truncate, and automatic UNDO/SYSAUX datafile resize
with progressive fallback (2G→4G→6G). Tested on Oracle 18c XE.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 16:55:58 +00:00
Claude Agent
6410339196 feat(clienti): add Oracle XE PDB recreare scripts and audit cleanup
- Complete PDB export/import workflow (16 scripts in clienti/oracle-xe-21c/import/)
- Recreare PDB script with step-by-step guide (recreare_pdb.sql)
- Universal audit cleanup script for Oracle XE 11g-21c (cleanup_audit.sql)
- Troubleshooting guide with all lessons learned (depanare-ora-12954-spatiu.md)
- Fixed: DIRECTORY grant syntax, DBMS_LOCK grant, remap_tablespace USERS:ROA,
  impdp quoted AS SYSDBA for Windows, AWR retention 8 days, datafile full path
- Updated roa-windows-setup docs with XE prevention steps and gotchas table

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 16:31:17 +00:00
Claude Agent
36c6405c21 docs(infra): add space-booking deploy guide and Gitea LXC 106 docs
- Add proxmox/lxc106-gitea/README.md: app.ini editing, Docker restart,
  webhook ALLOWED_HOST_LIST fix (hairpin NAT), troubleshooting
- Add proxmox/lxc103-dokploy/docs/space-booking-app.md: full deploy
  guide with env vars, auto-seed accounts, SMTP, troubleshooting
- Update proxmox/README.md: add LXC 106 entry and quick start
- Update lxc103-dokploy/README.md: add space.roa.romfast.ro in
  domains table, ASCII architecture, and docs links

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 16:31:00 +00:00
22 changed files with 3263 additions and 2 deletions

View File

@@ -0,0 +1,266 @@
# ORA-12954: Database size exceeds 12 GB limit (Oracle XE)
Oracle XE are limita hard de 12 GB. Limita se aplica pe **suma datafile-urilor** (dba_data_files), NU pe segmente (dba_segments). Un datafile poate fi 90% gol dar tot conteaza la limita.
## Diagnostic rapid
```sql
-- IMPORTANT: Verifica AMBELE - segmente vs datafiles
-- Segmente (spatiu efectiv folosit)
SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024) AS used_mb
FROM dba_segments GROUP BY tablespace_name ORDER BY used_mb DESC;
-- Datafiles (spatiu ALOCAT - asta conteaza la limita de 12 GB!)
SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024) AS allocated_mb
FROM dba_data_files GROUP BY tablespace_name ORDER BY allocated_mb DESC;
SELECT ROUND(SUM(bytes)/1024/1024) AS total_allocated_mb FROM dba_data_files;
-- Ce ocupa SYSAUX (de obicei vinovatul)
SELECT occupant_name, ROUND(space_usage_kbytes/1024) AS size_mb
FROM v$sysaux_occupants ORDER BY space_usage_kbytes DESC;
-- Top 20 segmente mari in SYSAUX
SELECT segment_name, segment_type, ROUND(bytes/1024/1024) AS size_mb
FROM dba_segments WHERE tablespace_name = 'SYSAUX'
ORDER BY bytes DESC FETCH FIRST 20 ROWS ONLY;
-- Identifica LOB-uri mari
SELECT owner, table_name, column_name
FROM dba_lobs
WHERE segment_name = '<segment_name_from_above>';
-- Audit policies active (trebuie dezactivate!)
SELECT policy_name, enabled_option FROM audit_unified_enabled_policies;
-- Auto tasks (sql tuning advisor = vinovatul principal)
SELECT client_name, status FROM dba_autotask_client;
```
## Pas 1: Cleanup segmente (elibereaza spatiu in datafile)
### SQL Tuning Sets (principalul vinovat, poate ocupa 5+ GB)
```sql
-- Incearca mai intai DROP curat
BEGIN
FOR r IN (SELECT name, owner FROM dba_sqlset) LOOP
BEGIN
DBMS_SQLTUNE.DROP_SQLSET(r.name, r.owner);
EXCEPTION WHEN OTHERS THEN NULL;
END;
END LOOP;
END;
/
-- Daca DROP nu elibereaza spatiul, TRUNCATE direct:
TRUNCATE TABLE sys.wri$_sqlset_plan_lines;
TRUNCATE TABLE sys.wri$_sqlset_plans;
TRUNCATE TABLE sys.wri$_sqlset_statistics;
TRUNCATE TABLE sys.wri$_sqlset_statements;
TRUNCATE TABLE sys.wri$_sqlset_references;
TRUNCATE TABLE sys.wri$_sqlset_definitions;
```
### Advisor + AWR + Statistici
```sql
EXEC DBMS_ADVISOR.DELETE_EXPIRED_TASKS;
-- NOTA: retention trebuie >= moving window baseline (default 8 zile)
-- Daca da ORA-13541, creste retention la 8*24*60
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 8*24*60, interval => 60);
EXEC DBMS_STATS.ALTER_STATS_HISTORY_RETENTION(7);
EXEC DBMS_STATS.PURGE_STATS(SYSDATE - 7);
PURGE DBA_RECYCLEBIN;
```
## Pas 2: Resize datafiles (recupereaza spatiul alocat)
TRUNCATE elibereaza segmentele dar datafile-ul ramane la aceeasi dimensiune. Trebuie RESIZE.
```sql
-- Verifica path-urile fisierelor
SELECT file_id, tablespace_name, ROUND(bytes/1024/1024) AS size_mb, file_name
FROM dba_data_files ORDER BY bytes DESC;
-- Gaseste minimul posibil de resize
SELECT file_id, CEIL((MAX(block_id + blocks - 1) * 8192) / 1048576) + 10 AS min_size_mb
FROM dba_extents WHERE tablespace_name = 'SYSAUX' GROUP BY file_id;
-- Resize
ALTER DATABASE DATAFILE '<path>' RESIZE <size>M;
```
### Daca resize esueaza cu ORA-03297 (used data beyond resize value)
Segmentele sunt imprastiate in datafile. Pe Oracle XE 21c nu exista SHRINK_TABLESPACE (doar 23ai+).
**Solutie UNDOTBS1** (testat, functioneaza):
```sql
-- Seteaza undo pe MANUAL temporar
ALTER SYSTEM SET undo_management = 'MANUAL' SCOPE = SPFILE;
-- Restart PDB
ALTER SESSION SET CONTAINER = CDB$ROOT;
ALTER PLUGGABLE DATABASE XEPDB1 CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE XEPDB1 OPEN RESTRICTED;
ALTER SESSION SET CONTAINER = XEPDB1;
-- Drop si recreare
DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES;
CREATE UNDO TABLESPACE UNDOTBS1 DATAFILE '<path>\UNDOTBS01.DBF' SIZE 100M AUTOEXTEND ON MAXSIZE 500M;
ALTER SYSTEM SET undo_tablespace = 'UNDOTBS1';
ALTER SYSTEM SET undo_management = 'AUTO' SCOPE = SPFILE;
-- Restart PDB normal
ALTER SESSION SET CONTAINER = CDB$ROOT;
ALTER PLUGGABLE DATABASE XEPDB1 CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE XEPDB1 OPEN;
```
**Solutie SYSAUX** (daca resize cu ORA-03297):
SYSAUX nu se poate face drop/recreare. Singura solutie este **recrearea PDB-ului**:
1. Export complet (scheme + obiecte SYS custom)
2. Drop PDB
3. Recreare PDB din PDB$SEED
4. Import
Scripturi de export/import disponibile in directorul `import/`.
Scriptul master: `import/recreare_pdb.sql`
## Pas 3: Preventie (IMPORTANT - ruleaza pe orice server nou!)
```sql
-- Dezactiveaza auto tasks care umfla SYSAUX
EXEC DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'sql tuning advisor', operation => NULL, window_name => NULL);
EXEC DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'auto space advisor', operation => NULL, window_name => NULL);
SELECT client_name, status FROM dba_autotask_client;
-- AWR retention (min 8 zile din cauza moving window baseline)
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 8*24*60, interval => 60);
EXEC DBMS_STATS.ALTER_STATS_HISTORY_RETENTION(7);
-- Dezactiveaza audit policies (umfla AUDSYS)
NOAUDIT POLICY ORA_SECURECONFIG;
NOAUDIT POLICY ORA_LOGON_FAILURES;
SELECT policy_name, enabled_option FROM audit_unified_enabled_policies;
```
## AUDSYS (audit trail)
Cleanup-ul via `DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL` esueaza cu ORA-12954 cand baza e plina (chiar si in restricted mode). Dezactiveaza audit policies **preventiv** pe orice server nou:
```sql
NOAUDIT POLICY ORA_SECURECONFIG;
NOAUDIT POLICY ORA_LOGON_FAILURES;
SELECT policy_name, enabled_option FROM audit_unified_enabled_policies;
-- Ar trebui sa returneze: no rows selected
```
## Tablespace USERS
PDB-ul nou creat din PDB$SEED NU are tablespace USERS. Obiectele care erau pe USERS pe serverul vechi trebuie remapate la import:
```cmd
impdp "sys/PAROLA_SYS@XEPDB1 AS SYSDBA" directory=DMPDIR dumpfile=schema.dmp logfile=schema.log remap_tablespace=USERS:ROA
```
## Grant-uri pe DIRECTORY-uri
Sintaxa corecta pentru grant-uri pe Oracle DIRECTORY objects:
```sql
-- CORECT:
GRANT READ, WRITE ON DIRECTORY DMPDIR TO CONTAFIN_ORACLE;
-- GRESIT (ORA-00942):
GRANT READ ON SYS.DMPDIR TO CONTAFIN_ORACLE;
GRANT EXECUTE ON SYS.DMPDIR TO CONTAFIN_ORACLE; -- EXECUTE nu e valid pe DIRECTORY
```
## DBMS_LOCK pe Oracle XE 21c
Pe Oracle XE 21c, `SYS.DBMS_LOCK` necesita grant explicit:
```sql
GRANT EXECUTE ON SYS.DBMS_LOCK TO CONTAFIN_ORACLE;
```
Fara acest grant, pachetele care folosesc `sys.dbms_lock.sleep()` dau `PLS-00201`.
## impdp/expdp AS SYSDBA pe Windows
Pe Windows CMD, `AS SYSDBA` trebuie inclus in ghilimele escaped:
```cmd
-- CORECT:
impdp "sys/PAROLA@XEPDB1 AS SYSDBA" directory=DMPDIR dumpfile=schema.dmp logfile=schema.log
-- GRESIT (interpretat ca argument separat):
impdp sys/PAROLA@XEPDB1 AS SYSDBA directory=DMPDIR dumpfile=schema.dmp logfile=schema.log
```
## User SYSTEM pe PDB nou
SYSTEM e common user — nu poate fi unlock/modificat doar pe un PDB. Trebuie din CDB$ROOT:
```sql
ALTER SESSION SET CONTAINER = CDB$ROOT;
ALTER USER SYSTEM IDENTIFIED BY "ParolaNoua" ACCOUNT UNLOCK;
```
Alternativ, foloseste SYS AS SYSDBA pentru impdp (recomandat).
## Datafile path explicit
La CREATE TABLESPACE pe Oracle XE 21c, trebuie specificat path-ul complet:
```sql
-- CORECT:
CREATE TABLESPACE ROA DATAFILE 'C:\APP\...\ORADATA\XE\XEPDB1\ROA01.DBF' SIZE 2048M AUTOEXTEND ON NEXT 100M MAXSIZE 6G;
-- GRESIT (ORA-02236: invalid file name):
CREATE TABLESPACE ROA DATAFILE SIZE 2048M AUTOEXTEND ON NEXT 100M MAXSIZE 6G;
```
Gaseste path-ul corect:
```sql
SELECT file_name FROM dba_data_files WHERE ROWNUM = 1;
```
## Verificare mod undo (local vs shared)
```sql
-- Din CDB$ROOT
SELECT property_value FROM database_properties WHERE property_name = 'LOCAL_UNDO_ENABLED';
```
## Rezultate tipice
### Dupa cleanup (fara recreare PDB)
| Componenta | Inainte | Dupa cleanup |
|-----------|---------|-------------|
| SYSAUX segmente | 7.5 GB | 1.9 GB |
| SYSAUX datafile | 7.8 GB | 7.8 GB (fara resize) / 2.5 GB (cu resize) |
| UNDOTBS1 | 2.1 GB | 0.1 GB (dupa recreare) |
| Total alocat | 13.5 GB | 4.5 GB (cu recreare UNDO) |
### Dupa recreare PDB (solutia definitiva)
| Componenta | Inainte | Dupa recreare PDB |
|-----------|---------|-------------------|
| SYSAUX | 7.8 GB | 390 MB |
| SYSTEM | - | 370 MB |
| ROA | - | 2 GB |
| UNDOTBS1 | 2.1 GB | 165 MB |
| **Total alocat** | **13.5 GB** | **~3 GB** |
## Lectii invatate
1. **TRUNCATE vs DROP pe SQL Tuning Sets**: DROP nu elibereaza spatiul LOB-ului. TRUNCATE functioneaza.
2. **Limita 12 GB = dba_data_files, nu dba_segments**: Chiar daca segmentele ocupa 4.5 GB, datafile-urile alocate conteaza.
3. **SYSAUX nu se poate shrink**: ORA-03297 la orice valoare cand segmentele sunt la high water mark. Singura solutie = recreare PDB.
4. **AWR retention >= moving window baseline**: Default baseline = 8 zile. Nu poti seta retention < 8 zile fara a reduce baseline-ul (care nu exista ca procedura pe XE 21c).
5. **Audit policies active pe PDB nou**: PDB-ul creat din PDB$SEED vine cu ORA_SECURECONFIG si ORA_LOGON_FAILURES active. Dezactiveaza-le imediat.

View File

@@ -0,0 +1,6 @@
-- 01_tablespaces.sql
-- Create custom tablespaces
-- Source: backup/11_tablespaces.sql
-- NOTA: Ajusteaza path-ul daca Oracle Home e diferit
CREATE TABLESPACE ROA DATAFILE 'C:\APP\EXT_MMUTU\PRODUCT\21C\ORADATA\XE\XEPDB1\ROA01.DBF' SIZE 2048M AUTOEXTEND ON NEXT 100M MAXSIZE 6G;

View File

@@ -0,0 +1,13 @@
-- 02_useri.sql
-- Create application users
-- Source: backup/10_useri.sql
CREATE USER "CONTAFIN_ORACLE" IDENTIFIED BY "ROMFASTSOFT"
DEFAULT TABLESPACE "ROA"
TEMPORARY TABLESPACE "TEMP";
/
CREATE USER "ROMPETROLE" IDENTIFIED BY "ROMFASTSOFT"
DEFAULT TABLESPACE "ROA"
TEMPORARY TABLESPACE "TEMP";
/

View File

@@ -0,0 +1,61 @@
-- 03_directories.sql
-- Create Oracle directories
-- Source: backup/04_directories.sql
CREATE OR REPLACE DIRECTORY DMPDIR AS 'C:\DMPDIR';
CREATE OR REPLACE DIRECTORY SCHEDULER$_LOG_DIR AS 'C:\app\ext_mmutu\product\21c\homes\OraDB21Home1\scheduler\log';
CREATE OR REPLACE DIRECTORY UPD_COMUNROA AS 'C:\ROAUPDATE\_ARHIVE\COMUNROA';
CREATE OR REPLACE DIRECTORY UPD_ROAAPROV AS 'C:\ROAUPDATE\_ARHIVE\ROAAPROV';
CREATE OR REPLACE DIRECTORY UPD_ROAAUTO AS 'C:\ROAUPDATE\_ARHIVE\ROAAUTO';
CREATE OR REPLACE DIRECTORY UPD_ROABAVERT AS 'C:\ROAUPDATE\_ARHIVE\ROABAVERT';
CREATE OR REPLACE DIRECTORY UPD_ROACASA AS 'C:\ROAUPDATE\_ARHIVE\ROACASA';
CREATE OR REPLACE DIRECTORY UPD_ROACOMENZI AS 'C:\ROAUPDATE\_ARHIVE\ROACOMENZI';
CREATE OR REPLACE DIRECTORY UPD_ROACONIMPORT AS 'C:\ROAUPDATE\_ARHIVE\ROACONIMPORT';
CREATE OR REPLACE DIRECTORY UPD_ROACONSTRUCTII AS 'C:\ROAUPDATE\_ARHIVE\ROACONSTRUCTII';
CREATE OR REPLACE DIRECTORY UPD_ROACONT AS 'C:\ROAUPDATE\_ARHIVE\ROACONT';
CREATE OR REPLACE DIRECTORY UPD_ROACONTRACTE AS 'C:\ROAUPDATE\_ARHIVE\ROACONTRACTE';
CREATE OR REPLACE DIRECTORY UPD_ROADECL AS 'C:\ROAUPDATE\_ARHIVE\ROADECL';
CREATE OR REPLACE DIRECTORY UPD_ROADEF AS 'C:\ROAUPDATE\_ARHIVE\ROADEF';
CREATE OR REPLACE DIRECTORY UPD_ROADEFSALARII AS 'C:\ROAUPDATE\_ARHIVE\ROADEFSALARII';
CREATE OR REPLACE DIRECTORY UPD_ROADEPOZIT AS 'C:\ROAUPDATE\_ARHIVE\ROADEPOZIT';
CREATE OR REPLACE DIRECTORY UPD_ROADEVIZE AS 'C:\ROAUPDATE\_ARHIVE\ROADEVIZE';
CREATE OR REPLACE DIRECTORY UPD_ROAFACTURARE AS 'C:\ROAUPDATE\_ARHIVE\ROAFACTURARE';
CREATE OR REPLACE DIRECTORY UPD_ROAFURNIZORI AS 'C:\ROAUPDATE\_ARHIVE\ROAFURNIZORI';
CREATE OR REPLACE DIRECTORY UPD_ROAGEN AS 'C:\ROAUPDATE\_ARHIVE\ROAGEN';
CREATE OR REPLACE DIRECTORY UPD_ROAGEST AS 'C:\ROAUPDATE\_ARHIVE\ROAGEST';
CREATE OR REPLACE DIRECTORY UPD_ROAGRESTAURANT AS 'C:\ROAUPDATE\_ARHIVE\ROAGRESTAURANT';
CREATE OR REPLACE DIRECTORY UPD_ROAHOTEL AS 'C:\ROAUPDATE\_ARHIVE\ROAHOTEL';
CREATE OR REPLACE DIRECTORY UPD_ROAHOTELCONFIG AS 'C:\ROAUPDATE\_ARHIVE\ROAHOTELCONFIG';
CREATE OR REPLACE DIRECTORY UPD_ROAIMOB AS 'C:\ROAUPDATE\_ARHIVE\ROAIMOB';
CREATE OR REPLACE DIRECTORY UPD_ROAINCHIDSAL AS 'C:\ROAUPDATE\_ARHIVE\ROAINCHIDSAL';
CREATE OR REPLACE DIRECTORY UPD_ROALUCRARI AS 'C:\ROAUPDATE\_ARHIVE\ROALUCRARI';
CREATE OR REPLACE DIRECTORY UPD_ROAMANAGER AS 'C:\ROAUPDATE\_ARHIVE\ROAMANAGER';
CREATE OR REPLACE DIRECTORY UPD_ROAMASINI AS 'C:\ROAUPDATE\_ARHIVE\ROAMASINI';
CREATE OR REPLACE DIRECTORY UPD_ROANOR AS 'C:\ROAUPDATE\_ARHIVE\ROANOR';
CREATE OR REPLACE DIRECTORY UPD_ROANORFRUVIMED AS 'C:\ROAUPDATE\_ARHIVE\ROANORFRUVIMED';
CREATE OR REPLACE DIRECTORY UPD_ROANORRENAV AS 'C:\ROAUPDATE\_ARHIVE\ROANORRENAV';
CREATE OR REPLACE DIRECTORY UPD_ROANORUTMIDIA AS 'C:\ROAUPDATE\_ARHIVE\ROANORUTMIDIA';
CREATE OR REPLACE DIRECTORY UPD_ROAOBINV AS 'C:\ROAUPDATE\_ARHIVE\ROAOBINV';
CREATE OR REPLACE DIRECTORY UPD_ROAOFERTARE AS 'C:\ROAUPDATE\_ARHIVE\ROAOFERTARE';
CREATE OR REPLACE DIRECTORY UPD_ROAPRETURI AS 'C:\ROAUPDATE\_ARHIVE\ROAPRETURI';
CREATE OR REPLACE DIRECTORY UPD_ROAPRINT AS 'C:\ROAUPDATE\_ARHIVE\ROAPRINT';
CREATE OR REPLACE DIRECTORY UPD_ROAPRINT_INITIALIZARI AS 'C:\ROAUPDATE\_ARHIVE\ROAPRINT_INITIALIZARI';
CREATE OR REPLACE DIRECTORY UPD_ROAPRODAGR AS 'C:\ROAUPDATE\_ARHIVE\ROAPRODAGR';
CREATE OR REPLACE DIRECTORY UPD_ROAPRODUCTIE AS 'C:\ROAUPDATE\_ARHIVE\ROAPRODUCTIE';
CREATE OR REPLACE DIRECTORY UPD_ROAREGISTRATURA AS 'C:\ROAUPDATE\_ARHIVE\ROAREGISTRATURA';
CREATE OR REPLACE DIRECTORY UPD_ROAREPARTIZSAL AS 'C:\ROAUPDATE\_ARHIVE\ROAREPARTIZSAL';
CREATE OR REPLACE DIRECTORY UPD_ROARES AS 'C:\ROAUPDATE\_ARHIVE\ROARES';
CREATE OR REPLACE DIRECTORY UPD_ROARESTAURANT AS 'C:\ROAUPDATE\_ARHIVE\ROARESTAURANT';
CREATE OR REPLACE DIRECTORY UPD_ROARETAIL AS 'C:\ROAUPDATE\_ARHIVE\ROARETAIL';
CREATE OR REPLACE DIRECTORY UPD_ROARETAILMON AS 'C:\ROAUPDATE\_ARHIVE\ROARETAILMON';
CREATE OR REPLACE DIRECTORY UPD_ROASAL AS 'C:\ROAUPDATE\_ARHIVE\ROASAL';
CREATE OR REPLACE DIRECTORY UPD_ROASALSPEC AS 'C:\ROAUPDATE\_ARHIVE\ROASALSPEC';
CREATE OR REPLACE DIRECTORY UPD_ROASITFIN AS 'C:\ROAUPDATE\_ARHIVE\ROASITFIN';
CREATE OR REPLACE DIRECTORY UPD_ROASITOP AS 'C:\ROAUPDATE\_ARHIVE\ROASITOP';
CREATE OR REPLACE DIRECTORY UPD_ROASTART AS 'C:\ROAUPDATE\_ARHIVE\ROASTART';
CREATE OR REPLACE DIRECTORY UPD_ROASUPORT AS 'C:\ROAUPDATE\_ARHIVE\ROASUPORT';
CREATE OR REPLACE DIRECTORY UPD_ROATELCOMM AS 'C:\ROAUPDATE\_ARHIVE\ROATELCOMM';
CREATE OR REPLACE DIRECTORY UPD_ROATELMON AS 'C:\ROAUPDATE\_ARHIVE\ROATELMON';
CREATE OR REPLACE DIRECTORY UPD_ROAUPDATE AS 'C:\ROAUPDATE';
CREATE OR REPLACE DIRECTORY UPD_ROAVIN AS 'C:\ROAUPDATE\_ARHIVE\ROAVIN';
CREATE OR REPLACE DIRECTORY UPD_USERREPORTS AS 'C:\ROAUPDATE\_ARHIVE\USERREPORTS';

View File

@@ -0,0 +1,57 @@
-- 04_sys_tables.sql
-- Create SYS custom tables and sequence
-- Source: backup/06_sys_tables.sql
CREATE TABLE "SYS"."AUTH_DETALII"
( "DETALII" VARCHAR2(15) NOT NULL ENABLE
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 16384 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SYSTEM";
/
CREATE TABLE "SYS"."AUTH_SERII"
( "ID_SERIE" NUMBER(5,0) NOT NULL ENABLE,
"ID_PROGRAM" NUMBER(5,0) NOT NULL ENABLE,
"SERIE" RAW(128) NOT NULL ENABLE,
"STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE,
"DATAORA" DATE DEFAULT sysdate NOT NULL ENABLE,
"ID_UTIL" NUMBER(5,0) NOT NULL ENABLE,
"DATAORAS" DATE,
"ID_UTILS" NUMBER(5,0),
CONSTRAINT "PK_AUTH_SERII" PRIMARY KEY ("ID_SERIE")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SYSTEM" ENABLE
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 16384 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SYSTEM";
/
CREATE TABLE "SYS"."INFO"
( "INFO" CLOB,
"DATAORA" TIMESTAMP (6) DEFAULT SYSTIMESTAMP,
"LOCATIA" VARCHAR2(200)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SYSTEM"
LOB ("INFO") STORE AS BASICFILE (
TABLESPACE "SYSTEM" ENABLE STORAGE IN ROW 4000 CHUNK 8192 RETENTION
NOCACHE LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT));
/
CREATE SEQUENCE "SYS"."SEQ_AUTH_SERII" MINVALUE 1 MAXVALUE 99999999999999999 INCREMENT BY 1 START WITH 37 NOCACHE NOORDER NOCYCLE NOKEEP NOSCALE GLOBAL;
/

View File

@@ -0,0 +1,955 @@
-- 05_sys_code_objects.sql
-- Create SYS custom code objects (packages, procedures, functions)
-- Source: backup/05_sys_code_objects.sql
-- Note: UTL_MAIL and UTL_MAIL_INTERNAL excluded (Oracle built-in)
-- ============================================================================
-- AUTH_PACK Package Specification
-- ============================================================================
CREATE OR REPLACE NONEDITIONABLE PACKAGE "SYS"."AUTH_PACK" is
-- Author : MARIUS.ATANASIU
-- Created : 11/5/2005 9:58:27 AM
-- Purpose :
procedure verifica_program;
procedure verifica_licenta(v_sid IN NUMBER, v_program IN VARCHAR2);
procedure verifica_licenta_luna(v_an IN NUMBER,
v_luna IN NUMBER,
v_tip IN NUMBER);
procedure verifica_numar_firme;
procedure adauga_serie(V_ID_PROGRAM IN NUMBER,
V_SERIE IN VARCHAR2,
V_ID_UTILAD IN NUMBER);
procedure sterge_serie(V_ID_PROGRAM IN NUMBER, V_ID_UTILS IN NUMBER);
procedure verifica_serie(V_ID_PROGRAM IN NUMBER, V_SERIE IN RAW);
function selecteaza_serie(V_ID_PROGRAM IN NUMBER) return varchar2;
function selecteaza_nr_util(V_ID_PROGRAM IN NUMBER) return number;
function selecteaza_data_val(V_ID_PROGRAM IN NUMBER) return date;
function decripteaza_serie(V_ID_PROGRAM IN NUMBER,
V_SERIE IN RAW,
V_DATAORA IN DATE) return varchar2;
function decripteaza_nr_util(V_SERIEC IN VARCHAR2) return number;
function decripteaza_data_val(V_SERIEC IN VARCHAR2, V_ZI IN VARCHAR2)
return date;
function hextodec(V_HEXA IN VARCHAR2) return number;
function dectohex(V_NUMAR IN NUMBER) return varchar2;
end AUTH_PACK;
/
-- ============================================================================
-- AUTH_PACK Package Body
-- ============================================================================
CREATE OR REPLACE NONEDITIONABLE PACKAGE BODY "SYS"."AUTH_PACK" is
-- versiune 2025-01-14-01
------------------------------------------------------------------------------
-- ISTORIC MODIFICARI:
-- 2025-01-14: Migrare Oracle 10g -> Oracle 21c Express
-- - Inlocuit DBMS_OBFUSCATION_TOOLKIT.DES3Decrypt cu DBMS_CRYPTO.DECRYPT
-- - Folosit ENCRYPT_3DES_2KEY (cheie 16 bytes) + CHAIN_CBC + PAD_ZERO
-- - Modificari in: decripteaza_serie()
------------------------------------------------------------------------------
procedure verifica_program is
v_program VARCHAR2(256);
v_modul VARCHAR2(256);
v_sid NUMBER(16);
begin
begin
SELECT sid, UPPER(TRIM(program)), UPPER(TRIM(module))
INTO v_sid, v_program, v_modul
FROM v$session
WHERE audsid = USERENV('SESSIONID')
AND audsid != 0
AND rownum = 1
AND STATUS <> 'KILLED';
PINFO('1 LOGIN ' || V_PROGRAM || ' USER ' || USER, 'SYS.AUTH');
IF v_program not in ('ROASTART.EXE',
'PLSQLDEV.EXE',
'ROAGEN.EXE',
'ROASUPORT.EXE',
'EXPDP.EXE',
'IMPDP.EXE',
'APSNET_WP.EXE',
'W3WP.EXE',
'RUBY.EXE',
'SQLPLUS.EXE',
'TASKS.EXE',
'VFP9.EXE',
'ROAEFACTURA.EXE',
'WEBDEV.WEBSERVER.EXE',
'ROA2COCACOLA.EXE') and
user not in ('SYS',
'SYSTEM',
'DBSNMP',
'CTXSYS',
'MDSYS',
'DIP',
'SYSMAN',
'WMSYS') THEN
PINFO('2 LOGIN ' || V_PROGRAM || ' USER ' || USER, 'SYS.AUTH');
IF v_program <> v_modul THEN
RAISE_APPLICATION_ERROR(-20000, 'Acces interzis!');
END IF;
PINFO('3 LOGIN ' || V_PROGRAM || ' USER ' || USER, 'SYS.AUTH');
IF NOT V_PROGRAM LIKE 'ORACLE%' THEN
auth_pack.verifica_licenta(v_sid, v_program);
END IF;
PINFO('4 LOGIN ' || V_PROGRAM || ' USER ' || USER, 'SYS.AUTH');
END IF;
exception
when NO_DATA_FOUND then
v_program := Null;
end;
end;
-------------------------------------------------------------------------------------
-- VERIFICA_LICENTA
-- LA LOGIN IN BAZA DE DATE SE VERIFICA DACA ESTE LICENTA PENTRU PROGRAM, SI PENTRU NUMARUL DE UTILIZATORI PE PROGRAM DUPA IP
procedure verifica_licenta(v_sid IN NUMBER, v_program IN VARCHAR2) is
v_serie VARCHAR2(256);
v_seriec VARCHAR2(256);
v_nr_util NUMBER(5);
v_utilizatori NUMBER(5);
v_nume_program SYN_NOM_PROGRAME.DENUMIRE%TYPE;
v_id_program CONTAFIN_ORACLE.NOM_PROGRAME.ID_PROGRAM%TYPE;
v_dataora DATE;
v_data_val DATE;
v_zi VARCHAR2(2);
begin
V_NUME_PROGRAM := TRIM(REPLACE(v_program, '.EXE'));
begin
SELECT A.ID_PROGRAM, B.SERIE, B.DATAORA
INTO V_ID_PROGRAM, V_SERIE, V_DATAORA
FROM SYN_NOM_PROGRAME A
LEFT JOIN AUTH_SERII B
ON A.ID_PROGRAM = B.ID_PROGRAM
WHERE UPPER(TRIM(A.DENUMIRE)) = V_NUME_PROGRAM
AND B.STERS = 0;
exception
WHEN NO_DATA_FOUND THEN
PINFO('1 LOGIN ' || V_PROGRAM || ' USER ' || USER, 'SYS.AUTH2');
RAISE_APPLICATION_ERROR(-20000,
'Nu aveti licenta pentru ' ||
V_NUME_PROGRAM || '!' || CHR(13) || CHR(10) ||
' Licenta poate fi introdusa prin programul ROASUPORT!');
end;
PINFO('2 LOGIN ' || V_PROGRAM || ' USER ' || USER, 'SYS.AUTH2');
v_zi := LPAD(extract(day from v_dataora), 2, '0');
v_seriec := auth_pack.decripteaza_serie(v_id_program,
v_serie,
v_dataora);
v_utilizatori := auth_pack.decripteaza_nr_util(v_seriec);
v_data_val := auth_pack.decripteaza_data_val(v_seriec, v_zi);
IF v_utilizatori > 0 THEN
-- numar cate ip-uri (client_info) distincte cu programul v_program sunt conectate
-- exceptand ip-ul curent
-- astfel se poate conecta de pe acelasi ip, cu acelasi program de mai multe ori
-- fara sa conteze la numarul utilizatorilor conectati
SELECT COUNT(DISTINCT client_info)
INTO v_nr_util
FROM v$session
WHERE UPPER(TRIM(PROGRAM)) = v_program
AND SID != v_sid
and status <> 'KILLED'
and nvl(client_info, 'x') <> sys_context('userenv', 'ip_address');
IF v_nr_util >= v_utilizatori THEN
RAISE_APPLICATION_ERROR(-20000,
'Ati depasit numarul de licente (' ||
v_utilizatori || ') pentru programul ' ||
v_nume_program || ' !' || CHR(13) ||
CHR(10) ||
' Licenta poate fi reinnoita prin programul ROASUPORT!');
END IF;
ELSE
RAISE_APPLICATION_ERROR(-20000,
'Seria introdusa pentru acest program nu este corecta!' ||
CHR(13) || CHR(10) ||
' Licenta poate fi modificata prin programul ROASUPORT!');
END IF;
PINFO('3 LOGIN ' || V_PROGRAM || ' USER ' || USER, 'SYS.AUTH2');
end;
-------------------------------------------------------------------------------------
-- VERIFICA_LICENTA_LUNA
-- LA DESCHIDEREA DE LUNA NOUA SE VERIFICA DACA ESTE LICENTA PENTRU LUNA NOUA (TRIGGER LA INSERT INTO CALENDAR)
procedure verifica_licenta_luna(v_an IN NUMBER,
v_luna IN NUMBER,
v_tip IN NUMBER) is
v_serie VARCHAR2(256);
v_seriec VARCHAR2(256);
v_nume_program1 SYN_NOM_PROGRAME.DENUMIRE%TYPE := 'ROASTART';
v_nume_program2 SYN_NOM_PROGRAME.DENUMIRE%TYPE := 'ROASAL';
v_id_program CONTAFIN_ORACLE.NOM_PROGRAME.ID_PROGRAM%TYPE;
v_dataora DATE;
v_data_val DATE;
v_zi VARCHAR2(2);
begin
begin
SELECT A.ID_PROGRAM, B.SERIE, B.DATAORA
INTO V_ID_PROGRAM, V_SERIE, V_DATAORA
FROM SYN_NOM_PROGRAME A
LEFT JOIN AUTH_SERII B
ON A.ID_PROGRAM = B.ID_PROGRAM
WHERE UPPER(TRIM(A.DENUMIRE)) =
DECODE(V_TIP, 1, V_NUME_PROGRAM1, 2, V_NUME_PROGRAM2, 'XYZ')
-- daca parametrul nu e 1 sau 2, atunci trebuie sa dea eroare
AND B.STERS = 0;
exception
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20000,
'Nu aveti licenta pentru deschiderea de luna noua!' ||
CHR(13) || CHR(10) ||
' Licenta poate fi introdusa prin programul ROASUPORT!');
end;
v_zi := LPAD(extract(day from v_dataora), 2, '0');
v_seriec := auth_pack.decripteaza_serie(v_id_program,
v_serie,
v_dataora);
v_data_val := auth_pack.decripteaza_data_val(v_seriec, v_zi);
IF v_data_val < TO_DATE(v_an || v_luna, 'YYYYMM') THEN
RAISE_APPLICATION_ERROR(-20000,
'Licenta pentru acest program a expirat!' ||
CHR(13) || CHR(10) ||
' Licenta poate fi reinnoita prin programul ROASUPORT!');
END IF;
end;
-------------------------------------------------------------------------------------
-- VERIFICA_NUMAR_FIRME
-- LA CREAREA UNEI FIRME NOI SE VERIFICA DACA SE DEPASESTE NUMARUL DE FIRME DIN LICENTA
procedure verifica_numar_firme is
v_serie VARCHAR2(256);
v_seriec VARCHAR2(256);
v_nume_program SYN_NOM_PROGRAME.DENUMIRE%TYPE := 'ROASTART';
v_id_program CONTAFIN_ORACLE.NOM_PROGRAME.ID_PROGRAM%TYPE;
v_dataora DATE;
V_NR_MAX_FIRME NUMBER(10) := 0;
V_NR_FIRME NUMBER(10) := 0;
begin
begin
SELECT A.ID_PROGRAM, B.SERIE, B.DATAORA
INTO V_ID_PROGRAM, V_SERIE, V_DATAORA
FROM SYN_NOM_PROGRAME A
LEFT JOIN AUTH_SERII B
ON A.ID_PROGRAM = B.ID_PROGRAM
WHERE UPPER(TRIM(A.DENUMIRE)) = V_NUME_PROGRAM
AND B.STERS = 0;
exception
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20000,
'Nu aveti licenta pentru deschiderea unei firme noi!' ||
CHR(13) || CHR(10) ||
' Licenta poate fi introdusa prin programul ROASUPORT!');
end;
v_seriec := auth_pack.decripteaza_serie(v_id_program,
v_serie,
v_dataora);
V_NR_MAX_FIRME := auth_pack.decripteaza_nr_util(V_SERIEC);
SELECT COUNT(*)
INTO V_NR_FIRME
FROM SYN_NOM_FIRME
WHERE STERS = 0
AND NVL(ID_MAMA, 0) = 0;
IF V_NR_FIRME >= V_NR_MAX_FIRME THEN
RAISE_APPLICATION_ERROR(-20000,
'Aveti licenta pentru maxim ' ||
V_NR_MAX_FIRME || ' firme (' || V_NR_FIRME ||
' firme deja definite)!' || CHR(13) ||
CHR(10) ||
' Licenta poate fi introdusa prin programul ROASUPORT!');
END IF;
end;
-------------------------------------------------------------------------------------
procedure adauga_serie(V_ID_PROGRAM IN NUMBER,
V_SERIE IN VARCHAR2,
V_ID_UTILAD IN NUMBER) is
V_ID_SERIE AUTH_SERII.ID_SERIE%TYPE;
V_SERIER AUTH_SERII.SERIE%TYPE;
eroare_de_conversie EXCEPTION;
PRAGMA EXCEPTION_INIT(eroare_de_conversie, -6502);
begin
BEGIN
V_SERIER := HEXTORAW(V_SERIE);
EXCEPTION
WHEN eroare_de_conversie THEN
RAISE_APPLICATION_ERROR(-20000, 'Aceasta serie nu este valida!');
END;
auth_pack.verifica_serie(V_ID_PROGRAM, V_SERIER);
SELECT SEQ_AUTH_SERII.NEXTVAL INTO V_ID_SERIE FROM DUAL;
INSERT INTO AUTH_SERII
(ID_SERIE, ID_PROGRAM, SERIE, ID_UTIL)
VALUES
(V_ID_SERIE, V_ID_PROGRAM, V_SERIER, V_ID_UTILAD);
end;
-------------------------------------------------------------------------------------
procedure sterge_serie(V_ID_PROGRAM IN NUMBER, V_ID_UTILS IN NUMBER) is
begin
UPDATE AUTH_SERII
SET STERS = 1, ID_UTILS = V_ID_UTILS, DATAORAS = SYSDATE
WHERE ID_PROGRAM = V_ID_PROGRAM
AND STERS = 0;
end;
-------------------------------------------------------------------------------------
function selecteaza_serie(V_ID_PROGRAM IN NUMBER) return varchar2 is
V_SERIE AUTH_SERII.SERIE%TYPE;
V_SERIEC VARCHAR2(256);
eroare_de_conversie EXCEPTION;
PRAGMA EXCEPTION_INIT(eroare_de_conversie, -6502);
begin
begin
SELECT SERIE
INTO V_SERIE
FROM AUTH_SERII
WHERE ID_PROGRAM = V_ID_PROGRAM
AND STERS = 0;
exception
when NO_DATA_FOUND then
V_SERIE := NULL;
end;
BEGIN
V_SERIEC := TRIM(RAWTOHEX(V_SERIE));
EXCEPTION
WHEN eroare_de_conversie THEN
V_SERIEC := NULL;
END;
return V_SERIEC;
end;
-------------------------------------------------------------------------------------
function selecteaza_nr_util(V_ID_PROGRAM IN NUMBER) return number is
V_SERIE AUTH_SERII.SERIE%TYPE;
V_DATAORA DATE;
V_NR_UTILIZATORI NUMBER(4);
V_SERIEC VARCHAR2(64);
begin
begin
SELECT SERIE, DATAORA
INTO V_SERIE, V_DATAORA
FROM AUTH_SERII
WHERE ID_PROGRAM = V_ID_PROGRAM
AND STERS = 0;
V_SERIEC := auth_pack.decripteaza_serie(V_ID_PROGRAM,
V_SERIE,
V_DATAORA);
V_NR_UTILIZATORI := auth_pack.decripteaza_nr_util(V_SERIEC);
exception
when NO_DATA_FOUND then
V_NR_UTILIZATORI := 0;
end;
return V_NR_UTILIZATORI;
end;
-------------------------------------------------------------------------------------
function selecteaza_data_val(V_ID_PROGRAM IN NUMBER) return date is
V_SERIE AUTH_SERII.SERIE%TYPE;
V_DATAORA DATE;
V_DATA_VAL DATE;
V_SERIEC VARCHAR2(64);
V_ZI VARCHAR2(2);
begin
begin
SELECT SERIE, DATAORA
INTO V_SERIE, V_DATAORA
FROM AUTH_SERII
WHERE ID_PROGRAM = V_ID_PROGRAM
AND STERS = 0;
V_SERIEC := auth_pack.decripteaza_serie(V_ID_PROGRAM,
V_SERIE,
V_DATAORA);
V_ZI := LPAD(EXTRACT(DAY FROM V_DATAORA), 2, '0');
V_DATA_VAL := auth_pack.decripteaza_data_val(V_SERIEC, V_ZI);
exception
when NO_DATA_FOUND then
V_DATA_VAL := NULL;
end;
return V_DATA_VAL;
end;
-------------------------------------------------------------------------------------
procedure verifica_serie(V_ID_PROGRAM IN NUMBER, V_SERIE IN RAW) is
v_seriedec VARCHAR2(256);
v_checksum NUMBER(2);
v_suma NUMBER(2) := 0;
begin
v_seriedec := auth_pack.decripteaza_serie(V_ID_PROGRAM,
V_SERIE,
SYSDATE);
v_checksum := auth_pack.hextodec(substr(v_seriedec,
length(v_seriedec),
1));
for i in 1 .. length(v_seriedec) - 1 loop
v_suma := v_suma + auth_pack.hextodec(substr(v_seriedec, i, 1));
end loop;
if MOD(v_suma + v_checksum, 16) <> 0 then
RAISE_APPLICATION_ERROR(-20000, 'Seria introdusa nu este valida!');
end if;
end;
-------------------------------------------------------------------------------------
function decripteaza_serie(V_ID_PROGRAM IN NUMBER,
V_SERIE IN RAW,
V_DATAORA IN DATE) return varchar2 is
v_denumire CONTAFIN_ORACLE.NOM_PROGRAME.DENUMIRE%TYPE;
v_id_client NUMBER(4);
v_cheie RAW(16);
v_serieval RAW(256);
v_seriedec VARCHAR2(32);
v_valoare NUMBER(2);
eroare_de_conversie EXCEPTION;
PRAGMA EXCEPTION_INIT(eroare_de_conversie, -6502);
begin
IF V_SERIE IS NOT NULL THEN
SELECT substr(a.denumire, 4, 5)
INTO V_DENUMIRE
FROM SYN_NOM_PROGRAME A
WHERE A.ID_PROGRAM = V_ID_PROGRAM;
SELECT TO_NUMBER(DETALII) INTO V_ID_CLIENT FROM AUTH_DETALII;
v_cheie := utl_raw.cast_to_raw(RPAD(LPAD(v_id_program, 3, '0') ||
LPAD(v_id_client, 4, '0') ||
RPAD(v_denumire, 5, CHR(4)) ||
LPAD(to_char(v_dataora, 'IWYY'), 4, '0'),
16,
'X'));
-- Inlocuit DBMS_OBFUSCATION_TOOLKIT.DES3Decrypt cu DBMS_CRYPTO.DECRYPT
-- ENCRYPT_3DES_2KEY pentru chei de 16 bytes, PAD_ZERO pentru compatibilitate
v_serieval := DBMS_CRYPTO.DECRYPT(
src => v_serie,
typ => DBMS_CRYPTO.ENCRYPT_3DES_2KEY + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_ZERO,
key => v_cheie
);
begin
for i in 1 .. length(v_serieval) / 2 loop
v_valoare := to_number(substr(v_serieval, 2 * i - 1, 2));
if v_valoare > 40 then
v_seriedec := v_seriedec || auth_pack.dectohex(v_valoare - 31);
else
v_seriedec := v_seriedec || (v_valoare - 30);
end if;
end loop;
exception
when eroare_de_conversie then
RAISE_APPLICATION_ERROR(-20100,
'Seria introdusa nu este valida!');
end;
ELSE
v_seriedec := NULL;
END IF;
RETURN v_seriedec;
end;
-------------------------------------------------------------------------------------
function decripteaza_nr_util(V_SERIEC IN VARCHAR2) return number is
begin
IF V_SERIEC IS NOT NULL THEN
return to_number(substr(v_seriec, 1, 4));
ELSE
return 0;
END IF;
end;
-------------------------------------------------------------------------------------
function decripteaza_data_val(V_SERIEC IN VARCHAR2, V_ZI IN VARCHAR2)
return date is
v_luna varchar2(2);
begin
IF V_SERIEC IS NOT NULL THEN
v_luna := LPAD(auth_pack.hextodec(substr(v_seriec, 5, 1)), 2, '0');
return last_day(to_date(v_luna || substr(v_seriec, 6, 2), 'MMYY'));
ELSE
return null;
END IF;
end;
-------------------------------------------------------------------------------------
function hextodec(V_HEXA IN VARCHAR2) return number is
v_numar NUMBER(2);
begin
IF ASCII(UPPER(TRIM(V_HEXA))) BETWEEN 48 AND 57 or
ASCII(UPPER(TRIM(V_HEXA))) BETWEEN 65 AND 70 THEN
CASE UPPER(TRIM(V_HEXA))
WHEN 'A' THEN
v_numar := 10;
WHEN 'B' THEN
v_numar := 11;
WHEN 'C' THEN
v_numar := 12;
WHEN 'D' THEN
v_numar := 13;
WHEN 'E' THEN
v_numar := 14;
WHEN 'F' THEN
v_numar := 15;
ELSE
v_numar := to_number(V_HEXA);
END CASE;
ELSE
RAISE_APPLICATION_ERROR(-20000, 'Caracterul nu este valid!');
END IF;
return v_numar;
end;
-------------------------------------------------------------------------------------
function dectohex(V_NUMAR IN NUMBER) return varchar2 is
v_hexa VARCHAR2(1);
begin
CASE v_numar
WHEN 10 THEN
v_hexa := 'A';
WHEN 11 THEN
v_hexa := 'B';
WHEN 12 THEN
v_hexa := 'C';
WHEN 13 THEN
v_hexa := 'D';
WHEN 14 THEN
v_hexa := 'E';
WHEN 15 THEN
v_hexa := 'F';
ELSE
v_hexa := to_char(V_NUMAR);
END CASE;
return v_hexa;
end;
end AUTH_PACK;
/
-- ============================================================================
-- PINFO Procedure (wrapped)
-- ============================================================================
CREATE OR REPLACE NONEDITIONABLE PROCEDURE "SYS"."PINFO" wrapped
a000000
b2
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
7
d3 e7
upTW3dK2OWquAE9qYLTPkR2RYpwwgy7cmJ5qfHSKimRQCVrK0lt6JkrTw376tMBrXqprtSRs
3F59wMZSKNEfsiHE5qU4k/VLyE0GHVQOHroHCu1lLnCoJ2cL5HuwV1l13q9vshqVV+HqW8iZ
4r37EyYRJSuaK2nFOQuUu7mgwop/p/KVn2UAnzh9V6+tJBW2C4yS2jO/C9ISABHyfhn3R8gS
6w/fw6l4/Q==
/
-- ============================================================================
-- NEWSCHEMA Procedure
-- ============================================================================
CREATE OR REPLACE NONEDITIONABLE PROCEDURE "SYS"."NEWSCHEMA" (tcSchema varchar2,
tnLuna number,
tnAn number) is
lcCommand varchar2(1000);
lcSchemaSursa VARCHAR2(100) := 'FIRMANOUA';
lcSchemaDestinatie VARCHAR2(100) := tcSchema;
lcDumpFile VARCHAR2(100);
lcDumpDir VARCHAR2(100) := 'DMPDIR';
-- lnCount number(10);
lcSql varchar2(1000);
lnAn number := tnAn;
lnLuna number := tnLuna;
ldDataI date;
ldDataF date;
lnZileLucratoare number(10) := 0;
lnOreLucratoare number(10) := 0;
lnMaxAn number(10);
lcLocatie varchar2(100) := 'CREARE FIRMA ' || tcSchema;
h1 NUMBER; -- Data Pump job handle
ind NUMBER; -- Loop index
percent_done NUMBER; -- Percentage of job complete
job_state VARCHAR2(30); -- To keep track of job state
le ku$_LogEntry; -- For WIP and error messages
js ku$_JobStatus; -- The job status from get_status
-- jd ku$_JobDesc; -- The job description from get_status
sts ku$_Status; -- The status object returned by get_status
begin
------------------------------------------------------------------------
-- CREATE THE USER
------------------------------------------------------------------------
/* SELECT COUNT(1)
INTO lnCount
FROM dba_users
WHERE username = UPPER(tcSchema);
IF lnCount <> 0 THEN
EXECUTE IMMEDIATE ('DROP USER ' || tcSchema || ' CASCADE');
END IF;*/
lcCommand := 'create user ' || tcSchema || ' identified by ' || CASE
WHEN upper(tcSchema) like 'TEST%' THEN
'"123"'
ELSE
'ROMFASTSOFT'
END || ' default tablespace ROA
temporary tablespace TEMP
profile DEFAULT';
pinfo(lcCommand, lcLocatie);
execute immediate lcCommand;
------------------------------------------------------------------------
-- GRANT PRIVILEGIES
------------------------------------------------------------------------
lcCommand := 'grant connect to ' || tcSchema;
execute immediate lcCommand;
lcCommand := 'grant resource to ' || tcSchema;
execute immediate lcCommand;
lcCommand := 'grant create materialized view to ' || tcSchema;
execute immediate lcCommand;
lcCommand := 'grant create procedure to ' || tcSchema;
execute immediate lcCommand;
lcCommand := 'grant create sequence to ' || tcSchema;
execute immediate lcCommand;
lcCommand := 'grant create table to ' || tcSchema;
execute immediate lcCommand;
lcCommand := 'grant create trigger to ' || tcSchema;
execute immediate lcCommand;
lcCommand := 'grant create type to ' || tcSchema;
execute immediate lcCommand;
lcCommand := 'grant create view to ' || tcSchema;
execute immediate lcCommand;
lcCommand := 'grant debug connect session to ' || tcSchema;
execute immediate lcCommand;
lcCommand := 'grant select any table to ' || tcSchema;
execute immediate lcCommand;
lcCommand := 'grant unlimited tablespace to ' || tcSchema;
execute immediate lcCommand;
------------------------------------------------------------------------
-- IMPORT DUMP
------------------------------------------------------------------------
-- Create a (user-named) Data Pump job to do a "full" import (everything
-- in the dump file without filtering).
lcDumpFile := lcSchemaSursa || '.dmp';
-- h1 := DBMS_DATAPUMP.OPEN('IMPORT', 'SCHEMA', NULL, lcSchemaDestinatie);
h1 := DBMS_DATAPUMP.OPEN('IMPORT', 'SCHEMA', NULL, lcSchemaDestinatie);
-- Specify the single dump file for the job (using the handle just returned)
-- and directory object, which must already be defined and accessible
-- to the user running this procedure. This is the dump file created by
-- the export operation in the first example.
-- DBMS_DATAPUMP.ADD_FILE(h1, lcDumpFile, lcDumpDir);
BEGIN
PINFO('DBMS_DATAPUMP.ADD_FILE LOG', lcLocatie);
DBMS_DATAPUMP.ADD_FILE(handle => h1,
filename => lcSchemaDestinatie || '.log',
directory => 'DMPDIR',
filetype => 3);
PINFO('DBMS_DATAPUMP.ADD_FILE DMP', lcLocatie);
DBMS_DATAPUMP.ADD_FILE(handle => h1,
filename => lcDumpFile,
directory => lcDumpDir,
filetype => 1);
-- A metadata remap will map all schema objects from HR to BLAKE.
PINFO('DBMS_DATAPUMP.METADATA_REMAP', lcLocatie);
DBMS_DATAPUMP.METADATA_REMAP(h1,
'REMAP_SCHEMA',
lcSchemaSursa,
lcSchemaDestinatie);
-- If a table already exists in the destination schema, skip it (leave
-- the preexisting table alone). This is the default, but it does not hurt
-- to specify it explicitly.
DBMS_DATAPUMP.SET_PARAMETER(h1, 'TABLE_EXISTS_ACTION', 'SKIP');
-- Start the job. An exception is returned if something is not set up properly.
PINFO('DBMS_DATAPUMP.START_JOB', lcLocatie);
DBMS_DATAPUMP.START_JOB(h1);
------------------------------------------------------------------------
-- The import job should now be running. In the following loop, the job is
-- monitored until it completes. In the meantime, progress information is
-- displayed. Note: this is identical to the export example.
percent_done := 0;
job_state := 'UNDEFINED';
while (job_state != 'COMPLETED') and (job_state != 'STOPPED') loop
dbms_datapump.get_status(h1,
dbms_datapump.ku$_status_job_error +
dbms_datapump.ku$_status_job_status +
dbms_datapump.ku$_status_wip,
-1,
job_state,
sts);
js := sts.job_status;
-- If the percentage done changed, display the new value.
if js.percent_done != percent_done then
pinfo('*** Job percent done = ' || to_char(js.percent_done),
lcLocatie);
percent_done := js.percent_done;
end if;
-- If any work-in-progress (WIP) or Error messages were received for the job,
-- display them.
if (bitand(sts.mask, dbms_datapump.ku$_status_wip) != 0) then
le := sts.wip;
else
if (bitand(sts.mask, dbms_datapump.ku$_status_job_error) != 0) then
le := sts.error;
else
le := null;
end if;
end if;
if le is not null then
ind := le.FIRST;
while ind is not null loop
-- dbms_output.put_line(le(ind).LogText);
pinfo(le(ind).LogText, lcLocatie);
ind := le.NEXT(ind);
end loop;
end if;
end loop;
-- Indicate that the job finished and gracefully detach from it.
-- dbms_output.put_line('Job has completed');
pinfo('Job has completed', lcLocatie);
-- dbms_output.put_line('Final job state = ' || job_state);
pinfo('Final job state = ' || job_state,
'CREARE FIRMA ' || lcSchemaDestinatie);
------------------------------------------------------------------------
-- POST IMPORT
-- 1. actualizare calendar, sal_calendar, cote_tva
-- CALENDAR
lcSql := 'UPDATE ' || lcSchemaDestinatie ||
'.CALENDAR SET ANUL = :1, LUNA = :2, AN = TO_CHAR(:3), NL = LPAD(:4, 2, ''0'')';
PINFO(lcSql, lcLocatie);
EXECUTE IMMEDIATE lcSql
USING lnAn, lnLuna, lnAn, lnLuna;
-- SAL_CALENDAR
ldDataI := TO_DATE(lpad(lnAn, 4, '0') || lpad(lnLuna, 2, '0'), 'YYYYMM');
ldDataF := ADD_MONTHS(ldDataI, 1) - 1;
lcSql := 'select ' || lcSchemaDestinatie ||
'.pack_personal.calculeaza_nr_zile(:1, :2) FROM DUAL';
EXECUTE IMMEDIATE lcSql
INTO lnZileLucratoare
USING ldDataI, ldDataF;
lnOreLucratoare := lnZileLucratoare * 8;
lcSql := 'UPDATE ' || lcSchemaDestinatie ||
'.SAL_CALENDAR SET AN = :1 , LUNA = :2, ZILELUC = :3, ORESTAS = :4, ORELUC = :5';
PINFO(lcSql, lcLocatie);
EXECUTE IMMEDIATE lcSql
USING lnAn, lnLuna, lnZileLucratoare, lnOreLucratoare, lnOreLucratoare;
-- SAL_IMPOZITAR
lcSql := 'UPDATE ' || lcSchemaDestinatie ||
'.SAL_IMPOZITAR SET AN = :1 , LUNA = :2';
PINFO(lcSql, lcLocatie);
EXECUTE IMMEDIATE lcSql
USING lnAn, lnLuna;
-- PLCONT
lcSql := 'SELECT max(an) as plan from ' || lcSchemaDestinatie ||
'.PLCONT';
PINFO(lcSql, lcLocatie);
EXECUTE IMMEDIATE lcSql
into lnMaxAn;
if lnMaxAn <> lnAn then
lcSql := 'UPDATE ' || lcSchemaDestinatie ||
'.PLCONT SET AN = :1 WHERE AN = :2';
PINFO(lcSql, lcLocatie);
EXECUTE IMMEDIATE lcSql
USING lnAn, lnMaxAn;
end if;
-- COTE_TVA
lcSql := 'SELECT max(an*12+luna) from ' || lcSchemaDestinatie ||
'.cote_tva';
PINFO(lcSql, lcLocatie);
EXECUTE IMMEDIATE lcSql
into lnMaxAn;
lcSql := 'UPDATE ' || lcSchemaDestinatie ||
'.COTE_TVA SET AN = :1, LUNA = :2 WHERE AN*12+LUNA = :3';
PINFO(lcSql, lcLocatie);
EXECUTE IMMEDIATE lcSql
USING lnAn, lnLuna, lnMaxAn;
------------------------------------------------------------------------
-- 2. ACTUALIZARE SCHEMA LA ZI
PINFO('Actualizare schema la zi...', lcLocatie);
CONTAFIN_ORACLE.PACK_UPDATE.UpdateROA(tnUpdateApp => 0,
tnUpdateScripturi => 0,
tnUpdateDatabase => 1,
tcSchemaList => tcSchema);
EXCEPTION
WHEN OTHERS THEN
PINFO(SQLERRM, lcLocatie);
raise_application_error(-20000, SQLERRM);
END;
DBMS_DATAPUMP.DETACH(h1);
end NewSchema;
/
-- ============================================================================
-- UPDATESQLPLUS Procedure
-- ============================================================================
CREATE OR REPLACE NONEDITIONABLE PROCEDURE "SYS"."UPDATESQLPLUS" (tcSqlPlusPath in varchar2,
tcScriptPath in varchar2) as
lcJobName varchar2(500);
begin
lcJobName := 'updateschema_' || to_char(sysdate, 'YYYYMMDDHH24MISS');
dbms_scheduler.create_job(lcJobName,
job_action => tcSqlPlusPath,
number_of_arguments => 2,
job_type => 'executable',
enabled => false);
dbms_scheduler.set_job_argument_value(lcJobName, 1, '/nolog');
dbms_scheduler.set_job_argument_value(lcJobName, 2, '@' || tcScriptPath);
dbms_scheduler.enable(lcJobName);
end;
/
-- ============================================================================
-- NEWSCHEMAJOB Procedure
-- ============================================================================
CREATE OR REPLACE NONEDITIONABLE PROCEDURE "SYS"."NEWSCHEMAJOB" (tcSchema varchar2,
tnLuna number,
tnAn number) as
lcJobName varchar2(500);
begin
lcJobName := 'NEWSCHEMA_' || UPPER(tcSchema);
dbms_scheduler.create_job(job_name => lcJobName,
job_type => 'STORED_PROCEDURE',
job_action => 'NEWSCHEMA',
number_of_arguments => 3,
enabled => false);
dbms_scheduler.set_job_argument_value(lcJobName, 1, tcSchema);
dbms_scheduler.set_job_argument_value(lcJobName, 2, to_char(tnLuna));
dbms_scheduler.set_job_argument_value(lcJobName, 3, to_char(tnAn));
dbms_scheduler.enable(lcJobName);
end NEWSCHEMAJOB;
/
-- ============================================================================
-- EXECUTESCRIPTOS Procedure
-- ============================================================================
CREATE OR REPLACE NONEDITIONABLE PROCEDURE "SYS"."EXECUTESCRIPTOS" (tcPowerShellPath in varchar2,
tcScriptPath in varchar2) as
lcJobName varchar2(500);
begin
lcJobName := 'exec_ps_' || SUBSTR(SYS_GUID(), 1, 8);
DBMS_SCHEDULER.CREATE_JOB(
job_name => lcJobName,
job_action => tcPowerShellPath,
number_of_arguments => 4,
job_type => 'executable',
enabled => FALSE
);
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(lcJobName, 1, '-ExecutionPolicy');
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(lcJobName, 2, 'Bypass');
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(lcJobName, 3, '-File');
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(lcJobName, 4, tcScriptPath);
DBMS_SCHEDULER.ENABLE(lcJobName);
end ExecuteScriptOS;
/
-- ============================================================================
-- NEWSCHEMAPROGRESS Function (wrapped)
-- ============================================================================
CREATE OR REPLACE NONEDITIONABLE FUNCTION "SYS"."NEWSCHEMAPROGRESS" wrapped
a000000
b2
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
8
252 199
zxoOlwCbdojcPsGMNEX+7vG4viowgxAJ7UhGfHS5R14whrSDSgcEWXzIxarybpjrYjS1uiG9
+1zNJlbIu3JK13bwcN6yBEVbLfFgwc0GPkaZbaSp/SMtUbWKq6audu2tqMhrqajFIq/ZxhIj
RbyhiZKk8frL4h2iwYVP6fEjGunska0ZpjeOvUDdhcOmpt60PCOUWO09fPBTLoV9UZ8FnKRq
3BnqmzYpNIh3Nmox3IHh7L1+/B3ZdDkRY588x/i3cp95sH4gv78FSbxaXXG7LcR3AbIAWqKn
yd436mUq5f997PYETavFoaYaFQoUOA1e0g/DynVjNWxPRq56JQnrwP+a0i9dmz3se/CgF7o5
DdffGzEed6v0ceFecZNDvJKMnbz6AfnkKnMFeISf8Mw=
/

View File

@@ -0,0 +1,15 @@
-- 06_sys_views.sql
-- Create SYS custom views
-- Source: backup/07_sys_views.sql
CREATE OR REPLACE FORCE VIEW "SYS"."VAUTH_SERII" ("ID_PROGRAM", "NUME", "SERIE", "NR_UTIL", "DATA_VAL") AS
select a.id_program,
a.denumire as nume,
auth_pack.selecteaza_serie(a.id_program) as serie,
auth_pack.selecteaza_nr_util(a.id_program) as nr_util,
auth_pack.selecteaza_data_val(a.id_program) as data_val
from syn_nom_programe a
left join syn_def_programe b on a.id_program = b.ide_program
where b.sters = 0
and b.instalat = 1;
/

View File

@@ -0,0 +1,12 @@
-- 07_sys_triggers.sql
-- Create SYS custom triggers
-- Source: backup/08_sys_triggers.sql
CREATE OR REPLACE TRIGGER "SYS"."LOGON_AUDIT_TRIGGER"
AFTER LOGON ON DATABASE
BEGIN
DBMS_APPLICATION_INFO.SET_CLIENT_INFO(sys_context('userenv', 'ip_address'));
auth_pack.verifica_program();
END;
/
ALTER TRIGGER "SYS"."LOGON_AUDIT_TRIGGER" ENABLE;

View File

@@ -0,0 +1,5 @@
-- 08_context.sql
-- Create application context
-- Source: backup/09_context.sql
CREATE OR REPLACE CONTEXT "SESIUNE" USING "CONTAFIN_ORACLE"."SET_VARIABILE";

View File

@@ -0,0 +1,254 @@
-- 09_granturi.sql
-- Apply all grants
-- Source: backup/03_granturi.sql
-- ============================================================================
-- 1. Grants on SYS objects to application schemas
-- ============================================================================
GRANT EXECUTE ON SYS.AUTH_PACK TO CONTAFIN_ORACLE;
GRANT SELECT ON SYS.DBA_DATAPUMP_JOBS TO CONTAFIN_ORACLE;
GRANT EXECUTE ON SYS.DBMS_LOCK TO CONTAFIN_ORACLE;
GRANT EXECUTE ON SYS.DBMS_SCHEDULER TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY DMPDIR TO CONTAFIN_ORACLE;
GRANT EXECUTE ON SYS.EXECUTESCRIPTOS TO CONTAFIN_ORACLE;
GRANT EXECUTE ON SYS.NEWSCHEMAJOB TO CONTAFIN_ORACLE;
GRANT EXECUTE ON SYS.UPDATESQLPLUS TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_COMUNROA 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_ROAUPDATE TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAVIN TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_USERREPORTS TO CONTAFIN_ORACLE;
GRANT EXECUTE ON SYS.UTL_HTTP TO CONTAFIN_ORACLE;
GRANT EXECUTE ON SYS.UTL_INADDR TO CONTAFIN_ORACLE;
GRANT EXECUTE ON SYS.UTL_MAIL TO CONTAFIN_ORACLE;
GRANT EXECUTE ON SYS.UTL_SMTP TO CONTAFIN_ORACLE;
GRANT EXECUTE ON SYS.UTL_TCP TO CONTAFIN_ORACLE;
GRANT SELECT ON SYS.VAUTH_SERII TO CONTAFIN_ORACLE;
-- ============================================================================
-- 2. Grants from CONTAFIN_ORACLE to PUBLIC
-- ============================================================================
GRANT SELECT ON CONTAFIN_ORACLE.ATAS_ATASAMENTE TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.ATAS_ATASAMENTE TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.ATAS_REFERINTE TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.ATAS_REFERINTE TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.CHARC2COLLECTION TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.CHARN2COLLECTION TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.CHAR_ROW TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.CHAR_TAB TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.CONCATENATE_LIST TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.CONTRACT_M TO PUBLIC;
GRANT UPDATE ON CONTAFIN_ORACLE.CURS_ACTUALIZARI TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.CURS_ACTUALIZARI TO PUBLIC;
GRANT INSERT ON CONTAFIN_ORACLE.CURS_ACTUALIZARI TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.CURS_ACTUALIZARI TO PUBLIC;
GRANT UPDATE ON CONTAFIN_ORACLE.CURS_COTATII TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.CURS_COTATII TO PUBLIC;
GRANT INSERT ON CONTAFIN_ORACLE.CURS_COTATII TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.CURS_COTATII TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.DEF_GRUP TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.DEF_GRUP TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.DEF_GRUP_DREPT TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.DEF_GRUP_DREPT TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.DEF_PROGRAME TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.DEF_PROGRAME TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.FF_PERSINTRET TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.FF_SUME TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.GETWORDCOUNT TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.GETWORDNUM TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.HELPCONT TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.LUNILEAN TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.LUNILEAN TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.MYBALTYPE TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.MYSCALARTYPE TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.MYTABLEBALTYPE TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_CETATENII TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.NOM_CETATENII TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_CODURI_CAEN TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.NOM_CODURI_CAEN TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_FIRME TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.NOM_FIRME TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.NOM_FORME_JURIDICE TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_FORME_JURIDICE TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_FORME_ORGANIZARE TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.NOM_FORME_ORGANIZARE TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.NOM_FORME_PROPRIETATE TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_FORME_PROPRIETATE TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_JUDETE TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.NOM_JUDETE TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_LOCALITATI TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.NOM_LOCALITATI TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.NOM_PROGRAME TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_PROGRAME TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.NOM_TARI TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_TARI TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_TIPAPATRID TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.NOM_TIPAPATRID TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_TIP_SOCIETATE TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.NOM_TIP_SOCIETATE TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_UM_ISO TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.NOM_UM_ISO TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_VALUTE_ISO TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.NOM_VALUTE_ISO TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.NUM_ROW TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.NUM_TAB TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.OPTIUNI_PROGRAME TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_DEF_CO TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_DREPTURI TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_ROARTVAI TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_UPDATE TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_UTILS TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_UTILS_FILE TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.PIVOT_ROW TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.PIVOT_TABLE TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.RANDINCHIDERETVA TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.RTVAI_AGENTI TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.RTVAI_ISTORIC TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.SAL_ACTUALIZARE_COR TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.SAL_ACTUALIZARE_COR TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.SAL_CAMPURI_RED TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.SAL_CONTRACT_M TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.SAL_COR TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.SAL_COR TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.SAL_FF_PERSINTRET TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.SAL_FF_SUME TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.SAL_NOM_DURATA_MUNCA TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.SAL_NOM_DURATA_MUNCA TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.SAL_NOM_INTERVALE_MUNCA TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.SAL_NOM_INTERVALE_MUNCA TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.SAL_NOM_REPARTIZARE_MUNCA TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.SAL_NOM_REPARTIZARE_MUNCA TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.SAL_NOM_STARI_CTR TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.SAL_NOM_STARI_CTR TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.SAL_NOM_TEMEI TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.SAL_NOM_TEMEI TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.SAL_NOM_TIPAUTORIZATIE TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.SAL_NOM_TIPAUTORIZATIE TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.SAL_NOM_TIP_NORME TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.SAL_NOM_TIP_NORME TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.SAL_NOM_TIP_SPOR TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.SAL_NOM_TIP_SPOR TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.SAL_RED TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.SAL_TABELESTERS TO PUBLIC;
GRANT DELETE ON CONTAFIN_ORACLE.SERVER_INFO TO PUBLIC;
GRANT INSERT ON CONTAFIN_ORACLE.SERVER_INFO TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.SERVER_INFO TO PUBLIC;
GRANT UPDATE ON CONTAFIN_ORACLE.SERVER_INFO TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.STRINGAGG TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.STRINGAGGTYPE TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.STRINGAGG_COL TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.TABELAVALORITAGURI TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.TABINCHIDERETVA TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.TABSTERS TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.UTILIZATORI TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.UTILIZATORI TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.UW_SEL_ROW TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.UW_SEL_TAB TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.VALOARETAG TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.VANZARI_DETALII_ROW TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.VANZARI_DETALII_TAB TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.VARCHAR2_TAB TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.VDEF_PROGRAME TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.VDEF_PROGRAME TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.VDEF_UTIL_FIRME TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.VDEF_UTIL_FIRME TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.VDEF_UTIL_GRUP TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.VDEF_UTIL_GRUP TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.VDEF_UTIL_OBIECTE TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.VDEF_UTIL_OBIECTE TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.VDEF_UTIL_PROGRAME TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.VDEF_UTIL_PROGRAME TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.VNOM_JUDETE TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.VNOM_LOCALITATI TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.VNOM_TARI TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.VNOM_UM_ISO TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.VNOM_UM_ISO TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.VNOM_VALUTE_ISO TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.VSTATS TO PUBLIC;
GRANT REFERENCES ON CONTAFIN_ORACLE.VUTILIZATORI TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.VUTILIZATORI TO PUBLIC;
GRANT SELECT ON CONTAFIN_ORACLE.V_NOM_FIRME TO PUBLIC;
GRANT INHERIT PRIVILEGES ON SYS.CONTAFIN_ORACLE TO PUBLIC;
-- ============================================================================
-- 3. System privileges
-- ============================================================================
GRANT CREATE ANY CONTEXT TO CONTAFIN_ORACLE;
GRANT CREATE ANY DIRECTORY TO CONTAFIN_ORACLE;
GRANT CREATE ANY JOB TO CONTAFIN_ORACLE;
GRANT CREATE EVALUATION CONTEXT TO CONTAFIN_ORACLE;
GRANT CREATE EXTERNAL JOB TO CONTAFIN_ORACLE;
GRANT CREATE PUBLIC SYNONYM TO CONTAFIN_ORACLE;
GRANT CREATE RULE TO CONTAFIN_ORACLE;
GRANT CREATE RULE SET TO CONTAFIN_ORACLE;
GRANT CREATE SESSION TO CONTAFIN_ORACLE;
GRANT CREATE VIEW TO CONTAFIN_ORACLE;
GRANT DEBUG CONNECT SESSION TO CONTAFIN_ORACLE;
GRANT DELETE ANY TABLE TO CONTAFIN_ORACLE;
GRANT DROP ANY CONTEXT TO CONTAFIN_ORACLE;
GRANT DROP PUBLIC SYNONYM TO CONTAFIN_ORACLE;
GRANT EXECUTE ANY PROCEDURE TO CONTAFIN_ORACLE;
GRANT INSERT ANY TABLE TO CONTAFIN_ORACLE;
GRANT SELECT ANY DICTIONARY TO CONTAFIN_ORACLE;
GRANT SELECT ANY SEQUENCE TO CONTAFIN_ORACLE;
GRANT SELECT ANY TABLE TO CONTAFIN_ORACLE;
GRANT UNLIMITED TABLESPACE TO CONTAFIN_ORACLE;
GRANT UPDATE ANY TABLE TO CONTAFIN_ORACLE;
-- ============================================================================
-- 4. Role privileges
-- ============================================================================
GRANT CONNECT TO CONTAFIN_ORACLE;
GRANT EXP_FULL_DATABASE TO CONTAFIN_ORACLE;
GRANT IMP_FULL_DATABASE TO CONTAFIN_ORACLE;
GRANT RESOURCE TO CONTAFIN_ORACLE;

View File

@@ -0,0 +1,84 @@
-- 10_sinonime_publice.sql
-- Create public synonyms
-- Source: backup/02_sinonime_publice.sql
CREATE PUBLIC SYNONYM CHARC2COLLECTION FOR CONTAFIN_ORACLE.CHARC2COLLECTION;
CREATE PUBLIC SYNONYM CHARN2COLLECTION FOR CONTAFIN_ORACLE.CHARN2COLLECTION;
CREATE PUBLIC SYNONYM CHAR_ROW FOR CONTAFIN_ORACLE.CHAR_ROW;
CREATE PUBLIC SYNONYM CHAR_TAB FOR CONTAFIN_ORACLE.CHAR_TAB;
CREATE PUBLIC SYNONYM CONTRACT_M FOR CONTAFIN_ORACLE.CONTRACT_M;
CREATE PUBLIC SYNONYM FF_PERSINTRET FOR CONTAFIN_ORACLE.FF_PERSINTRET;
CREATE PUBLIC SYNONYM FF_SUME FOR CONTAFIN_ORACLE.FF_SUME;
CREATE PUBLIC SYNONYM GETWORDCOUNT FOR CONTAFIN_ORACLE.GETWORDCOUNT;
CREATE PUBLIC SYNONYM GETWORDNUM FOR CONTAFIN_ORACLE.GETWORDNUM;
CREATE PUBLIC SYNONYM NUM_ROW FOR CONTAFIN_ORACLE.NUM_ROW;
CREATE PUBLIC SYNONYM NUM_TAB FOR CONTAFIN_ORACLE.NUM_TAB;
CREATE PUBLIC SYNONYM PACK_ROARTVAI FOR CONTAFIN_ORACLE.PACK_ROARTVAI;
CREATE PUBLIC SYNONYM PACK_UTILS FOR CONTAFIN_ORACLE.PACK_UTILS;
CREATE PUBLIC SYNONYM PACK_UTILS_FILE FOR CONTAFIN_ORACLE.PACK_UTILS_FILE;
CREATE PUBLIC SYNONYM PIVOT_ROW FOR CONTAFIN_ORACLE.PIVOT_ROW;
CREATE PUBLIC SYNONYM PIVOT_TABLE FOR CONTAFIN_ORACLE.PIVOT_TABLE;
CREATE PUBLIC SYNONYM RANDINCHIDERETVA FOR CONTAFIN_ORACLE.RANDINCHIDERETVA;
CREATE PUBLIC SYNONYM RTVAI_AGENTI FOR CONTAFIN_ORACLE.RTVAI_AGENTI;
CREATE PUBLIC SYNONYM RTVAI_ISTORIC FOR CONTAFIN_ORACLE.RTVAI_ISTORIC;
CREATE PUBLIC SYNONYM SAL_CAMPURI_RED FOR CONTAFIN_ORACLE.SAL_CAMPURI_RED;
CREATE PUBLIC SYNONYM SAL_CONTRACT_M FOR CONTAFIN_ORACLE.SAL_CONTRACT_M;
CREATE PUBLIC SYNONYM SAL_RED FOR CONTAFIN_ORACLE.SAL_RED;
CREATE PUBLIC SYNONYM SAL_TABELESTERS FOR CONTAFIN_ORACLE.SAL_TABELESTERS;
CREATE PUBLIC SYNONYM SERVER_INFO FOR CONTAFIN_ORACLE.SERVER_INFO;
CREATE PUBLIC SYNONYM STRINGAGG FOR CONTAFIN_ORACLE.STRINGAGG;
CREATE PUBLIC SYNONYM SYN_ATAS_ATASAMENTE FOR CONTAFIN_ORACLE.ATAS_ATASAMENTE;
CREATE PUBLIC SYNONYM SYN_ATAS_REFERINTE FOR CONTAFIN_ORACLE.ATAS_REFERINTE;
CREATE PUBLIC SYNONYM SYN_CURS_ACTUALIZARI FOR CONTAFIN_ORACLE.CURS_ACTUALIZARI;
CREATE PUBLIC SYNONYM SYN_CURS_COTATII FOR CONTAFIN_ORACLE.CURS_COTATII;
CREATE PUBLIC SYNONYM SYN_DEF_GRUP FOR CONTAFIN_ORACLE.DEF_GRUP;
CREATE PUBLIC SYNONYM SYN_DEF_GRUP_DREPT FOR CONTAFIN_ORACLE.DEF_GRUP_DREPT;
CREATE PUBLIC SYNONYM SYN_DEF_PROGRAME FOR CONTAFIN_ORACLE.DEF_PROGRAME;
CREATE PUBLIC SYNONYM SYN_HELPCONT FOR CONTAFIN_ORACLE.HELPCONT;
CREATE PUBLIC SYNONYM SYN_LUNILEAN FOR CONTAFIN_ORACLE.LUNILEAN;
CREATE PUBLIC SYNONYM SYN_NOM_CETATENII FOR CONTAFIN_ORACLE.NOM_CETATENII;
CREATE PUBLIC SYNONYM SYN_NOM_CODURI_CAEN FOR CONTAFIN_ORACLE.NOM_CODURI_CAEN;
CREATE PUBLIC SYNONYM SYN_NOM_FIRME FOR CONTAFIN_ORACLE.NOM_FIRME;
CREATE PUBLIC SYNONYM SYN_NOM_FORME_JURIDICE FOR CONTAFIN_ORACLE.NOM_FORME_JURIDICE;
CREATE PUBLIC SYNONYM SYN_NOM_FORME_ORGANIZARE FOR CONTAFIN_ORACLE.NOM_FORME_ORGANIZARE;
CREATE PUBLIC SYNONYM SYN_NOM_FORME_PROPRIETATE FOR CONTAFIN_ORACLE.NOM_FORME_PROPRIETATE;
CREATE PUBLIC SYNONYM SYN_NOM_JUDETE FOR CONTAFIN_ORACLE.NOM_JUDETE;
CREATE PUBLIC SYNONYM SYN_NOM_LOCALITATI FOR CONTAFIN_ORACLE.NOM_LOCALITATI;
CREATE PUBLIC SYNONYM SYN_NOM_PROGRAME FOR CONTAFIN_ORACLE.NOM_PROGRAME;
CREATE PUBLIC SYNONYM SYN_NOM_TARI FOR CONTAFIN_ORACLE.NOM_TARI;
CREATE PUBLIC SYNONYM SYN_NOM_TIPAPATRID FOR CONTAFIN_ORACLE.NOM_TIPAPATRID;
CREATE PUBLIC SYNONYM SYN_NOM_TIP_SOCIETATE FOR CONTAFIN_ORACLE.NOM_TIP_SOCIETATE;
CREATE PUBLIC SYNONYM SYN_NOM_VALUTE_ISO FOR CONTAFIN_ORACLE.NOM_VALUTE_ISO;
CREATE PUBLIC SYNONYM SYN_OPTIUNI_PROGRAME FOR CONTAFIN_ORACLE.OPTIUNI_PROGRAME;
CREATE PUBLIC SYNONYM SYN_PACK_DEF_CO FOR CONTAFIN_ORACLE.PACK_DEF_CO;
CREATE PUBLIC SYNONYM SYN_PACK_DREPTURI FOR CONTAFIN_ORACLE.PACK_DREPTURI;
CREATE PUBLIC SYNONYM SYN_SAL_ACTUALIZARE_COR FOR CONTAFIN_ORACLE.SAL_ACTUALIZARE_COR;
CREATE PUBLIC SYNONYM SYN_SAL_COR FOR CONTAFIN_ORACLE.SAL_COR;
CREATE PUBLIC SYNONYM SYN_SAL_NOM_DURATA_MUNCA FOR CONTAFIN_ORACLE.SAL_NOM_DURATA_MUNCA;
CREATE PUBLIC SYNONYM SYN_SAL_NOM_INTERVALE_MUNCA FOR CONTAFIN_ORACLE.SAL_NOM_INTERVALE_MUNCA;
CREATE PUBLIC SYNONYM SYN_SAL_NOM_REPARTIZARE_MUNCA FOR CONTAFIN_ORACLE.SAL_NOM_REPARTIZARE_MUNCA;
CREATE PUBLIC SYNONYM SYN_SAL_NOM_STARI_CTR FOR CONTAFIN_ORACLE.SAL_NOM_STARI_CTR;
CREATE PUBLIC SYNONYM SYN_SAL_NOM_TEMEI FOR CONTAFIN_ORACLE.SAL_NOM_TEMEI;
CREATE PUBLIC SYNONYM SYN_SAL_NOM_TIPAUTORIZATIE FOR CONTAFIN_ORACLE.SAL_NOM_TIPAUTORIZATIE;
CREATE PUBLIC SYNONYM SYN_SAL_NOM_TIP_NORME FOR CONTAFIN_ORACLE.SAL_NOM_TIP_NORME;
CREATE PUBLIC SYNONYM SYN_SAL_NOM_TIP_SPOR FOR CONTAFIN_ORACLE.SAL_NOM_TIP_SPOR;
CREATE PUBLIC SYNONYM SYN_UTILIZATORI FOR CONTAFIN_ORACLE.UTILIZATORI;
CREATE PUBLIC SYNONYM SYN_VDEF_PROGRAME FOR CONTAFIN_ORACLE.VDEF_PROGRAME;
CREATE PUBLIC SYNONYM SYN_VDEF_UTIL_FIRME FOR CONTAFIN_ORACLE.VDEF_UTIL_FIRME;
CREATE PUBLIC SYNONYM SYN_VDEF_UTIL_GRUP FOR CONTAFIN_ORACLE.VDEF_UTIL_GRUP;
CREATE PUBLIC SYNONYM SYN_VDEF_UTIL_OBIECTE FOR CONTAFIN_ORACLE.VDEF_UTIL_OBIECTE;
CREATE PUBLIC SYNONYM SYN_VDEF_UTIL_PROGRAME FOR CONTAFIN_ORACLE.VDEF_UTIL_PROGRAME;
CREATE PUBLIC SYNONYM SYN_VNOM_JUDETE FOR CONTAFIN_ORACLE.VNOM_JUDETE;
CREATE PUBLIC SYNONYM SYN_VNOM_LOCALITATI FOR CONTAFIN_ORACLE.VNOM_LOCALITATI;
CREATE PUBLIC SYNONYM SYN_VNOM_TARI FOR CONTAFIN_ORACLE.VNOM_TARI;
CREATE PUBLIC SYNONYM SYN_VNOM_UM_ISO FOR CONTAFIN_ORACLE.VNOM_UM_ISO;
CREATE PUBLIC SYNONYM SYN_VNOM_VALUTE_ISO FOR CONTAFIN_ORACLE.VNOM_VALUTE_ISO;
CREATE PUBLIC SYNONYM SYN_VUTILIZATORI FOR CONTAFIN_ORACLE.VUTILIZATORI;
CREATE PUBLIC SYNONYM SYN_V_NOM_FIRME FOR CONTAFIN_ORACLE.V_NOM_FIRME;
CREATE PUBLIC SYNONYM TABELAVALORITAGURI FOR CONTAFIN_ORACLE.TABELAVALORITAGURI;
CREATE PUBLIC SYNONYM TABINCHIDERETVA FOR CONTAFIN_ORACLE.TABINCHIDERETVA;
CREATE PUBLIC SYNONYM TABSTERS FOR CONTAFIN_ORACLE.TABSTERS;
CREATE PUBLIC SYNONYM UW_SEL_ROW FOR CONTAFIN_ORACLE.UW_SEL_ROW;
CREATE PUBLIC SYNONYM UW_SEL_TAB FOR CONTAFIN_ORACLE.UW_SEL_TAB;
CREATE PUBLIC SYNONYM VALOARETAG FOR CONTAFIN_ORACLE.VALOARETAG;
CREATE PUBLIC SYNONYM VANZARI_DETALII_TAB FOR CONTAFIN_ORACLE.VANZARI_DETALII_TAB;

View File

@@ -0,0 +1,42 @@
-- ============================================================
-- IMPORT MASTER - Recreare PDB Oracle XE 21c
-- Rulat ca SYS AS SYSDBA conectat la PDB-ul NOU
-- ============================================================
-- PREREQUISITE: PDB creat si deschis, fisierele .dmp in DMPDIR
-- ============================================================
SPOOL C:\DMPDIR\import_master.log
-- ============================================================
-- FAZA 1: Infrastructura (inainte de Data Pump)
-- ============================================================
PROMPT [1/13] Creating tablespaces...
@01_tablespaces.sql
PROMPT [2/13] Creating users...
@02_useri.sql
PROMPT [3/13] Creating directories...
@03_directories.sql
PROMPT [4/13] Creating SYS custom tables...
@04_sys_tables.sql
PROMPT [5/13] Creating context...
@08_context.sql
-- ============================================================
-- FAZA 2: Data Pump (din CMD, nu din SQLPlus!)
-- ============================================================
PROMPT
PROMPT ==============================================
PROMPT STOP! Ruleaza Data Pump din CMD:
PROMPT ==============================================
PROMPT impdp \"sys/PAROLA_SYS@XEPDB1 AS SYSDBA\" directory=DMPDIR dumpfile=schemas_export.dmp logfile=schemas_import.log remap_tablespace=USERS:ROA
PROMPT impdp \"sys/PAROLA_SYS@XEPDB1 AS SYSDBA\" directory=DMPDIR dumpfile=sys_tables.dmp logfile=sys_tables_import.log table_exists_action=APPEND
PROMPT ==============================================
PROMPT Dupa Data Pump, continua cu:
PROMPT @11_import_master_faza2.sql
PROMPT ==============================================
SPOOL OFF

View File

@@ -0,0 +1,74 @@
-- ============================================================
-- IMPORT MASTER FAZA 2 - Dupa Data Pump
-- Rulat ca SYS AS SYSDBA conectat la PDB-ul NOU
-- ============================================================
-- PREREQUISITE: Faza 1 + Data Pump terminate cu succes
-- ============================================================
SPOOL C:\DMPDIR\import_master_faza2.log
-- ============================================================
-- FAZA 3: Obiecte care depind de scheme (dupa Data Pump)
-- ============================================================
PROMPT [6/13] Creating SYS code objects (AUTH_PACK, procedures)...
@05_sys_code_objects.sql
PROMPT [7/13] Creating SYS views...
@06_sys_views.sql
PROMPT [8/13] Creating SYS triggers...
@07_sys_triggers.sql
PROMPT [9/13] Applying grants on SYS objects...
@09_granturi.sql
PROMPT [10/13] Creating public synonyms...
@10_sinonime_publice.sql
-- ============================================================
-- FAZA 4: Instalare UTL_MAIL (necesar pentru aplicatie)
-- ============================================================
PROMPT [11/13] Installing UTL_MAIL...
@?/rdbms/admin/utlmail.sql
@?/rdbms/admin/prvtmail.plb
GRANT EXECUTE ON SYS.UTL_MAIL TO CONTAFIN_ORACLE;
-- ============================================================
-- FAZA 5: Preventie - dezactiveaza auto tasks
-- ============================================================
PROMPT [12/13] Disabling auto tasks...
EXEC DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'sql tuning advisor', operation => NULL, window_name => NULL);
EXEC DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'auto space advisor', operation => NULL, window_name => NULL);
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 8*24*60, interval => 60);
EXEC DBMS_STATS.ALTER_STATS_HISTORY_RETENTION(7);
-- ============================================================
-- FAZA 6: Verificare
-- ============================================================
PROMPT [13/13] Verification...
PROMPT -- Spatiu alocat per tablespace:
SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024) AS allocated_mb
FROM dba_data_files GROUP BY tablespace_name ORDER BY allocated_mb DESC;
PROMPT -- Total alocat:
SELECT ROUND(SUM(bytes)/1024/1024) AS total_mb FROM dba_data_files;
PROMPT -- Auto tasks:
SELECT client_name, status FROM dba_autotask_client;
PROMPT -- Obiecte invalide:
SELECT owner, object_name, object_type
FROM dba_objects
WHERE status = 'INVALID'
AND owner IN ('SYS', 'CONTAFIN_ORACLE', 'FIRMA', 'ROMPETROLE')
ORDER BY owner, object_type, object_name;
SPOOL OFF
PROMPT
PROMPT =============================================
PROMPT IMPORT COMPLET!
PROMPT Verificati import_master_faza2.log
PROMPT Resetati parolele utilizatorilor daca e nevoie.
PROMPT =============================================

View File

@@ -0,0 +1,525 @@
-- ============================================================
-- CLEANUP & DISABLE AUDIT - Oracle XE 11g/12c/18c/21c
-- ============================================================
-- Compatibil cu: Oracle 11g XE, 12c, 18c XE, 21c XE
-- Compatibil cu: non-CDB si CDB/PDB
-- Scop: Curata audit trail din SYSAUX + dezactiveaza auditurile
-- + curata advisor objects + scheduler log
-- + resize UNDO si SYSAUX datafiles
-- Rulat ca: SYS AS SYSDBA
-- - non-CDB: sqlplus / as sysdba
-- - CDB/PDB: conectat la PDB (ALTER SESSION SET CONTAINER = XEPDB1)
-- ============================================================
--
-- IMPORTANT: Pe Oracle XE, audit-urile active umfla SYSAUX/AUDSYS
-- pana la limita de 12 GB si blocheaza baza cu ORA-12954.
-- Acest script:
-- 1. Detecteaza versiunea Oracle si tipul bazei (CDB/non-CDB)
-- 2. Dezactiveaza TOATE audit policies (unified + traditional)
-- 3. Curata audit trail-urile existente
-- 4. Configureaza auto-purge pentru siguranta
-- 5. Dezactiveaza auto tasks care umfla SYSAUX
-- 6. Curata SQL Advisor objects (WRI$_ADV_*) - pot ocupa GB
-- 7. Curata scheduler event log
-- 8. Resize UNDO si SYSAUX datafiles
-- 9. Verifica rezultatul
-- ============================================================
SET SERVEROUTPUT ON SIZE UNLIMITED
SET FEEDBACK OFF
SET VERIFY OFF
SPOOL cleanup_audit.log
DECLARE
v_version NUMBER;
v_full_ver VARCHAR2(100);
v_is_cdb VARCHAR2(3) := 'NO';
v_con_name VARCHAR2(128) := 'NON-CDB';
v_count NUMBER;
v_aud_size_mb NUMBER := 0;
v_sysaux_mb NUMBER := 0;
v_undo_file VARCHAR2(512);
v_undo_mb NUMBER;
v_sysaux_file VARCHAR2(512);
v_sysaux_df NUMBER;
v_hwm NUMBER;
-- Helper: executa SQL si ignora erori
PROCEDURE exec_ignore(p_sql VARCHAR2) IS
BEGIN
EXECUTE IMMEDIATE p_sql;
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(' [SKIP] ' || SUBSTR(SQLERRM, 1, 200));
END;
-- Helper: executa SQL cu output
PROCEDURE exec_log(p_sql VARCHAR2, p_desc VARCHAR2) IS
BEGIN
EXECUTE IMMEDIATE p_sql;
DBMS_OUTPUT.PUT_LINE(' [OK] ' || p_desc);
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(' [SKIP] ' || p_desc || ' - ' || SUBSTR(SQLERRM, 1, 150));
END;
BEGIN
-- =========================================================
-- DETECTIE VERSIUNE SI TIP BAZA
-- =========================================================
-- version_full exista doar pe 18c+, version exista pe toate
BEGIN
EXECUTE IMMEDIATE 'SELECT version_full FROM v$instance' INTO v_full_ver;
EXCEPTION WHEN OTHERS THEN
SELECT version INTO v_full_ver FROM v$instance;
END;
v_version := TO_NUMBER(SUBSTR(v_full_ver, 1, INSTR(v_full_ver, '.') - 1));
DBMS_OUTPUT.PUT_LINE('============================================================');
DBMS_OUTPUT.PUT_LINE(' CLEANUP AUDIT - Oracle ' || v_full_ver);
DBMS_OUTPUT.PUT_LINE('============================================================');
-- Detectie CDB (12c+)
IF v_version >= 12 THEN
BEGIN
EXECUTE IMMEDIATE 'SELECT CDB FROM V$DATABASE' INTO v_is_cdb;
EXCEPTION WHEN OTHERS THEN
v_is_cdb := 'NO';
END;
IF v_is_cdb = 'YES' THEN
EXECUTE IMMEDIATE 'SELECT SYS_CONTEXT(''USERENV'', ''CON_NAME'') FROM DUAL' INTO v_con_name;
END IF;
END IF;
DBMS_OUTPUT.PUT_LINE(' Versiune: ' || v_version || ' | CDB: ' || v_is_cdb || ' | Container: ' || v_con_name);
-- Warning daca suntem pe CDB$ROOT
IF v_con_name = 'CDB$ROOT' AND v_is_cdb = 'YES' THEN
DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE(' !!! ATENTIE: Esti conectat la CDB$ROOT !!!');
DBMS_OUTPUT.PUT_LINE(' !!! Ruleaza scriptul si pe fiecare PDB: !!!');
DBMS_OUTPUT.PUT_LINE(' !!! ALTER SESSION SET CONTAINER = XEPDB1; !!!');
DBMS_OUTPUT.PUT_LINE(' !!! @cleanup_audit.sql !!!');
DBMS_OUTPUT.PUT_LINE(' ');
END IF;
-- Spatiu SYSAUX inainte
SELECT ROUND(SUM(bytes)/1024/1024)
INTO v_sysaux_mb
FROM dba_segments
WHERE tablespace_name = 'SYSAUX';
DBMS_OUTPUT.PUT_LINE(' SYSAUX segmente inainte: ' || v_sysaux_mb || ' MB');
DBMS_OUTPUT.PUT_LINE('------------------------------------------------------------');
-- =========================================================
-- PASUL 1: DEZACTIVARE UNIFIED AUDIT POLICIES (12c+)
-- =========================================================
IF v_version >= 12 THEN
DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE('[PASUL 1] Dezactivare unified audit policies...');
-- Dezactiveaza toate politicile active
FOR rec IN (
SELECT DISTINCT policy_name
FROM audit_unified_enabled_policies
) LOOP
exec_log('NOAUDIT POLICY ' || rec.policy_name, 'NOAUDIT POLICY ' || rec.policy_name);
END LOOP;
-- Verifica
SELECT COUNT(*) INTO v_count FROM audit_unified_enabled_policies;
IF v_count = 0 THEN
DBMS_OUTPUT.PUT_LINE(' [OK] Toate politicile unified audit dezactivate');
ELSE
DBMS_OUTPUT.PUT_LINE(' [WARN] Inca ' || v_count || ' politici active!');
END IF;
ELSE
DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE('[PASUL 1] Oracle ' || v_version || ' - nu are unified audit, skip');
END IF;
-- =========================================================
-- PASUL 2: DEZACTIVARE TRADITIONAL AUDIT (11g-21c)
-- =========================================================
DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE('[PASUL 2] Dezactivare traditional audit...');
exec_log('NOAUDIT ALL', 'NOAUDIT ALL');
exec_log('NOAUDIT ALL PRIVILEGES', 'NOAUDIT ALL PRIVILEGES');
-- Dezactiveaza audituri per-user
FOR rec IN (
SELECT DISTINCT user_name
FROM dba_stmt_audit_opts
WHERE user_name IS NOT NULL
) LOOP
exec_log('NOAUDIT ALL BY ' || rec.user_name, 'NOAUDIT ALL BY ' || rec.user_name);
END LOOP;
-- Dezactiveaza audituri pe obiecte
FOR rec IN (
SELECT owner, object_name, object_type
FROM dba_obj_audit_opts
WHERE alt != '-/-' OR aud != '-/-' OR com != '-/-'
OR del != '-/-' OR gra != '-/-' OR ind != '-/-'
OR ins != '-/-' OR loc != '-/-' OR ren != '-/-'
OR sel != '-/-' OR upd != '-/-' OR exe != '-/-'
) LOOP
BEGIN
EXECUTE IMMEDIATE 'NOAUDIT ALL ON ' || rec.owner || '.' || rec.object_name;
DBMS_OUTPUT.PUT_LINE(' [OK] NOAUDIT ALL ON ' || rec.owner || '.' || rec.object_name);
EXCEPTION WHEN OTHERS THEN NULL;
END;
END LOOP;
-- =========================================================
-- PASUL 3: CLEANUP UNIFIED AUDIT TRAIL (12c+)
-- =========================================================
IF v_version >= 12 THEN
DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE('[PASUL 3] Cleanup unified audit trail...');
-- Dimensiune audit trail
BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM unified_audit_trail' INTO v_count;
DBMS_OUTPUT.PUT_LINE(' Inregistrari in unified_audit_trail: ' || v_count);
EXCEPTION WHEN OTHERS THEN
v_count := 0;
END;
IF v_count > 0 THEN
-- Seteaza timestamp de arhivare in trecut (permite stergerea tuturor)
BEGIN
DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
last_archive_time => SYSTIMESTAMP + INTERVAL '1' DAY
);
DBMS_OUTPUT.PUT_LINE(' [OK] Archive timestamp setat');
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(' [SKIP] Archive timestamp: ' || SUBSTR(SQLERRM, 1, 150));
END;
-- Curata trail-ul
BEGIN
DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
use_last_arch_timestamp => TRUE
);
DBMS_OUTPUT.PUT_LINE(' [OK] Unified audit trail curatat');
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(' [FAIL] Cleanup unified: ' || SUBSTR(SQLERRM, 1, 150));
DBMS_OUTPUT.PUT_LINE(' [INFO] Daca ORA-12954, curata mai intai SQL Tuning Sets (vezi Pasul 5)');
DBMS_OUTPUT.PUT_LINE(' [INFO] Apoi reruleaza acest script');
END;
-- Verifica cate au ramas
BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM unified_audit_trail' INTO v_count;
DBMS_OUTPUT.PUT_LINE(' Inregistrari ramase: ' || v_count);
EXCEPTION WHEN OTHERS THEN NULL;
END;
ELSE
DBMS_OUTPUT.PUT_LINE(' [OK] Unified audit trail gol, nimic de curatat');
END IF;
END IF;
-- =========================================================
-- PASUL 4: CLEANUP TRADITIONAL AUDIT TRAIL (AUD$)
-- =========================================================
DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE('[PASUL 4] Cleanup traditional audit trail (AUD$)...');
-- Dimensiune AUD$
BEGIN
SELECT COUNT(*) INTO v_count FROM sys.aud$;
DBMS_OUTPUT.PUT_LINE(' Inregistrari in AUD$: ' || v_count);
EXCEPTION WHEN OTHERS THEN
v_count := 0;
DBMS_OUTPUT.PUT_LINE(' [SKIP] AUD$ nu exista sau nu e accesibil');
END;
IF v_count > 0 THEN
-- Curata via DBMS_AUDIT_MGMT
BEGIN
DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
last_archive_time => SYSTIMESTAMP + INTERVAL '1' DAY
);
DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
use_last_arch_timestamp => TRUE
);
DBMS_OUTPUT.PUT_LINE(' [OK] AUD$ curatat via DBMS_AUDIT_MGMT');
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(' [SKIP] DBMS_AUDIT_MGMT: ' || SUBSTR(SQLERRM, 1, 150));
-- Fallback: TRUNCATE direct
BEGIN
EXECUTE IMMEDIATE 'TRUNCATE TABLE sys.aud$';
DBMS_OUTPUT.PUT_LINE(' [OK] AUD$ curatat via TRUNCATE');
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(' [FAIL] TRUNCATE AUD$: ' || SUBSTR(SQLERRM, 1, 150));
END;
END;
END IF;
-- Curata FGA_LOG$ (Fine-Grained Audit)
BEGIN
SELECT COUNT(*) INTO v_count FROM sys.fga_log$;
IF v_count > 0 THEN
DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD,
use_last_arch_timestamp => FALSE
);
DBMS_OUTPUT.PUT_LINE(' [OK] FGA_LOG$ curatat (' || v_count || ' inregistrari)');
END IF;
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(' [SKIP] FGA_LOG$: ' || SUBSTR(SQLERRM, 1, 150));
END;
-- =========================================================
-- PASUL 5: CLEANUP SQL TUNING SETS (SYSAUX - cel mai mare vinovat)
-- =========================================================
DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE('[PASUL 5] Cleanup SQL Tuning Sets din SYSAUX...');
-- Drop SQL Tuning Sets
FOR rec IN (SELECT name, owner FROM dba_sqlset) LOOP
BEGIN
DBMS_SQLTUNE.DROP_SQLSET(rec.name, rec.owner);
DBMS_OUTPUT.PUT_LINE(' [OK] Drop SQLSET: ' || rec.owner || '.' || rec.name);
EXCEPTION WHEN OTHERS THEN NULL;
END;
END LOOP;
-- TRUNCATE tabelele daca DROP nu a eliberat spatiul
exec_log('TRUNCATE TABLE sys.wri$_sqlset_plan_lines', 'TRUNCATE wri$_sqlset_plan_lines');
exec_log('TRUNCATE TABLE sys.wri$_sqlset_plans', 'TRUNCATE wri$_sqlset_plans');
exec_log('TRUNCATE TABLE sys.wri$_sqlset_statistics', 'TRUNCATE wri$_sqlset_statistics');
exec_log('TRUNCATE TABLE sys.wri$_sqlset_statements', 'TRUNCATE wri$_sqlset_statements');
exec_log('TRUNCATE TABLE sys.wri$_sqlset_references', 'TRUNCATE wri$_sqlset_references');
exec_log('TRUNCATE TABLE sys.wri$_sqlset_definitions', 'TRUNCATE wri$_sqlset_definitions');
-- Cleanup stats + recyclebin
exec_log('BEGIN DBMS_STATS.PURGE_STATS(SYSDATE - 7); END;', 'Purge stats older than 7 days');
exec_log('PURGE DBA_RECYCLEBIN', 'Purge recyclebin');
-- =========================================================
-- PASUL 5b: CLEANUP SQL ADVISOR OBJECTS (WRI$_ADV_*)
-- =========================================================
-- WRI$_ADV_OBJECTS poate acumula milioane de randuri (GB)
-- Sunt doar recomandari de tuning, nu date de productie
DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE('[PASUL 5b] Cleanup SQL Advisor objects...');
-- Truncate in ordinea corecta (foreign keys)
exec_log('TRUNCATE TABLE sys.wri$_adv_actions', 'TRUNCATE wri$_adv_actions');
exec_log('TRUNCATE TABLE sys.wri$_adv_findings', 'TRUNCATE wri$_adv_findings');
exec_log('TRUNCATE TABLE sys.wri$_adv_recommendations', 'TRUNCATE wri$_adv_recommendations');
exec_log('TRUNCATE TABLE sys.wri$_adv_rationale', 'TRUNCATE wri$_adv_rationale');
exec_log('TRUNCATE TABLE sys.wri$_adv_journal', 'TRUNCATE wri$_adv_journal');
exec_log('TRUNCATE TABLE sys.wri$_adv_objects', 'TRUNCATE wri$_adv_objects');
-- =========================================================
-- PASUL 5c: CLEANUP SCHEDULER EVENT LOG
-- =========================================================
DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE('[PASUL 5c] Cleanup scheduler event log...');
exec_log('TRUNCATE TABLE sys.scheduler$_event_log', 'TRUNCATE scheduler$_event_log');
-- =========================================================
-- PASUL 6: DEZACTIVARE AUTO TASKS
-- =========================================================
DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE('[PASUL 6] Dezactivare auto tasks...');
BEGIN
DBMS_AUTO_TASK_ADMIN.DISABLE(
client_name => 'sql tuning advisor',
operation => NULL,
window_name => NULL
);
DBMS_OUTPUT.PUT_LINE(' [OK] sql tuning advisor DISABLED');
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(' [SKIP] sql tuning advisor: ' || SUBSTR(SQLERRM, 1, 150));
END;
BEGIN
DBMS_AUTO_TASK_ADMIN.DISABLE(
client_name => 'auto space advisor',
operation => NULL,
window_name => NULL
);
DBMS_OUTPUT.PUT_LINE(' [OK] auto space advisor DISABLED');
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(' [SKIP] auto space advisor: ' || SUBSTR(SQLERRM, 1, 150));
END;
-- =========================================================
-- PASUL 7: AWR RETENTION + STATS RETENTION
-- =========================================================
DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE('[PASUL 7] Configurare AWR retention...');
-- Incearca 8 zile (min moving window baseline)
BEGIN
DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
retention => 8 * 24 * 60,
interval => 60
);
DBMS_OUTPUT.PUT_LINE(' [OK] AWR retention = 8 zile, interval = 60 min');
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(' [SKIP] AWR: ' || SUBSTR(SQLERRM, 1, 150));
END;
BEGIN
DBMS_STATS.ALTER_STATS_HISTORY_RETENTION(7);
DBMS_OUTPUT.PUT_LINE(' [OK] Stats history retention = 7 zile');
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(' [SKIP] Stats retention: ' || SUBSTR(SQLERRM, 1, 150));
END;
-- =========================================================
-- PASUL 8: GRANT DBMS_LOCK (necesar pt PACK_UTILS_FILE)
-- =========================================================
IF v_version >= 12 THEN
DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE('[PASUL 8] Grant DBMS_LOCK...');
exec_log('GRANT EXECUTE ON SYS.DBMS_LOCK TO CONTAFIN_ORACLE', 'GRANT DBMS_LOCK TO CONTAFIN_ORACLE');
END IF;
-- =========================================================
-- PASUL 9: RESIZE UNDO DATAFILE
-- =========================================================
-- UNDO poate creste foarte mult dupa import-uri bulk
-- undo_retention=900 (15 min) e suficient pentru XE
DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE('[PASUL 9] Resize UNDO datafile...');
exec_log('ALTER SYSTEM SET undo_retention = 900', 'undo_retention = 900');
BEGIN
SELECT file_name, ROUND(bytes/1024/1024)
INTO v_undo_file, v_undo_mb
FROM dba_data_files
WHERE tablespace_name = 'UNDOTBS1'
AND ROWNUM = 1;
DBMS_OUTPUT.PUT_LINE(' UNDO datafile: ' || v_undo_file || ' (' || v_undo_mb || ' MB)');
IF v_undo_mb > 2048 THEN
-- Incearca resize la 2 GB, apoi 4 GB, apoi 6 GB
BEGIN
EXECUTE IMMEDIATE 'ALTER DATABASE DATAFILE ''' || v_undo_file || ''' RESIZE 2G';
DBMS_OUTPUT.PUT_LINE(' [OK] UNDO resize la 2 GB');
EXCEPTION WHEN OTHERS THEN
BEGIN
EXECUTE IMMEDIATE 'ALTER DATABASE DATAFILE ''' || v_undo_file || ''' RESIZE 4G';
DBMS_OUTPUT.PUT_LINE(' [OK] UNDO resize la 4 GB');
EXCEPTION WHEN OTHERS THEN
BEGIN
EXECUTE IMMEDIATE 'ALTER DATABASE DATAFILE ''' || v_undo_file || ''' RESIZE 6G';
DBMS_OUTPUT.PUT_LINE(' [OK] UNDO resize la 6 GB');
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(' [SKIP] UNDO resize: ' || SUBSTR(SQLERRM, 1, 150));
END;
END;
END;
ELSE
DBMS_OUTPUT.PUT_LINE(' [OK] UNDO deja <= 2 GB, skip resize');
END IF;
END;
-- =========================================================
-- PASUL 10: RESIZE SYSAUX DATAFILE
-- =========================================================
DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE('[PASUL 10] Resize SYSAUX datafile...');
BEGIN
SELECT file_name, ROUND(bytes/1024/1024)
INTO v_sysaux_file, v_sysaux_df
FROM dba_data_files
WHERE tablespace_name = 'SYSAUX'
AND ROWNUM = 1;
-- Calculeaza high water mark
SELECT CEIL(MAX(block_id + blocks) * 8192 / 1024 / 1024)
INTO v_hwm
FROM dba_extents
WHERE tablespace_name = 'SYSAUX';
DBMS_OUTPUT.PUT_LINE(' SYSAUX datafile: ' || v_sysaux_file || ' (' || v_sysaux_df || ' MB)');
DBMS_OUTPUT.PUT_LINE(' SYSAUX HWM: ' || v_hwm || ' MB');
-- Resize doar daca putem recupera cel putin 500 MB
IF v_sysaux_df - v_hwm > 500 THEN
BEGIN
EXECUTE IMMEDIATE 'ALTER DATABASE DATAFILE ''' || v_sysaux_file
|| ''' RESIZE ' || (v_hwm + 100) || 'M';
DBMS_OUTPUT.PUT_LINE(' [OK] SYSAUX resize la ' || (v_hwm + 100) || ' MB');
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(' [SKIP] SYSAUX resize: ' || SUBSTR(SQLERRM, 1, 150));
DBMS_OUTPUT.PUT_LINE(' [INFO] HWM prea aproape de dim. curenta, spatiul se va reutiliza');
END;
ELSE
DBMS_OUTPUT.PUT_LINE(' [SKIP] Diferenta < 500 MB, nu merita resize');
DBMS_OUTPUT.PUT_LINE(' [INFO] Spatiul liber din SYSAUX se va reutiliza automat');
END IF;
END;
-- =========================================================
-- VERIFICARE FINALA
-- =========================================================
DBMS_OUTPUT.PUT_LINE(' ');
DBMS_OUTPUT.PUT_LINE('============================================================');
DBMS_OUTPUT.PUT_LINE(' VERIFICARE FINALA');
DBMS_OUTPUT.PUT_LINE('============================================================');
-- SYSAUX dupa
SELECT ROUND(SUM(bytes)/1024/1024)
INTO v_sysaux_mb
FROM dba_segments
WHERE tablespace_name = 'SYSAUX';
DBMS_OUTPUT.PUT_LINE(' SYSAUX segmente dupa: ' || v_sysaux_mb || ' MB');
-- Audit policies (12c+)
IF v_version >= 12 THEN
SELECT COUNT(*) INTO v_count FROM audit_unified_enabled_policies;
IF v_count = 0 THEN
DBMS_OUTPUT.PUT_LINE(' Unified audit policies: NONE (OK)');
ELSE
DBMS_OUTPUT.PUT_LINE(' Unified audit policies: ' || v_count || ' ACTIVE (WARN!)');
END IF;
END IF;
-- Traditional audit
BEGIN
SELECT COUNT(*) INTO v_count FROM dba_stmt_audit_opts;
DBMS_OUTPUT.PUT_LINE(' Traditional audit opts: ' || v_count);
EXCEPTION WHEN OTHERS THEN NULL;
END;
-- Auto tasks
DBMS_OUTPUT.PUT_LINE(' Auto tasks:');
FOR rec IN (SELECT client_name, status FROM dba_autotask_client) LOOP
DBMS_OUTPUT.PUT_LINE(' ' || RPAD(rec.client_name, 45) || rec.status);
END LOOP;
-- Total alocat
BEGIN
SELECT ROUND(SUM(bytes)/1024/1024) INTO v_sysaux_mb FROM dba_data_files;
DBMS_OUTPUT.PUT_LINE(' Total datafiles: ' || v_sysaux_mb || ' MB / 12288 MB (XE limit)');
EXCEPTION WHEN OTHERS THEN NULL;
END;
DBMS_OUTPUT.PUT_LINE('============================================================');
DBMS_OUTPUT.PUT_LINE(' CLEANUP COMPLET!');
DBMS_OUTPUT.PUT_LINE('============================================================');
END;
/
SPOOL OFF

View File

@@ -0,0 +1,236 @@
-- ============================================================
-- EXPORT COMPLET PDB XEPDB1 - Oracle XE 21c
-- Scop: backup inainte de recreare PDB pentru recuperare spatiu
-- Rulat ca SYS AS SYSDBA conectat la PDB (XEPDB1)
-- ============================================================
-- NOTA: Inainte de rulare, asigura-te ca directorul C:\DMPDIR exista
-- si ca DMPDIR e definit: CREATE OR REPLACE DIRECTORY DMPDIR AS 'C:\DMPDIR';
-- ============================================================
SET ECHO ON
SET FEEDBACK ON
SET LONG 100000
SET LONGCHUNKSIZE 100000
SET PAGESIZE 0
SET LINESIZE 300
SET TRIMSPOOL ON
SET HEADING OFF
SET VERIFY OFF
SET SERVEROUTPUT ON SIZE UNLIMITED
-- ============================================================
-- PASUL 1: Export scheme cu Data Pump (ruleaza separat din CMD)
-- ============================================================
-- expdp \"sys/parola@XEPDB1 AS SYSDBA\" schemas=CONTAFIN_ORACLE,FIRMA directory=DMPDIR dumpfile=schemas_export.dmp logfile=schemas_export.log
-- expdp \"sys/parola@XEPDB1 AS SYSDBA\" tables=SYS.AUTH_SERII,SYS.AUTH_DETALII,SYS.INFO directory=DMPDIR dumpfile=sys_tables.dmp logfile=sys_tables_export.log
-- ============================================================
-- PASUL 2: Export sinonime publice
-- ============================================================
SPOOL C:\DMPDIR\02_sinonime_publice.sql
SELECT 'CREATE PUBLIC SYNONYM ' || synonym_name || ' FOR ' ||
table_owner || '.' || table_name || ';'
FROM dba_synonyms
WHERE owner = 'PUBLIC'
AND table_owner IN ('CONTAFIN_ORACLE', 'FIRMA')
ORDER BY synonym_name;
SPOOL OFF
-- ============================================================
-- PASUL 3: Export grant-uri
-- ============================================================
SPOOL C:\DMPDIR\03_granturi.sql
-- 3a. Grant-uri pe obiecte SYS catre schemele aplicatiei
SELECT 'GRANT ' || privilege || ' ON ' || owner || '.' || table_name ||
' TO ' || grantee || ';'
FROM dba_tab_privs
WHERE (grantee IN ('CONTAFIN_ORACLE', 'FIRMA')
AND owner = 'SYS')
ORDER BY grantee, table_name;
-- 3b. Grant-uri de la schemele aplicatiei catre PUBLIC
SELECT 'GRANT ' || privilege || ' ON ' || owner || '.' || table_name ||
' TO ' || grantee || ';'
FROM dba_tab_privs
WHERE grantor IN ('CONTAFIN_ORACLE', 'FIRMA')
ORDER BY grantee, owner, table_name;
-- 3c. System privileges
SELECT 'GRANT ' || privilege || ' TO ' || grantee || ';'
FROM dba_sys_privs
WHERE grantee IN ('CONTAFIN_ORACLE', 'FIRMA')
ORDER BY grantee, privilege;
-- 3d. Role privileges
SELECT 'GRANT ' || granted_role || ' TO ' || grantee || ';'
FROM dba_role_privs
WHERE grantee IN ('CONTAFIN_ORACLE', 'FIRMA')
ORDER BY grantee, granted_role;
SPOOL OFF
-- ============================================================
-- PASUL 4: Export DIRECTORY-uri custom
-- ============================================================
SPOOL C:\DMPDIR\04_directories.sql
SELECT 'CREATE OR REPLACE DIRECTORY ' || directory_name ||
' AS ''' || directory_path || ''';'
FROM dba_directories
WHERE origin_con_id != 1
ORDER BY directory_name;
SPOOL OFF
-- ============================================================
-- PASUL 5: Export proceduri, functii, pachete SYS custom
-- ============================================================
SPOOL C:\DMPDIR\05_sys_code_objects.sql
-- Packages (include si body automat)
PROMPT -- PACKAGES
SELECT DBMS_METADATA.GET_DDL('PACKAGE', object_name, 'SYS')
FROM dba_objects
WHERE owner = 'SYS' AND oracle_maintained = 'N'
AND object_type = 'PACKAGE'
AND object_name NOT LIKE 'KUPC%'
AND object_name NOT LIKE 'AQ$%';
SELECT '/' FROM dual;
-- Proceduri
PROMPT -- PROCEDURES
SELECT DBMS_METADATA.GET_DDL('PROCEDURE', object_name, 'SYS')
FROM dba_objects
WHERE owner = 'SYS' AND oracle_maintained = 'N'
AND object_type = 'PROCEDURE'
AND object_name NOT LIKE 'KUPC%'
AND object_name NOT LIKE 'AQ$%';
SELECT '/' FROM dual;
-- Functii
PROMPT -- FUNCTIONS
SELECT DBMS_METADATA.GET_DDL('FUNCTION', object_name, 'SYS')
FROM dba_objects
WHERE owner = 'SYS' AND oracle_maintained = 'N'
AND object_type = 'FUNCTION'
AND object_name NOT LIKE 'KUPC%'
AND object_name NOT LIKE 'AQ$%';
SELECT '/' FROM dual;
SPOOL OFF
-- ============================================================
-- PASUL 6: Export tabele custom SYS (structura)
-- ============================================================
SPOOL C:\DMPDIR\06_sys_tables.sql
SELECT DBMS_METADATA.GET_DDL('TABLE', object_name, 'SYS')
FROM dba_objects
WHERE owner = 'SYS' AND oracle_maintained = 'N'
AND object_type = 'TABLE'
AND object_name IN ('AUTH_SERII', 'AUTH_DETALII', 'INFO');
SELECT '/' FROM dual;
-- Sequence
SELECT DBMS_METADATA.GET_DDL('SEQUENCE', 'SEQ_AUTH_SERII', 'SYS') FROM dual;
SELECT '/' FROM dual;
-- Index custom
SELECT DBMS_METADATA.GET_DDL('INDEX', 'PK_AUTH_SERII', 'SYS') FROM dual;
SELECT '/' FROM dual;
SPOOL OFF
-- ============================================================
-- PASUL 7: Export VIEW-uri custom SYS
-- ============================================================
SPOOL C:\DMPDIR\07_sys_views.sql
SELECT DBMS_METADATA.GET_DDL('VIEW', 'VAUTH_SERII', 'SYS') FROM dual;
SELECT '/' FROM dual;
SPOOL OFF
-- ============================================================
-- PASUL 8: Export TRIGGER-uri custom SYS
-- ============================================================
SPOOL C:\DMPDIR\08_sys_triggers.sql
SELECT DBMS_METADATA.GET_DDL('TRIGGER', 'LOGON_AUDIT_TRIGGER', 'SYS') FROM dual;
SELECT '/' FROM dual;
SPOOL OFF
-- ============================================================
-- PASUL 9: Export CONTEXT
-- ============================================================
SPOOL C:\DMPDIR\09_context.sql
SELECT DBMS_METADATA.GET_DDL('CONTEXT', 'SESIUNE') FROM dual;
SELECT '/' FROM dual;
SPOOL OFF
-- ============================================================
-- PASUL 10: Export useri si profile
-- ============================================================
SPOOL C:\DMPDIR\10_useri.sql
SELECT DBMS_METADATA.GET_DDL('USER', username)
FROM dba_users
WHERE oracle_maintained = 'N'
AND username NOT IN ('PDBADMIN')
ORDER BY username;
SELECT '/' FROM dual;
SPOOL OFF
-- ============================================================
-- PASUL 11: Export tablespace-uri custom
-- ============================================================
SPOOL C:\DMPDIR\11_tablespaces.sql
SELECT 'CREATE TABLESPACE ' || tablespace_name ||
' DATAFILE SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE 4G;'
FROM dba_tablespaces
WHERE tablespace_name NOT IN ('SYSTEM', 'SYSAUX', 'UNDOTBS1', 'TEMP', 'USERS')
AND contents = 'PERMANENT';
SPOOL OFF
-- ============================================================
-- REZUMAT FISIERE GENERATE
-- ============================================================
PROMPT
PROMPT =============================================
PROMPT EXPORT COMPLET - FISIERE GENERATE
PROMPT =============================================
PROMPT C:\DMPDIR\02_sinonime_publice.sql
PROMPT C:\DMPDIR\03_granturi.sql
PROMPT C:\DMPDIR\04_directories.sql
PROMPT C:\DMPDIR\05_sys_code_objects.sql
PROMPT C:\DMPDIR\06_sys_tables.sql
PROMPT C:\DMPDIR\07_sys_views.sql
PROMPT C:\DMPDIR\08_sys_triggers.sql
PROMPT C:\DMPDIR\09_context.sql
PROMPT C:\DMPDIR\10_useri.sql
PROMPT C:\DMPDIR\11_tablespaces.sql
PROMPT =============================================
PROMPT
PROMPT NU UITA sa rulezi si Data Pump SEPARAT:
PROMPT expdp \"sys/parola@XEPDB1 AS SYSDBA\" schemas=CONTAFIN_ORACLE,FIRMA directory=DMPDIR dumpfile=schemas_export.dmp logfile=schemas_export.log
PROMPT expdp \"sys/parola@XEPDB1 AS SYSDBA\" tables=SYS.AUTH_SERII,SYS.AUTH_DETALII,SYS.INFO directory=DMPDIR dumpfile=sys_tables.dmp logfile=sys_tables_export.log
PROMPT =============================================

View File

@@ -0,0 +1,134 @@
-- ============================================================
-- RECREARE PDB XEPDB1 - Oracle XE 21c
-- Scop: PDB curat cu SYSAUX mic (~500 MB vs 7.8 GB)
-- ============================================================
--
-- IMPORTANT: Inlocuieste PAROLA_SYS cu parola reala a user-ului SYS.
-- Daca nu stii parola, seteaz-o INAINTE de export:
-- sqlplus / as sysdba
-- ALTER USER SYS IDENTIFIED BY "ParolaNoua123";
-- Apoi foloseste "ParolaNoua123" peste tot unde apare PAROLA_SYS.
--
-- PREREQUISITE: Exporturile trebuie sa fi fost rulate cu succes!
-- 1. expdp (Data Pump) - din CMD
-- 2. export_pdb_complet.sql - din SQLPlus
-- 3. Fisierele .dmp si .sql trebuie sa fie in C:\DMPDIR
--
-- TIMP ESTIMAT: ~30-45 minute (depinde de dimensiunea dump-urilor)
-- ============================================================
-- ************************************************************
-- PASUL 0: EXPORT (daca nu s-a facut deja)
-- ************************************************************
-- Conecteaza-te la PDB-ul VECHI si ruleaza exporturile:
--
-- A) Data Pump (din CMD, nu SQLPlus):
-- expdp \"sys/PAROLA_SYS@XEPDB1 AS SYSDBA\" schemas=CONTAFIN_ORACLE,FIRMA directory=DMPDIR dumpfile=schemas_export.dmp logfile=schemas_export.log
-- expdp \"sys/PAROLA_SYS@XEPDB1 AS SYSDBA\" tables=SYS.AUTH_SERII,SYS.AUTH_DETALII,SYS.INFO directory=DMPDIR dumpfile=sys_tables.dmp logfile=sys_tables_export.log
--
-- B) SQL export (din SQLPlus conectat la XEPDB1):
-- sqlplus sys/PAROLA_SYS@XEPDB1 AS SYSDBA
-- @C:\DMPDIR\import\export_pdb_complet.sql
--
-- VERIFICA: schemas_export.dmp si sys_tables.dmp exista in C:\DMPDIR
-- si log-urile nu contin erori fatale.
-- ************************************************************
-- ============================================================
-- PASUL 1: Drop PDB vechi
-- ============================================================
-- Conectare: sqlplus / as sysdba (conecteaza la CDB$ROOT)
-- SAU: sqlplus sys/PAROLA_SYS AS SYSDBA
ALTER SESSION SET CONTAINER = CDB$ROOT;
ALTER PLUGGABLE DATABASE XEPDB1 CLOSE IMMEDIATE;
DROP PLUGGABLE DATABASE XEPDB1 INCLUDING DATAFILES;
-- ============================================================
-- PASUL 2: Recreare PDB din seed
-- ============================================================
CREATE PLUGGABLE DATABASE XEPDB1 ADMIN USER PDBADMIN IDENTIFIED BY "RomfastRP2023"
FILE_NAME_CONVERT = ('pdbseed', 'XEPDB1');
ALTER PLUGGABLE DATABASE XEPDB1 OPEN;
ALTER PLUGGABLE DATABASE XEPDB1 SAVE STATE;
-- ============================================================
-- PASUL 3: Conectare la PDB-ul nou + creare DMPDIR
-- ============================================================
ALTER SESSION SET CONTAINER = XEPDB1;
CREATE OR REPLACE DIRECTORY DMPDIR AS 'C:\DMPDIR';
GRANT READ, WRITE ON DIRECTORY DMPDIR TO SYS;
-- ============================================================
-- PASUL 4: FAZA 1 - Infrastructura (inainte de Data Pump)
-- ============================================================
-- Ruleaza import master-ul care creeaza:
-- tablespaces -> useri -> directories -> tabele SYS -> context
@C:\DMPDIR\import\11_import_master.sql
-- ============================================================
-- PASUL 5: DATA PUMP IMPORT (din CMD, NU din SQLPlus!)
-- ============================================================
-- Deschide CMD nou si ruleaza:
--
-- impdp \"sys/PAROLA_SYS@XEPDB1 AS SYSDBA\" directory=DMPDIR dumpfile=schemas_export.dmp logfile=schemas_import.log remap_tablespace=USERS:ROA
-- impdp \"sys/PAROLA_SYS@XEPDB1 AS SYSDBA\" directory=DMPDIR dumpfile=sys_tables.dmp logfile=sys_tables_import.log table_exists_action=APPEND
--
-- ASTEAPTA sa termine AMBELE importuri inainte de pasul 6!
-- Verifica log-urile: schemas_import.log si sys_tables_import.log
-- ============================================================
-- ============================================================
-- PASUL 6: FAZA 2 - Obiecte dependente (dupa Data Pump)
-- ============================================================
-- Conecteaza-te inapoi la PDB:
-- sqlplus sys/PAROLA_SYS@XEPDB1 AS SYSDBA
-- SAU daca esti deja conectat la CDB$ROOT:
-- ALTER SESSION SET CONTAINER = XEPDB1;
@C:\DMPDIR\import\11_import_master_faza2.sql
-- ============================================================
-- PASUL 7: Compilare obiecte invalide
-- ============================================================
EXEC DBMS_UTILITY.COMPILE_SCHEMA('CONTAFIN_ORACLE');
EXEC DBMS_UTILITY.COMPILE_SCHEMA('FIRMA');
EXEC DBMS_UTILITY.COMPILE_SCHEMA('SYS', FALSE);
-- ============================================================
-- PASUL 8: Verificare finala
-- ============================================================
PROMPT
PROMPT =============================================
PROMPT VERIFICARE SPATIU
PROMPT =============================================
SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024) AS allocated_mb
FROM dba_data_files GROUP BY tablespace_name ORDER BY allocated_mb DESC;
SELECT ROUND(SUM(bytes)/1024/1024) AS total_mb FROM dba_data_files;
PROMPT
PROMPT =============================================
PROMPT OBIECTE INVALIDE (ar trebui sa fie 0)
PROMPT =============================================
SELECT owner, object_name, object_type, status
FROM dba_objects
WHERE status = 'INVALID'
AND owner IN ('SYS', 'CONTAFIN_ORACLE', 'FIRMA', 'ROMPETROLE')
ORDER BY owner, object_type, object_name;
PROMPT
PROMPT =============================================
PROMPT AUTO TASKS (ar trebui DISABLED)
PROMPT =============================================
SELECT client_name, status FROM dba_autotask_client;
PROMPT
PROMPT =============================================
PROMPT RECREARE PDB COMPLETA!
PROMPT Total alocat ar trebui sa fie ~2-3 GB
PROMPT (vs 11.5 GB inainte de recreare)
PROMPT =============================================

View File

@@ -106,6 +106,30 @@ ssh root@10.0.20.201 "upsc nutdev1"
---
### LXC 106 - Gitea (Git Server)
**Director:** `lxc106-gitea/`
**IP:** 10.0.20.165 | **Host:** pvemini
| Fișier | Descriere |
|--------|-----------|
| `README.md` | Configurare, operații frecvente, modificare app.ini, troubleshooting |
**Quick Start:**
```bash
# Status
ssh root@10.0.20.201 "pct exec 106 -- docker ps"
# Restart după modificare config
ssh root@10.0.20.201 "pct exec 106 -- docker restart gitea"
# Logs
ssh root@10.0.20.201 "pct exec 106 -- docker logs gitea --tail 50"
```
**URL:** https://gitea.romfast.ro
---
### LXC 103 - Dokploy + Traefik (Deployment Platform)
**Director:** `lxc103-dokploy/`
**IP:** 10.0.20.167 | **Host:** pvemini
@@ -308,7 +332,7 @@ echo | openssl s_client -connect roa.romfast.ro:443 -servername roa.romfast.ro 2
| 100 | portainer | 10.0.20.170 | Docker Management (Remote Node) | `cluster/README.md` |
| **103** | **dokploy** | **10.0.20.167** | **Dokploy + Traefik (App Deployment)** | **`lxc103-dokploy/`** |
| **104** | **flowise** | **10.0.20.161** | **Flowise AI (Chatbot Maria)** | **`lxc104-flowise/`** |
| 106 | gitea | 10.0.20.165 | Git Server | `cluster/README.md` |
| **106** | **gitea** | **10.0.20.165** | **Git Server** | **`lxc106-gitea/`** |
| **108** | **central-oracle** | **10.0.20.121** | **Oracle XE 21c** | **`lxc108-oracle/`** |
| **110** | **moltbot** | **10.0.20.173** | **MoltBot AI (Telegram+WhatsApp)** | **`lxc110-moltbot/`** |
| **171** | **claude-agent** | **10.0.20.171** | **Claude Code Dev Environment** | **`lxc171-claude-agent/`** |

View File

@@ -22,6 +22,7 @@ Internet → 188.26.14.103 → VM 201 IIS (SSL termination)
LXC 103 :443 (Traefik)
├── dokploy.romfast.ro → Dokploy UI :3000
├── roa-qr.romfast.ro → pdf-qr-app container
├── space.roa.romfast.ro → space-booking container
├── app1.roa.romfast.ro → app1 container
└── app2.roa.romfast.ro → app2 container
```
@@ -54,6 +55,7 @@ conectat doar la UN singur Traefik — LXC 103.
|---------|-----------|
| `dokploy.romfast.ro` | Dokploy UI (port 3000) |
| `roa-qr.romfast.ro` | pdf-qr-app container |
| `space.roa.romfast.ro` | space-booking container |
| `*.roa.romfast.ro` | Orice app deployată prin Dokploy |
---
@@ -226,6 +228,8 @@ systemctl restart dokploy-dnsrr-fix
- **Setup IIS VM 201:** `../vm201-windows/scripts/setup-new-iis-sites.ps1`
- **Web.config IIS proxy:** `../vm201-windows/iis-configs/`
- **LXC 100 (Remote Node):** `../lxc100-portainer/README.md` *(de creat)*
- **space-booking deploy guide:** `docs/space-booking-app.md`
- **pdf-qr-app deploy guide:** `docs/pdf-qr-app.md`
---

View File

@@ -0,0 +1,201 @@
# space-booking — Deploy pe Dokploy LXC 103
## Descriere
Aplicație de rezervare spații (săli de conferință, birouri), cu backend FastAPI și
frontend Vue.js. Deployată pe Dokploy/LXC 103 ca serviciu Docker Compose.
- **Domeniu:** `space.roa.romfast.ro`
- **Server:** LXC 103 (10.0.20.167)
- **Deployment:** Dokploy → Docker Compose
- **Repo:** `git@gitea.romfast.ro:romfast/space-booking.git`
### Arhitectură
```
Browser → VM 201 IIS (SSL) → LXC 103 Traefik → frontend (nginx:80)
backend (FastAPI:8000)
SQLite /data/space_booking.db
```
Servicii Docker Compose:
- `frontend` — Vue.js servit de nginx, expus prin Traefik
- `backend` — FastAPI pe port 8000, intern (fără expunere directă)
---
## Deploy în Dokploy UI
### 1. Creare Service
1. Deschide https://dokploy.romfast.ro
2. **Services****Create Service****Docker Compose**
3. Name: `space-booking`
4. Server: **LXC 103 (local)**
### 2. Configurare Git Source
- Provider: **Gitea** (sau Custom Git)
- URL: `http://gitea.romfast.ro/romfast/space-booking.git`
- Branch: `master`
### 3. Domain Configuration
În Dokploy, secțiunea **Domains**:
- Domain: `space.roa.romfast.ro`
- HTTPS: enabled
- Certificate: managed by Traefik
### 4. Variabile de Mediu (Environment)
Setează în Dokploy → **Environment** tab:
| Variabilă | Obligatoriu | Valoare exemplu | Descriere |
|-----------|-------------|-----------------|-----------|
| `SECRET_KEY` | **DA** | `<token hex 32>` | JWT signing key |
| `FRONTEND_URL` | **DA** | `https://space.roa.romfast.ro` | URL frontend pentru CORS/redirect |
| `SMTP_ENABLED` | Nu | `true` | Activează trimitere email |
| `SMTP_HOST` | Nu* | `smtp.example.com` | Server SMTP |
| `SMTP_PORT` | Nu* | `587` | Port SMTP |
| `SMTP_USER` | Nu* | `user@example.com` | User autentificare SMTP |
| `SMTP_PASSWORD` | Nu* | `parola` | Parolă SMTP |
| `SMTP_FROM_ADDRESS` | Nu* | `rezervari@romfast.ro` | Adresă expeditor |
> *Necesare doar dacă `SMTP_ENABLED=true`
**Generare SECRET_KEY:**
```bash
python -c "import secrets; print(secrets.token_hex(32))"
```
### 5. Deploy
Click **Deploy** → monitorizează logs în Dokploy UI.
---
## Conturi Demo Create Automat
La primul deploy, `entrypoint.sh` rulează automat `seed_db.py` (idempotent).
| Email | Parolă | Rol |
|-------|--------|-----|
| `admin@example.com` | `adminpassword` | Superadmin |
| `manager@example.com` | `managerpassword` | Manager |
| `user@example.com` | `userpassword` | User |
> **Atenție:** Schimbă parolele în producție după primul login!
Date demo create: 2 proprietăți ("Clădirea Centrală", "Biroul Privat"), 3 spații, 2 organizații.
---
## Verificare Post-Deploy
```bash
# Health check backend (prin Traefik)
curl -s https://space.roa.romfast.ro/health
# Răspuns așteptat: {"status": "ok"}
# Health check direct (din LAN)
curl -s http://10.0.20.167/health -H "Host: space.roa.romfast.ro"
# Verificare logs backend (seed automat)
# În Dokploy UI → space-booking → Logs → backend
# Trebuie să apară:
# [entrypoint] Running database seed...
# Database already seeded. Skipping... ← la redeploy-uri ulterioare
# [entrypoint] Starting application...
# Test autentificare
curl -s -X POST https://space.roa.romfast.ro/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"admin@example.com","password":"adminpassword"}' | jq .
```
---
## Configurare SMTP
### Cu SMTP (email de confirmare rezervare)
În Dokploy → Environment, setează:
```
SMTP_ENABLED=true
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USER=user@example.com
SMTP_PASSWORD=parola_smtp
SMTP_FROM_ADDRESS=rezervari@romfast.ro
```
Redeploy → verificare logs pentru mesaje email la rezervare.
### Fără SMTP (implicit)
Aplicația funcționează normal fără SMTP. Rezervările se fac, dar nu se trimit emailuri de confirmare. Setare implicită: `SMTP_ENABLED=false`.
---
## DNS
```
space.roa.romfast.ro A 188.26.14.103
```
Domeniu sub `*.roa.romfast.ro` → wildcard DNS acoperă automat.
---
## SSL Certificate (Win-ACME pe VM 201)
Dacă wildcardul `*.roa.romfast.ro` e deja configurat, SSL funcționează automat.
Dacă e nevoie de cert explicit:
```powershell
cd C:\Tools\win-acme
Import-Module WebAdministration
Get-Website | Select-Object ID, Name
.\wacs.exe --source iis --siteid <ID_space> --accepttos --emailaddress admin@romfast.ro
iisreset
```
---
## Troubleshooting
### 502 Bad Gateway
Cauze posibile:
1. **dnsrr fix** — Docker Swarm VIP issue (standard pe LXC 103)
```bash
journalctl -u dokploy-dnsrr-fix -n 20
# Trebuie să apară: OK - space-booking-... now uses dnsrr
```
2. **Backend nu a pornit** — verifică logs backend în Dokploy UI
### Seed DB nu rulează
```bash
# Verificare logs în Dokploy UI → backend
# Dacă apare eroare la seed, verifică DATABASE_URL și permisiuni volum
docker volume ls | grep space-booking
```
### SMTP nu trimite emailuri
1. Verifică `SMTP_ENABLED=true` în Dokploy → Environment
2. Verifică că `SMTP_USER` și `SMTP_PASSWORD` sunt setate (nu doar `SMTP_HOST`)
3. Redeploy după setarea variabilelor
4. Verifică logs backend pentru erori SMTP
### Resetare bază de date (date demo)
```bash
# ATENȚIE: șterge toate datele!
docker volume rm space-booking_backend_data
# La redeploy următor, seed_db.py recreează datele demo
```

View File

@@ -0,0 +1,221 @@
# LXC 106 - Gitea (Git Server)
## Informații Generale
- **CTID:** 106
- **IP:** 10.0.20.165
- **Rol:** Git server self-hosted pentru toate repo-urile ROMFAST
- **Host Proxmox:** pvemini (10.0.20.201)
- **Status:** Running (onboot: enabled)
- **URL public:** https://gitea.romfast.ro
---
## Arhitectură
Gitea rulează în Docker Compose pe LXC 106. Datele sunt persistate în volume locale.
```
Internet → 188.26.14.103 → VM 201 IIS (SSL) → LXC 106 :3000 (Gitea)
:222 (SSH git)
```
### Containere Docker
| Container | Image | Port | Rol |
|-----------|-------|------|-----|
| `gitea` | docker.gitea.com/gitea:1.24.3 | 3000 (web), 222 (SSH) | Git server |
| `gitea-db-1` | postgres:14 | 5432 (intern) | Bază de date |
### Volume (pe LXC 106)
| Cale pe LXC | Montat în container | Conținut |
|-------------|--------------------|----|
| `/opt/gitea/gitea/` | `/data` | Repo-uri, configurație, avatare, LFS |
| `/opt/gitea/postgres/` | `/var/lib/postgresql/data` | Baza de date PostgreSQL |
| `/opt/gitea/docker-compose.yml` | — | Definție servicii Docker |
### Fișier configurație principal
```
/opt/gitea/gitea/gitea/conf/app.ini ← pe LXC 106 (host)
/data/gitea/conf/app.ini ← în interiorul containerului
```
---
## Acces
### Web UI
```
https://gitea.romfast.ro (public, prin IIS)
http://10.0.20.165:3000 (intern LAN)
```
### SSH (operații git)
```bash
# Clone repo
git clone git@gitea.romfast.ro:romfast/<repo>.git
# SSH config recomandat (~/.ssh/config)
Host gitea.romfast.ro
HostName 10.0.20.165
Port 222
User git
IdentityFile ~/.ssh/gitea_ed25519
```
### Shell pe LXC (din pvemini)
```bash
ssh root@10.0.20.201 "pct exec 106 -- sh -c '<comandă>'"
```
---
## Operații Frecvente
### Status containere
```bash
ssh root@10.0.20.201 "pct exec 106 -- docker ps"
```
### Restart Gitea (după modificări app.ini)
```bash
ssh root@10.0.20.201 "pct exec 106 -- docker restart gitea"
```
### Restart complet (Gitea + PostgreSQL)
```bash
ssh root@10.0.20.201 "pct exec 106 -- sh -c 'cd /opt/gitea && docker compose restart'"
```
### Logs Gitea
```bash
ssh root@10.0.20.201 "pct exec 106 -- docker logs gitea -f --tail 50"
```
### Logs PostgreSQL
```bash
ssh root@10.0.20.201 "pct exec 106 -- docker logs gitea-db-1 --tail 20"
```
---
## Modificare Configurație (app.ini)
**Fișier:** `/opt/gitea/gitea/gitea/conf/app.ini` pe LXC 106
### Vizualizare configurație curentă
```bash
ssh root@10.0.20.201 "pct exec 106 -- docker exec gitea cat /data/gitea/conf/app.ini"
```
### Editare directă pe LXC
```bash
# Intră în LXC
ssh root@10.0.20.201 "pct enter 106"
# Editează
nano /opt/gitea/gitea/gitea/conf/app.ini
# Restart după modificare
docker restart gitea
```
### Adăugare secțiune nouă (non-interactiv)
```bash
ssh root@10.0.20.201 "pct exec 106 -- sh -c 'printf \"\n[sectiune]\nCHEIE = VALOARE\n\" >> /opt/gitea/gitea/gitea/conf/app.ini'"
ssh root@10.0.20.201 "pct exec 106 -- docker restart gitea"
```
> **Important:** `bash` nu este disponibil în LXC 106 — folosește `sh`.
---
## Configurații Notabile din app.ini
### Webhook — ALLOWED_HOST_LIST
Implicit Gitea blochează webhook-urile spre IP-uri private (protecție SSRF).
Pentru a permite webhook-uri spre LXC-uri interne (ex: Dokploy pe 10.0.20.167):
```ini
[webhook]
ALLOWED_HOST_LIST = 10.0.20.0/24
```
**Context:** Gitea nu poate accesa `dokploy.romfast.ro` din LAN (hairpin NAT).
Webhook-urile spre Dokploy trebuie configurate cu IP intern:
```
http://10.0.20.167:3000/api/deploy/compose/<token>
```
### Mailer (SMTP)
```ini
[mailer]
ENABLED = true
SMTP_ADDR = mail.romfast.ro
SMTP_PORT = 465
FROM = gitea@romfast.ro
USER = gitea@romfast.ro
```
### Server
```ini
[server]
DOMAIN = gitea.romfast.ro
ROOT_URL = https://gitea.romfast.ro/
SSH_LISTEN_PORT = 22 ; intern în container
SSH_PORT = 222 ; expus pe LXC
```
---
## Upgrade Gitea
```bash
# Editează versiunea în docker-compose.yml
ssh root@10.0.20.201 "pct exec 106 -- sh -c 'cd /opt/gitea && nano docker-compose.yml'"
# Pull imagine nouă și recreează containerul
ssh root@10.0.20.201 "pct exec 106 -- sh -c 'cd /opt/gitea && docker compose pull && docker compose up -d'"
```
---
## Backup
Datele importante sunt în `/opt/gitea/` pe LXC 106:
- `/opt/gitea/gitea/` — repo-uri, configurație, LFS, avatare
- `/opt/gitea/postgres/` — baza de date PostgreSQL
Proxmox face backup automat al întregului LXC 106 zilnic la 02:00.
---
## Troubleshooting
### Gitea nu pornește
```bash
ssh root@10.0.20.201 "pct exec 106 -- docker logs gitea --tail 50"
```
### Webhook timeout din Gitea
Cauză: hairpin NAT — Gitea nu poate accesa domenii publice care pointează spre LAN.
Fix: folosește IP intern în URL webhook (ex: `http://10.0.20.167:3000/...`).
Vezi secțiunea **Webhook — ALLOWED_HOST_LIST** de mai sus.
### Port 222 SSH nu răspunde
```bash
ssh root@10.0.20.201 "pct exec 106 -- docker ps | grep gitea"
# Dacă containerul e oprit:
ssh root@10.0.20.201 "pct exec 106 -- sh -c 'cd /opt/gitea && docker compose up -d'"
```
---
**Ultima actualizare:** 2026-03-04
**Autor:** Marius Mutu
**Proiect:** ROMFASTSQL - LXC 106 Gitea

View File

@@ -396,10 +396,32 @@ ALTER PLUGGABLE DATABASE XEPDB1 SAVE STATE;
impdp ... REMAP_TABLESPACE=ROA:USERS
```
**ORA-00959: tablespace 'USERS' does not exist (pe PDB nou):**
```cmd
REM PDB-ul nou din PDB$SEED nu are tablespace USERS. Remapeaza la ROA:
impdp "sys/pass@XEPDB1 AS SYSDBA" ... remap_tablespace=USERS:ROA
```
**ORA-39405: Oracle Data Pump does not support importing from a source database with TSTZ version newer:**
Use DMP files exported from Oracle 18c (TSTZ 31) instead of Oracle 21c (TSTZ 35).
### ORA-12954: Database exceeds 12 GB (XE only)
See `clienti/oracle-xe-21c/depanare-ora-12954-spatiu.md` for full troubleshooting guide.
**Prevention (run on every new XE installation):**
```sql
-- Connect to XEPDB1 as SYS
EXEC DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'sql tuning advisor', operation => NULL, window_name => NULL);
EXEC DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'auto space advisor', operation => NULL, window_name => NULL);
NOAUDIT POLICY ORA_SECURECONFIG;
NOAUDIT POLICY ORA_LOGON_FAILURES;
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 8*24*60, interval => 60);
EXEC DBMS_STATS.ALTER_STATS_HISTORY_RETENTION(7);
GRANT EXECUTE ON SYS.DBMS_LOCK TO CONTAFIN_ORACLE;
```
### Service Not Starting
Check Windows Services:

View File

@@ -276,6 +276,55 @@ Or via Control Panel > Programs and Features.
---
## Post-Installation: Preventie ORA-12954 (OBLIGATORIU!)
Oracle XE are limita de 12 GB. Fara aceste setari, SYSAUX creste automat pana la limita (SQL Tuning Sets, audit trail).
**Conecteaza-te la PDB-ul XEPDB1 ca SYS si ruleaza:**
```sql
sqlplus sys/romfastsoft@localhost:1521/XEPDB1 as sysdba
-- 1. Dezactiveaza auto tasks care umfla SYSAUX
EXEC DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'sql tuning advisor', operation => NULL, window_name => NULL);
EXEC DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'auto space advisor', operation => NULL, window_name => NULL);
-- 2. Dezactiveaza audit policies (umfla AUDSYS)
NOAUDIT POLICY ORA_SECURECONFIG;
NOAUDIT POLICY ORA_LOGON_FAILURES;
-- 3. AWR retention minim (8 zile - limita moving window baseline)
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 8*24*60, interval => 60);
EXEC DBMS_STATS.ALTER_STATS_HISTORY_RETENTION(7);
-- 4. Grant DBMS_LOCK (necesar pentru PACK_UTILS_FILE)
GRANT EXECUTE ON SYS.DBMS_LOCK TO CONTAFIN_ORACLE;
-- 5. Verificare
SELECT client_name, status FROM dba_autotask_client;
SELECT policy_name, enabled_option FROM audit_unified_enabled_policies;
```
> **IMPORTANT:** Fara acesti pasi, baza de date va atinge limita de 12 GB in cateva luni!
> Vezi `clienti/oracle-xe-21c/depanare-ora-12954-spatiu.md` pentru ghid complet de depanare.
---
## Gotchas Oracle XE 21c (Windows)
| Problema | Solutie |
|----------|---------|
| `ORA-02236: invalid file name` la CREATE TABLESPACE | Specifica path complet: `DATAFILE 'C:\...\ROA01.DBF'` |
| `ORA-00959: tablespace 'USERS' does not exist` la impdp | Adauga `remap_tablespace=USERS:ROA` |
| `ORA-00942` la GRANT pe DIRECTORY | Foloseste `GRANT READ, WRITE ON DIRECTORY dir_name` nu `ON SYS.dir_name` |
| `PLS-00201: DBMS_LOCK must be declared` | `GRANT EXECUTE ON SYS.DBMS_LOCK TO CONTAFIN_ORACLE` |
| `ORA-65066` la ALTER USER SYSTEM pe PDB | SYSTEM e common user, modifica din CDB$ROOT |
| `ORA-28000: account is locked` la impdp cu SYSTEM | Foloseste SYS AS SYSDBA: `impdp "sys/pass@XEPDB1 AS SYSDBA"` |
| impdp `AS SYSDBA` nu functioneaza pe Windows | Pune in ghilimele: `impdp "sys/pass@XEPDB1 AS SYSDBA"` |
| `ORA-13541` la AWR retention | Retention trebuie >= 8 zile (moving window baseline) |
---
## Next Steps
After Oracle XE installation:
@@ -283,10 +332,11 @@ After Oracle XE installation:
1. Copy `config.example.ps1` to `config.ps1`
2. Edit `config.ps1` with your settings
3. Run `01-setup-database.ps1`
4. **Run the post-installation prevention steps above!**
See main `README.md` for complete workflow.
---
**Last Updated:** 2026-01-28
**Last Updated:** 2026-03-24
**Project:** ROMFASTSQL - Oracle XE Installation Guide