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>
This commit is contained in:
Claude Agent
2026-03-24 16:31:17 +00:00
parent 36c6405c21
commit 6410339196
18 changed files with 2699 additions and 1 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,412 @@
-- ============================================================
-- 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
-- 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. 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;
-- 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 advisor tasks + stats
exec_log('BEGIN DBMS_ADVISOR.DELETE_EXPIRED_TASKS; END;', 'Delete expired advisor tasks');
exec_log('BEGIN DBMS_STATS.PURGE_STATS(SYSDATE - 7); END;', 'Purge stats older than 7 days');
exec_log('PURGE DBA_RECYCLEBIN', 'Purge recyclebin');
-- =========================================================
-- 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;
-- =========================================================
-- 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

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