Compare commits

..

2 Commits

Author SHA1 Message Date
Marius
4f51ee48f6 Add legacy ROA Oracle 10g server setup scripts (reference)
Original Oracle 10g R1/R2 setup scripts and SQL migrations from 2007-2026.
Preserved as reference for understanding ROA database structure and
historical schema evolution.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 17:08:13 +02:00
Marius
989477f7a4 Add ROA Oracle Database Windows setup scripts with old client support
PowerShell scripts for setting up Oracle 21c/XE with ROA application:
- Automated tablespace, user creation and imports
- sqlnet.ora config for Instant Client 11g/ODBC compatibility
- Oracle 21c read-only Home path handling (homes/OraDB21Home1)
- Listener restart + 10G password verifier for legacy auth
- Tested on VM 302 with CONTAFIN_ORACLE schema import

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 17:08:02 +02:00
71 changed files with 14231 additions and 0 deletions

11
.gitignore vendored Normal file
View File

@@ -0,0 +1,11 @@
# Claude Code handoff files
.claude/HANDOFF.md
# Input/backup files (large DMP files)
input/
# IDE files
.idea/
.vscode/
*.swp
*.swo

View File

@@ -0,0 +1,103 @@
setup.exe
----------------------------------------------------------------
<Welcome>
Advanced installation
<Specify File Locations>
Destination : Path : c:\oracle\product\10.1.0\db_1
<Select Installation Type>
Standard Edition
Product Languages : English, Romanian
<Select Database Configuration>
Advanced
<Install>
----------------------------------------------------------------
Database Configuration Assistant
<Step 1 of 11: Database Templates>
Custom Database
<Step 2 of 11: Database Identification>
Global Database Name: ROA
SID: ROA
<Step 3 of 11: Management Options>
Configure the Database With Enterprise Manager: Da
Enable Email Notification : Da
Enable Daily Backup : Da
<Step 4 of 11: Database Credentials>
Use the same password for all accounts : Da
Password: oracleromfast
<Step 5 of 11: Storage Options>
File System : Da
<Step 6 of 11: Database File Locations>
Use Common Location For All Database Files : Da
Database Files Location: D:\ROA_DB
<Step 7 of 11: Recovery Configuration>
Specify Flash Recovery Area : Da
Flash Recovery Area : D:\ROA_FLASH
Flash Recovery Area Size : 20480 MB (20 GB)
Enable Archiving : Da
<Step 8 of 11: Database Content>
Standard Database Components: Nu
Enterprise Manager Repository : Da
Restul optiunilor : Nu
<Step 9 of 11: Initialization Parameters>
<Memory>
Typical : Da
Percentage : 60% (600-900 MB)
<Character Sets>
Default Language : ROMANIAN
Default Date Format : ROMANIA
<Sizing>
Block Size : 8
Processes : 150
<Connection Mode>
Dedicated Server Mode : Da
<Step 10 of 11: Initialization Parameters>
Optiunile default
<Step 11 of 11: Creation Options>
Create Database : Da
Generate Database Creation Scripts : Da
Destination Directory : D:\ROA_SCRIPTS
----------------------------------------------------------------
http://localhost:5500/em
http://localhost:5560/isqlplus
----------------------------------------------------------------
Instalare TABLESPACE ROA, USER CONTAFIN_ORACLE, USER FIRMA_NOUA
D:\kit\creare_server_scripturi
roa.bat
parola pentru SYSTEM: oracleromfast
SID-ul bazei de date: ROA
Directorul unde se va instala baza de date : D:\ROA_DB\ROA
Parola pentru contafin_oracle : romfastsoft
Numele pentru firma noua: DEMO
Parola pentru firma noua: 123
----------------------------------------------------------------
Actualizare CONTAFIN_ORACLE si FIRMA_NOUA
Trebuiesc aplicate scripturile generate dupa scriptul initial de creare a bazei de date.
----------------------------------------------------------------
User ROA: administrator
Parola: 333

View File

@@ -0,0 +1,52 @@
ORACLE 10gR2
Advanced Installation
Select Installation Type: Standard Edition, Product Languages + Romanian
Specify Home Details: Name: OraDb10g_home1; Path: c:\oracle\product\10.2.0\db_1
Select Configuration Option: Create a database
Select Database Configuration: Advanced
Database Configuration Assistant
Step1: Database Templates
Custom Database
Step2: Database Identification:
Global Database Name: ROA; SID: ROA
Step3: Management Options:
Configure the Database with Enterprise Manager;
Enable Daily Backup (OS Username: oracle, Password: <nume_client> ex: oracle/fruvimed)
* Trebuie creat un user administrator? cu drept de "log on as batch"
Step4: Database Credentials
Use the Same Password for All Accounts: oracleromfast
Step5: Storage Options
File System
Step6: Database File Locations:
Use Common Location for All Database Files
Database Files Location: D:\ROA_DB
Step7: Recovery Configuration:
Specify Flash Recovery Area: D:\ROA_FLASH
Flash Recovery Area Size: 10-20 GB
Enable Archiving
Step8: Database Content
Standard Database Components: debifeaza tot (Oracle JVM, Oracle XML DB, Oracle Intermedia)
Bifeaza doar Enterprise Manager Repository
Step9: Initialization Parameters
Memory: (65%-70% din 1GB)
Sizing > Processes: 150
Character Sets > Default Language: Romanian; > Default Date Format: Romania
Connection Mode: Dedicated Server Mode
Step10: Database Storage OK
Step11: Creation Options
Create Database
Generate Database Creation Scripts: D:\ROA_SCRIPTS

View File

@@ -0,0 +1,366 @@
REINSTALARE BAZA DE DATE DIN DUMP
1. ARCHIVELOG
--------------------
ORACLE ENABLE ARCHIVELOG
-------------------------
archive log list;
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=200G SCOPE=BOTH;
show parameter recovery_file_dest;
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;
alter system switch logfile;
1. Creare server scripturi
2. Recreare sys.vauth_serii
create or replace view sys.vauth_serii 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;
3. Instalare utlmail
You must both install UTL_MAIL and define the SMTP_OUT_SERVER.
To install UTL_MAIL:
sqlplus sys/<pwd>
@d:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\utlmail.sql
@d:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\prvtmail.plb
@D:\Oracle\product\11.2.0\dbhome_1\RDBMS\ADMIN\utlmail.sql
@D:\oracle_xe\app\oracle\product\11.2.0\server\RDBMS\ADMIN\utlmail.sql
@D:\oraclexe\app\oracle\product\11.2.0\server\RDBMS\ADMIN\utlmail.sql
@D:\oraclexe\app\oracle\product\11.2.0\server\RDBMS\ADMIN\prvtmail.plb
4. Completare customer_id in sys.auth_detalii
5. Verificare contafin_oracle.server_info
Schimbare cai roaupdate, parole sys, contafin_oracle, updprereq = 0
6. syn_new_schema_job
7. Completare contafin_oracle.server_info
8. backup oracle
/* oracle 11 expire password */
select resource_name,limit from dba_profiles where profile='DEFAULT';
select username,expiry_date,account_status from dba_users;
alter profile DEFAULT limit password_life_time UNLIMITED;
9.
INSTALARE schema XDB - xml database necesara pentru functii din pack_utils_file
sqlplus sys/<pwd>
@d:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\catqm.sql XDB SYSAUX TEMP
@C:\oracle\product\10.1.0\db_1\RDBMS\ADMIN\catqm.sql XDB SYSAUX TEMP
@D:\Oracle\product\11.2.0\dbhome_1\RDBMS\ADMIN\catqm.sql XDB SYSAUX TEMP
You define the SMTP_OUT_SERVER parameter in the init.ora rdbms initialization file. However, if SMTP_OUT_SERVER is not defined, this invokes a default of DB_DOMAIN which is guaranteed to be defined to perform appropriately.
-----------------------------------
BEGIN
DBMS_NETWORK_ACL_ADMIN.DROP_ACL(acl => 'roaupdate.xml');
END;
/
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl => 'roaupdate.xml',
description => 'Permissions to send mail',
principal => 'CONTAFIN_ORACLE',
is_grant => true,
privilege => 'connect');
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl => 'roaupdate.xml',
principal => 'CONTAFIN_ORACLE',
is_grant => true,
privilege => 'resolve');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl => 'roaupdate.xml',
host => '*');
END;
/
COMMIT;
GRANT EXECUTE ON UTL_INADDR TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_TCP TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_SMTP TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_HTTP TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_MAIL TO CONTAFIN_ORACLE;
----------------------------------------------------------------------------------
select CAST(pack_utils.encodebase64(pack_utils.zipblob(pack_utils.Clob2Blob('ROMFASTROMFAST'))) AS VARCHAR2(200)) AS PAROLA from dual;
select CAST(pack_utils.encodebase64(pack_utils.zipblob(pack_utils.Clob2Blob('ROMFASTSOFT'))) AS VARCHAR2(200)) AS PAROLA from dual;
select CAST(pack_utils.encodebase64(pack_utils.zipblob(pack_utils.Clob2Blob('ORACLEROMFAST'))) AS VARCHAR2(200)) AS PAROLA from dual;
select CAST(pack_utils.encodebase64(pack_utils.zipblob(pack_utils.Clob2Blob('ROMFASTFRUVIMED'))) AS VARCHAR2(200)) AS PAROLA from dual;
select CAST(pack_utils.encodebase64(pack_utils.zipblob(pack_utils.Clob2Blob('ROMFASTCONSTRUCT'))) AS VARCHAR2(500)) AS PAROLA from dual;
select CAST(pack_utils.encodebase64(pack_utils.zipblob(pack_utils.Clob2Blob('#romfastconpress2019#'))) AS VARCHAR2(500)) AS PAROLA from dual;
select CAST(pack_utils.encodebase64(pack_utils.zipblob(pack_utils.Clob2Blob('R0mfasTAcn'))) AS VARCHAR2(500)) AS PAROLA from dual;
select CAST(pack_utils.encodebase64(pack_utils.zipblob(pack_utils.Clob2Blob('RomfastAlex2020'))) AS VARCHAR2(500)) AS PAROLA from dual;
select CAST(pack_utils.encodebase64(pack_utils.zipblob(pack_utils.Clob2Blob('R0mfastRP2023'))) AS VARCHAR2(500)) AS PAROLA from dual;
PAROLA ROMFASTROMFAST: H4sIAAAAAAAACwvy93VzDA4JglAAeRxJLg4AAAA=
PAROLA ROMFASTSOFT: H4sIAAAAAAAACwvy93VzDA4J9ncLAQBe3GUpCwAAAA==
PAROLA romfastsoft: H4sIAAAAAAAACyvKz01LLC4pzk8rAQC2TmakCwAAAA==
PAROLA ORACLEROMFAST: H4sIAAAAAAAAC/MPcnT2cQ3y93VzDA4BAConyaYNAAAA
PAROLA ROMFASTFRUVIMED: H4sIAAAAAAAACwvy93VzDA5xCwoN8/R1dQEArroMew8AAAA=
PAROLA ROMFASTCONSTRUCT: H4sIAAAAAAAACwvy93VzDA5x9vcLDgkKdQ4BAErhQdQQAAAA
PAROLA #romfastconpress2019#: H4sIAAAAAAAAClMuys9NSywuSc7PKyhKLS42MjC0VAYA5NlLmhUAAAA=
PAROLA R0mfasTAcn: H4sIAAAAAAAACwsyyE1LLA5xTM4DAL1/5X8KAAAA
PAROLA R0mfastRP2023: H4sIAAAAAAAACgsyyE1LLC4JCjAyMDIGAPIsbhENAAAA
D:\oraclexe\app\oracle\product\11.2.0\server\bin\sqlplus.exe
CONPRESS
SYS/ROMFASTCONPRESS: H4sIAAAAAAAACwvy93VzDA5x9vcLCHINDgYACv/0xQ8AAAA=
AUTOMOTIVE
SYS/ROMFASTAUTOMOTIVE: H4sIAAAAAAAACwvy93VzDA5xDA3x9/UP8QxzBQAn8MMJEQAAAA==
ARGENTA
CONTAFIN_ORACLE/ARGENTA: H4sIAAAAAAAAC3MMcnf1C3EEAIVtR90HAAAA
SYS/ARGENTA: H4sIAAAAAAAAC3MMcnf1C3EEAIVtR90HAAAA
contafin_oracle:
update optiuni set varvalue = 'http://10.0.20.122:81/contafinupdate/default.aspx/updroa/download/|CUSTOMERID|/roa_app.xml' where upper(varname) = 'UPD_URL_APP';
update optiuni set varvalue = 'http://10.0.20.122:81/contafinupdate/default.aspx/updroa/download/|CUSTOMERID|/roa_database.xml' where upper(varname) = 'UPD_URL_DATABASE';
update optiuni set varvalue = 'http://83.103.197.79:3002/contafinupdate/default.aspx/updroa/download/|CUSTOMERID|/roa_app.xml' where upper(varname) = 'UPD_URL_APP';
update optiuni set varvalue = 'http://83.103.197.79:3002/contafinupdate/default.aspx/updroa/download/|CUSTOMERID|/roa_database.xml' where upper(varname) = 'UPD_URL_DATABASE';
begin
sys.dbms_scheduler.create_job(job_name => 'CONTAFIN_ORACLE.UPDATEROA_ZILNIC',
job_type => 'STORED_PROCEDURE',
job_action => 'PACK_UPDATE.UPDATEROA',
number_of_arguments => 6,
start_date => to_date('09-09-2014 04:00:00', 'dd-mm-yyyy hh24:mi:ss'),
repeat_interval => 'Freq=Daily;Interval=1',
end_date => to_date(null),
job_class => 'DEFAULT_JOB_CLASS',
enabled => false,
auto_drop => false,
comments => '');
sys.dbms_scheduler.set_job_argument_value(job_name => 'CONTAFIN_ORACLE.UPDATEROA_ZILNIC',
argument_position => 1,
argument_value => '1');
sys.dbms_scheduler.set_job_argument_value(job_name => 'CONTAFIN_ORACLE.UPDATEROA_ZILNIC',
argument_position => 2,
argument_value => '1');
sys.dbms_scheduler.set_job_argument_value(job_name => 'CONTAFIN_ORACLE.UPDATEROA_ZILNIC',
argument_position => 3,
argument_value => '1');
sys.dbms_scheduler.set_job_argument_value(job_name => 'CONTAFIN_ORACLE.UPDATEROA_ZILNIC',
argument_position => 4,
argument_value => '');
sys.dbms_scheduler.set_job_argument_value(job_name => 'CONTAFIN_ORACLE.UPDATEROA_ZILNIC',
argument_position => 5,
argument_value => '');
sys.dbms_scheduler.set_job_argument_value(job_name => 'CONTAFIN_ORACLE.UPDATEROA_ZILNIC',
argument_position => 6,
argument_value => '-3');
sys.dbms_scheduler.enable(name => 'CONTAFIN_ORACLE.UPDATEROA_ZILNIC');
end;
/
begin
sys.dbms_scheduler.create_job(job_name => 'ACN.IMPORT_RORIS_ZILNIC',
job_type => 'STORED_PROCEDURE',
job_action => 'ACN.PACK_ACN.IMPORT_RORIS',
number_of_arguments => 1,
start_date => to_date('19-09-2019 07:00:00', 'dd-mm-yyyy hh24:mi:ss'),
repeat_interval => 'freq=hourly; byhour=7,8,9,10,11,12,13,14,15,16; byminute=0; bysecond=0;',
end_date => to_date(null),
job_class => 'DEFAULT_JOB_CLASS',
enabled => false,
auto_drop => false,
comments => '');
sys.dbms_scheduler.SET_JOB_ANYDATA_VALUE(job_name => 'ACN.IMPORT_RORIS_ZILNIC',
argument_position => 1,
argument_value => sys.anydata.convertDate(trunc(sysdate)-30));
sys.dbms_scheduler.enable(name => 'ACN.IMPORT_RORIS_ZILNIC');
end;
/
MD C:\ROAUPDATE\_ARHIVE\COMUNROA
MD C:\ROAUPDATE\_ARHIVE\USERREPORTS
MD C:\ROAUPDATE\_ARHIVE\ROAAPROV
MD C:\ROAUPDATE\_ARHIVE\ROAAUTO
MD C:\ROAUPDATE\_ARHIVE\ROABAVERT
MD C:\ROAUPDATE\_ARHIVE\ROACASA
MD C:\ROAUPDATE\_ARHIVE\ROACOMENZI
MD C:\ROAUPDATE\_ARHIVE\ROACONIMPORT
MD C:\ROAUPDATE\_ARHIVE\ROACONSTRUCTII
MD C:\ROAUPDATE\_ARHIVE\ROACONT
MD C:\ROAUPDATE\_ARHIVE\ROACONTRACTE
MD C:\ROAUPDATE\_ARHIVE\ROADECL
MD C:\ROAUPDATE\_ARHIVE\ROADEF
MD C:\ROAUPDATE\_ARHIVE\ROADEFSALARII
MD C:\ROAUPDATE\_ARHIVE\ROADEPOZIT
MD C:\ROAUPDATE\_ARHIVE\ROADEVIZE
MD C:\ROAUPDATE\_ARHIVE\ROAFACTURARE
MD C:\ROAUPDATE\_ARHIVE\ROAFURNIZORI
MD C:\ROAUPDATE\_ARHIVE\ROAGEN
MD C:\ROAUPDATE\_ARHIVE\ROAGEST
MD C:\ROAUPDATE\_ARHIVE\ROAGRESTAURANT
MD C:\ROAUPDATE\_ARHIVE\ROAHOTEL
MD C:\ROAUPDATE\_ARHIVE\ROAHOTELCONFIG
MD C:\ROAUPDATE\_ARHIVE\ROAIMOB
MD C:\ROAUPDATE\_ARHIVE\ROAINCHIDSAL
MD C:\ROAUPDATE\_ARHIVE\ROALUCRARI
MD C:\ROAUPDATE\_ARHIVE\ROAMANAGER
MD C:\ROAUPDATE\_ARHIVE\ROAMASINI
MD C:\ROAUPDATE\_ARHIVE\ROANOR
MD C:\ROAUPDATE\_ARHIVE\ROANORFRUVIMED
MD C:\ROAUPDATE\_ARHIVE\ROANORRENAV
MD C:\ROAUPDATE\_ARHIVE\ROANORUTMIDIA
MD C:\ROAUPDATE\_ARHIVE\ROAOBINV
MD C:\ROAUPDATE\_ARHIVE\ROAOFERTARE
MD C:\ROAUPDATE\_ARHIVE\ROAPRETURI
MD C:\ROAUPDATE\_ARHIVE\ROAPRINT
MD C:\ROAUPDATE\_ARHIVE\ROAPRINT_INITIALIZARI
MD C:\ROAUPDATE\_ARHIVE\ROAPRODAGR
MD C:\ROAUPDATE\_ARHIVE\ROAPRODUCTIE
MD C:\ROAUPDATE\_ARHIVE\ROAREGISTRATURA
MD C:\ROAUPDATE\_ARHIVE\ROAREPARTIZSAL
MD C:\ROAUPDATE\_ARHIVE\ROARES
MD C:\ROAUPDATE\_ARHIVE\ROARESTAURANT
MD C:\ROAUPDATE\_ARHIVE\ROARETAIL
MD C:\ROAUPDATE\_ARHIVE\ROARETAILMON
MD C:\ROAUPDATE\_ARHIVE\ROASAL
MD C:\ROAUPDATE\_ARHIVE\ROASALSPEC
MD C:\ROAUPDATE\_ARHIVE\ROASITFIN
MD C:\ROAUPDATE\_ARHIVE\ROASITOP
MD C:\ROAUPDATE\_ARHIVE\ROASTART
MD C:\ROAUPDATE\_ARHIVE\ROASUPORT
MD C:\ROAUPDATE\_ARHIVE\ROATELCOMM
MD C:\ROAUPDATE\_ARHIVE\ROATELMON
MD C:\ROAUPDATE\_ARHIVE\ROAVIN
create or replace directory UPD_USERREPORTS as 'D:\ROAUPDATE\_ARHIVE\USERREPORTS';
create or replace directory UPD_COMUNROA as 'D:\ROAUPDATE\_ARHIVE\COMUNROA';
create or replace directory UPD_ROAVIN as 'D:\ROAUPDATE\_ARHIVE\ROAVIN';
create or replace directory UPD_ROATELMON as 'D:\ROAUPDATE\_ARHIVE\ROATELMON';
create or replace directory UPD_ROATELCOMM as 'D:\ROAUPDATE\_ARHIVE\ROATELCOMM';
create or replace directory UPD_ROASUPORT as 'D:\ROAUPDATE\_ARHIVE\ROASUPORT';
create or replace directory UPD_ROASTART as 'D:\ROAUPDATE\_ARHIVE\ROASTART';
create or replace directory UPD_ROASITOP as 'D:\ROAUPDATE\_ARHIVE\ROASITOP';
create or replace directory UPD_ROASITFIN as 'D:\ROAUPDATE\_ARHIVE\ROASITFIN';
create or replace directory UPD_ROASALSPEC as 'D:\ROAUPDATE\_ARHIVE\ROASALSPEC';
create or replace directory UPD_ROASAL as 'D:\ROAUPDATE\_ARHIVE\ROASAL';
create or replace directory UPD_ROARETAILMON as 'D:\ROAUPDATE\_ARHIVE\ROARETAILMON';
create or replace directory UPD_ROARETAIL as 'D:\ROAUPDATE\_ARHIVE\ROARETAIL';
create or replace directory UPD_ROARESTAURANT as 'D:\ROAUPDATE\_ARHIVE\ROARESTAURANT';
create or replace directory UPD_ROARES as 'D:\ROAUPDATE\_ARHIVE\ROARES';
create or replace directory UPD_ROAREPARTIZSAL as 'D:\ROAUPDATE\_ARHIVE\ROAREPARTIZSAL';
create or replace directory UPD_ROAREGISTRATURA as 'D:\ROAUPDATE\_ARHIVE\ROAREGISTRATURA';
create or replace directory UPD_ROAPRODUCTIE as 'D:\ROAUPDATE\_ARHIVE\ROAPRODUCTIE';
create or replace directory UPD_ROAPRODAGR as 'D:\ROAUPDATE\_ARHIVE\ROAPRODAGR';
create or replace directory UPD_ROAPRINT_INITIALIZARI as 'D:\ROAUPDATE\_ARHIVE\ROAPRINT_INITIALIZARI';
create or replace directory UPD_ROAPRINT as 'D:\ROAUPDATE\_ARHIVE\ROAPRINT';
create or replace directory UPD_ROAPRETURI as 'D:\ROAUPDATE\_ARHIVE\ROAPRETURI';
create or replace directory UPD_ROAOFERTARE as 'D:\ROAUPDATE\_ARHIVE\ROAOFERTARE';
create or replace directory UPD_ROAOBINV as 'D:\ROAUPDATE\_ARHIVE\ROAOBINV';
create or replace directory UPD_ROANORUTMIDIA as 'D:\ROAUPDATE\_ARHIVE\ROANORUTMIDIA';
create or replace directory UPD_ROANORRENAV as 'D:\ROAUPDATE\_ARHIVE\ROANORRENAV';
create or replace directory UPD_ROANORFRUVIMED as 'D:\ROAUPDATE\_ARHIVE\ROANORFRUVIMED';
create or replace directory UPD_ROANOR as 'D:\ROAUPDATE\_ARHIVE\ROANOR';
create or replace directory UPD_ROAMASINI as 'D:\ROAUPDATE\_ARHIVE\ROAMASINI';
create or replace directory UPD_ROAMANAGER as 'D:\ROAUPDATE\_ARHIVE\ROAMANAGER';
create or replace directory UPD_ROALUCRARI as 'D:\ROAUPDATE\_ARHIVE\ROALUCRARI';
create or replace directory UPD_ROAINCHIDSAL as 'D:\ROAUPDATE\_ARHIVE\ROAINCHIDSAL';
create or replace directory UPD_ROAIMOB as 'D:\ROAUPDATE\_ARHIVE\ROAIMOB';
create or replace directory UPD_ROAHOTELCONFIG as 'D:\ROAUPDATE\_ARHIVE\ROAHOTELCONFIG';
create or replace directory UPD_ROAHOTEL as 'D:\ROAUPDATE\_ARHIVE\ROAHOTEL';
create or replace directory UPD_ROAGRESTAURANT as 'D:\ROAUPDATE\_ARHIVE\ROAGRESTAURANT';
create or replace directory UPD_ROAGEST as 'D:\ROAUPDATE\_ARHIVE\ROAGEST';
create or replace directory UPD_ROAGEN as 'D:\ROAUPDATE\_ARHIVE\ROAGEN';
create or replace directory UPD_ROAFURNIZORI as 'D:\ROAUPDATE\_ARHIVE\ROAFURNIZORI';
create or replace directory UPD_ROAFACTURARE as 'D:\ROAUPDATE\_ARHIVE\ROAFACTURARE';
create or replace directory UPD_ROADEVIZE as 'D:\ROAUPDATE\_ARHIVE\ROADEVIZE';
create or replace directory UPD_ROADEPOZIT as 'D:\ROAUPDATE\_ARHIVE\ROADEPOZIT';
create or replace directory UPD_ROADEFSALARII as 'D:\ROAUPDATE\_ARHIVE\ROADEFSALARII';
create or replace directory UPD_ROADEF as 'D:\ROAUPDATE\_ARHIVE\ROADEF';
create or replace directory UPD_ROADECL as 'D:\ROAUPDATE\_ARHIVE\ROADECL';
create or replace directory UPD_ROACONTRACTE as 'D:\ROAUPDATE\_ARHIVE\ROACONTRACTE';
create or replace directory UPD_ROACONT as 'D:\ROAUPDATE\_ARHIVE\ROACONT';
create or replace directory UPD_ROACONSTRUCTII as 'D:\ROAUPDATE\_ARHIVE\ROACONSTRUCTII';
create or replace directory UPD_ROACONIMPORT as 'D:\ROAUPDATE\_ARHIVE\ROACONIMPORT';
create or replace directory UPD_ROACOMENZI as 'D:\ROAUPDATE\_ARHIVE\ROACOMENZI';
create or replace directory UPD_ROACASA as 'D:\ROAUPDATE\_ARHIVE\ROACASA';
create or replace directory UPD_ROABAVERT as 'D:\ROAUPDATE\_ARHIVE\ROABAVERT';
create or replace directory UPD_ROAAUTO as 'D:\ROAUPDATE\_ARHIVE\ROAAUTO';
create or replace directory UPD_ROAAPROV as 'D:\ROAUPDATE\_ARHIVE\ROAAPROV';
create or replace directory UPD_ROAUPDATE as 'D:\ROAUPDATE';
GRANT READ, WRITE ON DIRECTORY UPD_USERREPORTS TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_COMUNROA TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAVIN TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROATELMON TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROATELCOMM TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROASUPORT TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROASTART TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROASITOP TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROASITFIN TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROASALSPEC TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROASAL TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROARETAILMON TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROARETAIL TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROARESTAURANT TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROARES TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAREPARTIZSAL TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAREGISTRATURA TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAPRODUCTIE TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAPRODAGR TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAPRINT_INITIALIZARI TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAPRINT TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAPRETURI TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAOFERTARE TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAOBINV TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROANORUTMIDIA TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROANORRENAV TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROANORFRUVIMED TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROANOR TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAMASINI TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAMANAGER TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROALUCRARI TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAINCHIDSAL TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAIMOB TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAHOTELCONFIG TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAHOTEL TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAGRESTAURANT TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAGEST TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAGEN TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAFURNIZORI TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAFACTURARE TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROADEVIZE TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROADEPOZIT TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROADEFSALARII TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROADEF TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROADECL TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROACONTRACTE TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROACONT TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROACONSTRUCTII TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROACONIMPORT TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROACOMENZI TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROACASA TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROABAVERT TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAAUTO TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAAPROV TO CONTAFIN_ORACLE;
GRANT READ, WRITE ON DIRECTORY UPD_ROAUPDATE TO CONTAFIN_ORACLE;

View File

@@ -0,0 +1,405 @@
import_dmp
- creeaza tablespace roa 1gb
- creeaza useri contafin_oracle, firma
- importa contafin_oracle.dmp
- aplica postdbcreation.sql pe contafin_oracle (synonyme)
- importa firmanoua.dmp
utilizare:
- se copiaza fisierele din import_dmp si se suprascriu peste cele din creare_server_scripturi
- se copiaza in directorul creare_server_scripturi contafin_oracle.dmp si firmanoua.dmp
- se lanseaza roa.bat
contafin_oracle.dmp > 24.07.2014
firmanoua.dmp > 24.07.2014
Oracle XE 21c
1. Adauga baza de date XEPDB1 SI ROA in D:\app\roa\product\21c\homes\OraDB21Home1\network\admin\TNSNAMES.ORA
XEPDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = AppSrv.set.local)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XEPDB1)
)
)
ROA =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = AppSrv.set.local)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XEPDB1)
)
)
2. sqlnet.ora
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 11
SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 11
3.
sqlplus sys/romfastsoft@XEPDB1 as sysdba
alter profile DEFAULT limit password_life_time UNLIMITED;
@D:\app\roa\product\21c\dbhomeXE\rdbms\admin\utlmail.sql
@D:\app\roa\product\21c\dbhomeXE\rdbms\admin\prvtmail.plb
4.
LOG ON AS SYS@XEPDB1
CREATE OR REPLACE DIRECTORY DMPDIR AS 'C:\DMPDIR';
GRANT ALL ON DIRECTORY DMPDIR TO PUBLIC;
5.
ALTER USER SYS IDENTIFIED BY SR0mfasT2024;
6.
select 'INSERT INTO AUTH_SERII (ID_SERIE, ID_PROGRAM, SERIE, ID_UTIL) VALUES (SEQ_AUTH_SERII.NEXTVAL, ' || ID_PROGRAM || ', ''' || SERIE || ''', -3);' as cmd from (
select SP.serie, SP.id_program, SP.ID_CLIENT, SP.Nr_Util, SP.Data_val
from vgen_seriiprog SP
JOIN (SELECT ID_PROGRAM, MAX(DATAORA) AS DATAORA
FROM vgen_seriiclienti t
WHERE ID_CLIENT = 138
GROUP BY ID_PROGRAM) MP
ON SP.ID_PROGRAM = MP.ID_PROGRAM
AND SP.DATAORA = MP.DATAORA
where SP.ID_CLIENT = 138
AND SP.id_program in (49, 8, 2, 21, 1, 29, 5, 6, 7, 55, 159, 11, 0, 66));
7.
begin
sys.dbms_scheduler.create_job(job_name => 'CONTAFIN_ORACLE.UPDATERTVAI_ZILNIC',
job_type => 'STORED_PROCEDURE',
job_action => 'PACK_ROARTVAI.UPDATERTVAI',
start_date => to_date('14-04-2015 04:30:00', 'dd-mm-yyyy hh24:mi:ss'),
repeat_interval => 'Freq=Daily;Interval=1',
end_date => to_date(null),
job_class => 'DEFAULT_JOB_CLASS',
enabled => true,
auto_drop => false,
comments => '');
end;
/
8.
-- logon as sys@roa
create or replace procedure 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;
create or replace procedure 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;
/
GRANT EXECUTE ON UpdateSQLPLUS TO CONTAFIN_ORACLE;
create or replace procedure ExecuteScriptOS(tcPowerShellPath in varchar2,
tcScriptPath in varchar2) as
lcJobName varchar2(500);
begin
lcJobName := 'exec_ps_' || to_char(sysdate, 'YYYYMMDDHH24MISS');
dbms_scheduler.create_job(lcJobName,
job_action => tcPowerShellPath,
number_of_arguments => 1,
job_type => 'executable',
enabled => false);
dbms_scheduler.set_job_argument_value(lcJobName, 1, tcScriptPath);
dbms_scheduler.enable(lcJobName);
end ExecuteScriptOS;
/
GRANT EXECUTE ON ExecuteScriptOS TO CONTAFIN_ORACLE;
10.
https://dbalifeeasy.com/tag/alter-system-set-log_archive_dest_1locationuse_db_recovery_file_dest/
show parameter db_recovery_file
select * from V$RECOVERY_FILE_DEST;
alter system set db_recovery_file_dest_size=30g scope=both;
alter system set db_recovery_file_dest='D:\app\roa\product\21c\fast_recovery_area' scope=both;
show parameter db_recovery_file
alter system set log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST' scope=both;
archive log list;
select * from v$flash_recovery_area_usage;

View File

@@ -0,0 +1,41 @@
-- SE EXECUTA LOGAT CU USERUL SYSTEM
set echo oFF
spool CreateCO.log
prompt
prompt Stergere user CONTAFIN_ORACLE
prompt =============================
prompt
drop user contafin_oracle cascade;
prompt
prompt Creare user CONTAFIN_ORACLE
prompt ===========================
prompt
-- Create the user
create user CONTAFIN_ORACLE
identified by "&&coPassword"
default tablespace ROA
temporary tablespace TEMP
profile DEFAULT;
-- Grant/Revoke role privileges
grant connect to CONTAFIN_ORACLE;
grant resource to CONTAFIN_ORACLE;
-- Grant/Revoke system privileges
grant create any context to CONTAFIN_ORACLE;
grant create session to CONTAFIN_ORACLE;
grant create view to CONTAFIN_ORACLE;
grant delete any table to CONTAFIN_ORACLE;
grant drop any context 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;
grant create public synonym to CONTAFIN_ORACLE;
grant drop public synonym to CONTAFIN_ORACLE;
spool off

View File

@@ -0,0 +1,13 @@
-- SE EXECUTA LOGAT CU USERUL SYSTEM
set echo oFF
spool CreateDb.log
prompt
prompt Creare tablespace ROA
prompt =====================
prompt
CREATE SMALLFILE TABLESPACE "ROA" DATAFILE '&&dataDirectory\TS_ROA.DBF' SIZE 1000M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
spool off

View File

@@ -0,0 +1,33 @@
spool create&&fnName..log
prompt
prompt Stergere user &&fnName
prompt ===========================
prompt
drop user &&fnName cascade;
prompt
prompt Creare user &&fnName
prompt ===========================
prompt
create user &&fnName
identified by "&&fnPassword"
default tablespace ROA
temporary tablespace TEMP
profile DEFAULT;
-- Grant/Revoke role privileges
grant connect to &&fnName;
grant resource to &&fnName;
-- Grant/Revoke system privileges
grant create materialized view to &&fnName;
grant create procedure to &&fnName;
grant create sequence to &&fnName;
grant create table to &&fnName;
grant create trigger to &&fnName;
grant create view to &&fnName;
grant debug connect session to &&fnName;
grant select any table to &&fnName;
grant create type to &&fnName;
grant unlimited tablespace to &&fnName;
spool off

View File

@@ -0,0 +1,55 @@
MD D:\ROAUPDATE\_ARHIVE\COMUNROA
MD D:\ROAUPDATE\_ARHIVE\USERREPORTS
MD D:\ROAUPDATE\_ARHIVE\ROAPRINT
MD D:\ROAUPDATE\_ARHIVE\ROAAPROV
MD D:\ROAUPDATE\_ARHIVE\ROAAUTO
MD D:\ROAUPDATE\_ARHIVE\ROABAVERT
MD D:\ROAUPDATE\_ARHIVE\ROACASA
MD D:\ROAUPDATE\_ARHIVE\ROACOMENZI
MD D:\ROAUPDATE\_ARHIVE\ROACONIMPORT
MD D:\ROAUPDATE\_ARHIVE\ROACONSTRUCTII
MD D:\ROAUPDATE\_ARHIVE\ROACONT
MD D:\ROAUPDATE\_ARHIVE\ROACONTRACTE
MD D:\ROAUPDATE\_ARHIVE\ROADECL
MD D:\ROAUPDATE\_ARHIVE\ROADEF
MD D:\ROAUPDATE\_ARHIVE\ROADEFSALARII
MD D:\ROAUPDATE\_ARHIVE\ROADEPOZIT
MD D:\ROAUPDATE\_ARHIVE\ROADEVIZE
MD D:\ROAUPDATE\_ARHIVE\ROAFACTURARE
MD D:\ROAUPDATE\_ARHIVE\ROAFURNIZORI
MD D:\ROAUPDATE\_ARHIVE\ROAGEN
MD D:\ROAUPDATE\_ARHIVE\ROAGEST
MD D:\ROAUPDATE\_ARHIVE\ROAGRESTAURANT
MD D:\ROAUPDATE\_ARHIVE\ROAHOTEL
MD D:\ROAUPDATE\_ARHIVE\ROAHOTELCONFIG
MD D:\ROAUPDATE\_ARHIVE\ROAIMOB
MD D:\ROAUPDATE\_ARHIVE\ROAINCHIDSAL
MD D:\ROAUPDATE\_ARHIVE\ROALUCRARI
MD D:\ROAUPDATE\_ARHIVE\ROAMANAGER
MD D:\ROAUPDATE\_ARHIVE\ROAMASINI
MD D:\ROAUPDATE\_ARHIVE\ROANOR
MD D:\ROAUPDATE\_ARHIVE\ROANORFRUVIMED
MD D:\ROAUPDATE\_ARHIVE\ROANORRENAV
MD D:\ROAUPDATE\_ARHIVE\ROANORUTMIDIA
MD D:\ROAUPDATE\_ARHIVE\ROAOBINV
MD D:\ROAUPDATE\_ARHIVE\ROAOFERTARE
MD D:\ROAUPDATE\_ARHIVE\ROAPRETURI
MD D:\ROAUPDATE\_ARHIVE\ROAPRINT
MD D:\ROAUPDATE\_ARHIVE\ROAPRINT_INITIALIZARI
MD D:\ROAUPDATE\_ARHIVE\ROAPRODAGR
MD D:\ROAUPDATE\_ARHIVE\ROAPRODUCTIE
MD D:\ROAUPDATE\_ARHIVE\ROAREGISTRATURA
MD D:\ROAUPDATE\_ARHIVE\ROAREPARTIZSAL
MD D:\ROAUPDATE\_ARHIVE\ROARES
MD D:\ROAUPDATE\_ARHIVE\ROARESTAURANT
MD D:\ROAUPDATE\_ARHIVE\ROARETAIL
MD D:\ROAUPDATE\_ARHIVE\ROARETAILMON
MD D:\ROAUPDATE\_ARHIVE\ROASAL
MD D:\ROAUPDATE\_ARHIVE\ROASALSPEC
MD D:\ROAUPDATE\_ARHIVE\ROASITFIN
MD D:\ROAUPDATE\_ARHIVE\ROASITOP
MD D:\ROAUPDATE\_ARHIVE\ROASTART
MD D:\ROAUPDATE\_ARHIVE\ROASUPORT
MD D:\ROAUPDATE\_ARHIVE\ROATELCOMM
MD D:\ROAUPDATE\_ARHIVE\ROATELMON
MD D:\ROAUPDATE\_ARHIVE\ROAVIN

View File

@@ -0,0 +1,427 @@
SPOOL postDbCreation.log
-- SE EXECUTA LOGAT CU USERUL SYSTEM
PROMPT
PROMPT CREATING PUBLIC SYNONYMS
PROMPT ========================
PROMPT
drop public synonym SYN_LUNILEAN;
drop public synonym SYN_PACK_DREPTURI;
drop public synonym syn_vdef_util_grup;
drop public synonym syn_def_grup_drept;
drop public synonym syn_utilizatori;
drop public synonym syn_vdef_util_programe;
drop public synonym SYN_VDEF_UTIL_OBIECTE;
drop public synonym syn_vutilizatori;
drop public synonym syn_nom_programe;
drop public synonym syn_def_programe;
drop public synonym SYN_NOM_FIRME;
drop public synonym syn_vdef_util_programe;
drop public synonym syn_helpcont;
drop public synonym stringAgg;
drop public synonym char_row;
drop public synonym char_tab;
drop public synonym num_row;
drop public synonym num_tab;
drop public synonym uw_sel_row;
drop public synonym uw_sel_tab;
drop public synonym getwordcount;
drop public synonym getwordnum;
drop public synonym charc2collection;
drop public synonym charn2collection;
drop public synonym SYN_V_NOM_FIRME;
drop public synonym syn_nom_forme_juridice;
drop public synonym syn_nom_forme_organizare;
drop public synonym syn_nom_tip_societate;
drop public synonym syn_nom_forme_proprietate;
drop synonym contafin_oracle.vdef_programe_serii;
create context sesiune using contafin_oracle.set_variabile;
CREATE PUBLIC SYNONYM SYN_DEF_GRUP FOR CONTAFIN_ORACLE.DEF_GRUP;
GRANT SELECT ON SYN_DEF_GRUP TO PUBLIC;
GRANT REFERENCES ON SYN_DEF_GRUP TO PUBLIC;
CREATE PUBLIC SYNONYM SYN_DEF_PROGRAME FOR CONTAFIN_ORACLE.DEF_PROGRAME;
GRANT SELECT ON SYN_DEF_PROGRAME TO PUBLIC;
GRANT REFERENCES ON SYN_DEF_PROGRAME TO PUBLIC;
CREATE PUBLIC SYNONYM SYN_VDEF_PROGRAME FOR CONTAFIN_ORACLE.VDEF_PROGRAME;
GRANT SELECT ON SYN_VDEF_PROGRAME TO PUBLIC;
GRANT REFERENCES ON SYN_VDEF_PROGRAME TO PUBLIC;
CREATE PUBLIC SYNONYM SYN_LUNILEAN FOR CONTAFIN_ORACLE.LUNILEAN;
GRANT SELECT ON SYN_LUNILEAN TO PUBLIC;
GRANT REFERENCES ON SYN_LUNILEAN TO PUBLIC;
CREATE PUBLIC SYNONYM SYN_NOM_FIRME FOR CONTAFIN_ORACLE.NOM_FIRME;
GRANT SELECT ON SYN_NOM_FIRME TO PUBLIC;
GRANT REFERENCES ON SYN_NOM_FIRME TO PUBLIC;
CREATE PUBLIC SYNONYM SYN_NOM_PROGRAME FOR CONTAFIN_ORACLE.NOM_PROGRAME;
GRANT SELECT ON SYN_NOM_PROGRAME TO PUBLIC;
GRANT REFERENCES ON SYN_NOM_PROGRAME TO PUBLIC;
CREATE PUBLIC SYNONYM SYN_PACK_DREPTURI FOR CONTAFIN_ORACLE.PACK_DREPTURI;
GRANT EXECUTE ON SYN_PACK_DREPTURI TO PUBLIC;
--GRANT REFERENCES ON SYN_PACK_DREPTURI TO PUBLIC;
CREATE PUBLIC SYNONYM SYN_UTILIZATORI FOR CONTAFIN_ORACLE.UTILIZATORI;
GRANT SELECT ON SYN_UTILIZATORI TO PUBLIC;
GRANT REFERENCES ON SYN_UTILIZATORI TO PUBLIC;
create public synonym syn_vdef_util_programe for CONTAFIN_ORACLE.VDEF_UTIL_PROGRAME;
grant select on syn_vdef_util_programe to public;
create public synonym syn_vdef_util_firme for CONTAFIN_ORACLE.VDEF_UTIL_firme;
grant select on syn_vdef_util_firme TO PUBLIC;
grant references on syn_vdef_util_firme to public;
CREATE PUBLIC SYNONYM SYN_VDEF_UTIL_OBIECTE FOR CONTAFIN_ORACLE.VDEF_UTIL_OBIECTE;
GRANT SELECT ON SYN_VDEF_UTIL_OBIECTE TO PUBLIC;
GRANT REFERENCES ON SYN_VDEF_UTIL_OBIECTE TO PUBLIC;
CREATE PUBLIC SYNONYM SYN_VUTILIZATORI FOR CONTAFIN_ORACLE.VUTILIZATORI;
GRANT SELECT ON SYN_VUTILIZATORI TO PUBLIC;
GRANT REFERENCES ON SYN_VUTILIZATORI TO PUBLIC;
CREATE PUBLIC SYNONYM SYN_vdef_util_grup FOR CONTAFIN_ORACLE.vdef_util_grup;
GRANT SELECT ON SYN_vdef_util_grup TO PUBLIC;
GRANT REFERENCES ON SYN_vdef_util_grup TO PUBLIC;
CREATE PUBLIC SYNONYM syn_def_grup_drept FOR CONTAFIN_ORACLE.def_grup_drept;
GRANT SELECT ON syn_def_grup_drept TO PUBLIC;
GRANT REFERENCES ON syn_def_grup_drept TO PUBLIC;
create public synonym SYN_OPTIUNI_PROGRAME for CONTAFIN_ORACLE.OPTIUNI_PROGRAME;
grant select on SYN_OPTIUNI_PROGRAME to public;
create public synonym syn_helpcont for CONTAFIN_ORACLE.helpcont;
grant select on syn_helpcont to public;
CREATE PUBLIC SYNONYM syn_v_nom_firme FOR CONTAFIN_ORACLE.V_NOM_FIRME;
GRANT SELECT ON SYN_V_NOM_FIRME TO PUBLIC;
create public synonym syn_nom_forme_juridice for CONTAFIN_ORACLE.nom_forme_juridice;
grant select on syn_nom_forme_juridice to public;
create public synonym syn_nom_forme_organizare for CONTAFIN_ORACLE.nom_forme_organizare;
grant select on syn_nom_forme_organizare to public;
create public synonym syn_nom_tip_societate for CONTAFIN_ORACLE.nom_tip_societate;
grant select on syn_nom_tip_societate to public;
create public synonym syn_nom_forme_proprietate for CONTAFIN_ORACLE.nom_forme_proprietate;
grant select on syn_nom_forme_proprietate to public;
create public synonym stringAgg for CONTAFIN_ORACLE.stringAgg;
grant execute on stringAgg to public;
grant execute on StringAggType to public;
create public synonym char_row for CONTAFIN_ORACLE.char_row;
create public synonym char_tab for CONTAFIN_ORACLE.char_tab;
create public synonym num_row for CONTAFIN_ORACLE.num_row;
create public synonym num_tab for CONTAFIN_ORACLE.num_tab;
grant execute on num_row to public;
grant execute on num_tab to public;
grant execute on char_row to public;
grant execute on char_tab to public;
create public synonym uw_sel_row for CONTAFIN_ORACLE.uw_sel_row;
create public synonym uw_sel_tab for CONTAFIN_ORACLE.uw_sel_tab;
grant execute on uw_sel_row to public;
grant execute on uw_sel_tab to public;
create public synonym valoaretag for CONTAFIN_ORACLE.valoaretag;
grant execute on valoaretag to public;
create public synonym getwordcount for contafin_oracle.getwordcount;
create public synonym getwordnum for contafin_oracle.getwordnum;
create public synonym charc2collection for contafin_oracle.charc2collection;
create public synonym charn2collection for contafin_oracle.charn2collection;
grant execute on getwordcount to public;
grant execute on getwordnum to public;
grant execute on charc2collection to public;
grant execute on charn2collection to public;
CREATE SYNONYM CONTAFIN_ORACLE.VDEF_PROGRAME_SERII FOR SYS.VAUTH_SERII;
GRANT SELECT ON CONTAFIN_ORACLE.VDEF_PROGRAME_sERII TO CONTAFIN_ORACLE;
create public synonym syn_vnom_valute_iso for CONTAFIN_ORACLE.VNOM_VALUTE_ISO;
grant select on syn_vnom_valute_iso to public;
CREATE PUBLIC SYNONYM SYN_CURS_ACTUALIZARI FOR CONTAFIN_ORACLE.CURS_ACTUALIZARI;
GRANT SELECT ON SYN_CURS_ACTUALIZARI TO PUBLIC;
GRANT REFERENCES ON SYN_CURS_ACTUALIZARI TO PUBLIC;
CREATE PUBLIC SYNONYM syn_nom_valute_iso FOR CONTAFIN_ORACLE.NOM_VALUTE_ISO;
GRANT SELECT ON syn_nom_valute_iso TO PUBLIC;
GRANT REFERENCES ON syn_nom_valute_iso TO PUBLIC;
CREATE PUBLIC SYNONYM syn_curs_cotatii FOR CONTAFIN_ORACLE.CURS_COTATII;
GRANT SELECT ON syn_curs_cotatii TO PUBLIC;
GRANT REFERENCES ON syn_curs_cotatii TO PUBLIC;
grant references on syn_nom_forme_juridice to public;
grant references on syn_nom_forme_organizare to public;
grant references on syn_nom_tip_societate to public;
grant references on syn_nom_forme_proprietate to public;
create public synonym syn_nom_cetatenii for contafin_oracle.nom_cetatenii;
grant select on syn_nom_cetatenii to public;
grant references on syn_nom_cetatenii to public;
create public synonym syn_nom_tari for contafin_oracle.nom_tari;
grant select on syn_nom_tari to public;
grant references on syn_nom_tari to public;
create public synonym syn_sal_nom_temei for contafin_oracle.sal_nom_temei;
grant select on syn_sal_nom_temei to public;
grant references on syn_sal_nom_temei to public;
create public synonym syn_sal_nom_tipautorizatie for contafin_oracle.sal_nom_tipautorizatie;
grant select on syn_sal_nom_tipautorizatie to public;
grant references on syn_sal_nom_tipautorizatie to public;
create public synonym syn_sal_nom_tip_spor for contafin_oracle.sal_nom_tip_spor;
grant select on syn_sal_nom_tip_spor to public;
grant references on syn_sal_nom_tip_spor to public;
create public synonym syn_sal_nom_tip_norme for contafin_oracle.sal_nom_tip_norme;
grant select on syn_sal_nom_tip_norme to public;
grant references on syn_sal_nom_tip_norme to public;
create public synonym syn_sal_nom_stari_ctr for contafin_oracle.sal_nom_stari_ctr;
grant select on syn_sal_nom_stari_ctr to public;
grant references on syn_sal_nom_stari_ctr to public;
create public synonym syn_sal_nom_durata_munca for contafin_oracle.sal_nom_durata_munca;
grant select on syn_sal_nom_durata_munca to public;
grant references on syn_sal_nom_durata_munca to public;
create public synonym syn_sal_nom_repartizare_munca for contafin_oracle.sal_nom_repartizare_munca;
grant select on syn_sal_nom_repartizare_munca to public;
grant references on syn_sal_nom_repartizare_munca to public;
create public synonym syn_sal_nom_intervale_munca for contafin_oracle.sal_nom_intervale_munca;
grant select on syn_sal_nom_intervale_munca to public;
grant references on syn_sal_nom_intervale_munca to public;
create public synonym syn_sal_cor for contafin_oracle.sal_cor;
grant select on syn_sal_cor to public;
grant references on syn_sal_cor to public;
create public synonym syn_sal_actualizare_cor for contafin_oracle.sal_actualizare_cor;
grant select on syn_sal_actualizare_cor to public;
grant references on syn_sal_actualizare_cor to public;
create public synonym syn_sal_nom_intervale_munca for contafin_oracle.sal_nom_intervale_munca;
grant select on syn_sal_nom_intervale_munca to public;
grant references on syn_sal_nom_intervale_munca to public;
CREATE PUBLIC SYNONYM SYN_ATAS_ATASAMENTE FOR CONTAFIN_ORACLE.ATAS_ATASAMENTE;
GRANT SELECT ON SYN_ATAS_ATASAMENTE TO PUBLIC;
GRANT REFERENCES ON SYN_ATAS_ATASAMENTE TO PUBLIC;
CREATE PUBLIC SYNONYM SYN_ATAS_REFERINTE FOR CONTAFIN_ORACLE.ATAS_REFERINTE;
GRANT SELECT ON SYN_ATAS_REFERINTE TO PUBLIC;
GRANT REFERENCES ON SYN_ATAS_REFERINTE TO PUBLIC;
create public synonym pack_update for pack_update;
grant execute on pack_update to public;
CREATE PUBLIC SYNONYM PACK_UTILS FOR PACK_UTILS;
GRANT EXECUTE ON PACK_UTILS TO PUBLIC;
CREATE PUBLIC SYNONYM SYN_NOM_CODURI_CAEN FOR CONTAFIN_ORACLE.NOM_CODURI_CAEN;
GRANT SELECT ON SYN_NOM_CODURI_CAEN TO PUBLIC;
GRANT REFERENCES ON SYN_NOM_CODURI_CAEN TO PUBLIC;
--------------------------------------------------
DROP PUBLIC SYNONYM SYN_NOM_JUDETE;
CREATE PUBLIC SYNONYM SYN_NOM_JUDETE FOR CONTAFIN_ORACLE.NOM_JUDETE;
GRANT SELECT ON SYN_NOM_JUDETE TO PUBLIC;
GRANT REFERENCES ON SYN_NOM_JUDETE TO PUBLIC;
DROP PUBLIC SYNONYM SYN_NOM_LOCALITATI;
CREATE PUBLIC SYNONYM SYN_NOM_LOCALITATI FOR CONTAFIN_ORACLE.NOM_LOCALITATI;
GRANT SELECT ON SYN_NOM_LOCALITATI TO PUBLIC;
GRANT REFERENCES ON SYN_NOM_LOCALITATI TO PUBLIC;
DROP PUBLIC SYNONYM SYN_VNOM_JUDETE;
CREATE PUBLIC SYNONYM SYN_VNOM_JUDETE FOR CONTAFIN_ORACLE.VNOM_JUDETE;
GRANT SELECT ON SYN_VNOM_JUDETE TO PUBLIC;
DROP PUBLIC SYNONYM SYN_VNOM_LOCALITATI;
CREATE PUBLIC SYNONYM SYN_VNOM_LOCALITATI FOR CONTAFIN_ORACLE.VNOM_LOCALITATI;
GRANT SELECT ON SYN_VNOM_LOCALITATI TO PUBLIC;
DROP PUBLIC SYNONYM SYN_VNOM_TARI;
CREATE PUBLIC SYNONYM SYN_VNOM_TARI FOR CONTAFIN_ORACLE.VNOM_TARI;
GRANT SELECT ON SYN_VNOM_TARI TO PUBLIC;
DROP PUBLIC SYNONYM SYN_PACK_DEF_CO;
CREATE PUBLIC SYNONYM SYN_PACK_DEF_CO FOR CONTAFIN_ORACLE.PACK_DEF_CO;
GRANT EXECUTE ON SYN_PACK_DEF_CO TO PUBLIC;
---------------------------------------------------
DROP TYPE CONTAFIN_ORACLE.CONTRACT_M;
DROP TYPE CONTAFIN_ORACLE.SAL_CONTRACT_M;
CREATE OR REPLACE TYPE CONTAFIN_ORACLE.SAL_CONTRACT_M AS OBJECT
(
variabila varchar2(5),
valoare VARCHAR2(1000)
);
/
grant execute on CONTAFIN_ORACLE.SAL_CONTRACT_M to PUBLIC;
CREATE OR REPLACE TYPE CONTAFIN_ORACLE.CONTRACT_M IS TABLE OF sal_contract_m;
/
grant execute on CONTAFIN_ORACLE.CONTRACT_M to PUBLIC;
--------------------------------------------------------
DROP PUBLIC SYNONYM CONTRACT_M;
CREATE PUBLIC SYNONYM CONTRACT_M FOR CONTAFIN_ORACLE.CONTRACT_M;
GRANT EXECUTE ON CONTRACT_M TO PUBLIC
DROP PUBLIC SYNONYM SAL_CONTRACT_M;
CREATE PUBLIC SYNONYM SAL_CONTRACT_M FOR CONTAFIN_ORACLE.SAL_CONTRACT_M;
GRANT EXECUTE ON SAL_CONTRACT_M TO PUBLIC
DROP PUBLIC SYNONYM SAL_RED;
CREATE PUBLIC SYNONYM SAL_RED FOR CONTAFIN_ORACLE.SAL_RED;
GRANT EXECUTE ON SAL_RED TO PUBLIC;
DROP PUBLIC SYNONYM SAL_CAMPURI_RED;
CREATE PUBLIC SYNONYM SAL_CAMPURI_RED FOR CONTAFIN_ORACLE.SAL_CAMPURI_RED;
GRANT EXECUTE ON SAL_CAMPURI_RED TO PUBLIC;
DROP PUBLIC SYNONYM TABSTERS;
CREATE PUBLIC SYNONYM TABSTERS FOR CONTAFIN_ORACLE.TABSTERS;
GRANT EXECUTE ON TABSTERS TO PUBLIC;
DROP PUBLIC SYNONYM SAL_TABELESTERS;
CREATE PUBLIC SYNONYM SAL_TABELESTERS FOR CONTAFIN_ORACLE.SAL_TABELESTERS;
GRANT EXECUTE ON SAL_TABELESTERS TO PUBLIC;
DROP PUBLIC SYNONYM FF_SUME;
CREATE PUBLIC SYNONYM FF_SUME FOR CONTAFIN_ORACLE.FF_SUME;
GRANT EXECUTE ON FF_SUME TO PUBLIC;
DROP PUBLIC SYNONYM FF_PERSINTRET;
CREATE PUBLIC SYNONYM FF_PERSINTRET FOR CONTAFIN_ORACLE.FF_PERSINTRET;
GRANT EXECUTE ON FF_PERSINTRET TO PUBLIC;
DROP PUBLIC SYNONYM VANZARI_DETALII_TAB;
CREATE PUBLIC SYNONYM VANZARI_DETALII_TAB FOR CONTAFIN_ORACLE.VANZARI_DETALII_TAB;
GRANT EXECUTE ON VANZARI_DETALII_TAB TO PUBLIC;
DROP PUBLIC SYNONYM PIVOT_TABLE;
CREATE PUBLIC SYNONYM PIVOT_TABLE FOR CONTAFIN_ORACLE.PIVOT_TABLE;
GRANT EXECUTE ON PIVOT_TABLE TO PUBLIC;
DROP PUBLIC SYNONYM tabinchideretva;
CREATE PUBLIC SYNONYM tabinchideretva FOR CONTAFIN_ORACLE.tabinchideretva;
GRANT EXECUTE ON tabinchideretva TO PUBLIC;
DROP PUBLIC SYNONYM tabelavaloritaguri;
CREATE PUBLIC SYNONYM tabelavaloritaguri FOR CONTAFIN_ORACLE.tabelavaloritaguri;
GRANT EXECUTE ON tabelavaloritaguri TO PUBLIC;
DROP PUBLIC SYNONYM vanzari_detalii_tab;
CREATE PUBLIC SYNONYM vanzari_detalii_tab FOR CONTAFIN_ORACLE.vanzari_detalii_tab;
GRANT EXECUTE ON vanzari_detalii_tab TO PUBLIC;
DROP PUBLIC SYNONYM randinchideretva;
CREATE PUBLIC SYNONYM randinchideretva FOR CONTAFIN_ORACLE.randinchideretva;
GRANT EXECUTE ON randinchideretva TO PUBLIC;
DROP PUBLIC SYNONYM PIVOT_ROW;
CREATE PUBLIC SYNONYM PIVOT_ROW FOR CONTAFIN_ORACLE.PIVOT_ROW;
GRANT EXECUTE ON PIVOT_ROW TO PUBLIC;
DROP PUBLIC SYNONYM SERVER_INFO;
CREATE PUBLIC SYNONYM SERVER_INFO FOR CONTAFIN_ORACLE.SERVER_INFO;
GRANT SELECT,UPDATE ON SERVER_INFO TO PUBLIC;
DROP PUBLIC SYNONYM PACK_UTILS;
CREATE PUBLIC SYNONYM PACK_UTILS FOR CONTAFIN_ORACLE.PACK_UTILS;
GRANT EXECUTE ON PACK_UTILS TO PUBLIC;
DROP PUBLIC SYNONYM PACK_UTILS_FILE;
CREATE PUBLIC SYNONYM PACK_UTILS_FILE FOR CONTAFIN_ORACLE.PACK_UTILS_FILE;
GRANT EXECUTE ON PACK_UTILS_FILE TO PUBLIC;
create public synonym pack_roartvai for contafin_oracle.pack_roartvai;
grant execute on pack_roartvai to public;
create or replace public synonym syn_nom_tipapatrid for contafin_oracle.nom_tipapatrid;
GRANT SELECT ON syn_nom_tipapatrid TO PUBLIC;
grant references on syn_nom_tipapatrid to PUBLIC;
create or replace public synonym syn_vnom_um_iso for contafin_oracle.vnom_um_iso;
grant select, references on syn_vnom_um_iso to public;
grant select, references on contafin_oracle.nom_um_iso to public;
create public synonym rtvai_agenti for contafin_oracle.rtvai_agenti;
create public synonym rtvai_istoric for contafin_oracle.rtvai_istoric;
grant select on rtvai_agenti to public;
grant select on rtvai_istoric to public;
--------------------------------------------------------
GRANT ALL ON DIRECTORY DMPDIR TO PUBLIC;
GRANT EXECUTE ON UTL_FILE TO PUBLIC;
GRANT EXECUTE ON UTL_INADDR TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_TCP TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_SMTP TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_HTTP TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_MAIL TO CONTAFIN_ORACLE;
grant execute on dbms_lock to public;
---------------------------------------------------------
-----------------------------------
BEGIN
DBMS_NETWORK_ACL_ADMIN.DROP_ACL(acl => 'roaupdate.xml');
END;
/
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl => 'roaupdate.xml',
description => 'Permissions to send mail',
principal => 'CONTAFIN_ORACLE',
is_grant => true,
privilege => 'connect');
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl => 'roaupdate.xml',
principal => 'CONTAFIN_ORACLE',
is_grant => true,
privilege => 'resolve');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl => 'roaupdate.xml',
host => '*');
END;
/
COMMIT;
SPOOL OFF
disconnect
quit

View File

@@ -0,0 +1,25 @@
REINSTALARE BAZA DE DATE DIN DUMP
1. Creare server scripturi
2. Recreare sys.vauth_serii
create or replace view sys.vauth_serii 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;
3. Instalare utlmail
@d:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\utlmail.sql
@d:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\prvtmail.plb
4. Completare customer_id in sys.auth_detalii
5. Verificare contafin_oracle.server_info
Schimbare cai roaupdate, parole sys, contafin_oracle, updprereq = 0
6. syn_new_schema_job

View File

@@ -0,0 +1,4 @@
sqlplus.exe /nolog @roa.sql
call import_co.bat
call post_co.bat
call import_firma.bat

View File

@@ -0,0 +1,108 @@
set verify off
PROMPT 'CREATI DIRECTORUL [C:\DMPDIR\] PENTRU IMPORTUL DUMP-URILOR SI COPIATI FISIERELE CONTAFIN_ORACLE.DMP SI FIRMANOUA.DMP!'
ACCEPT systemPassword CHAR PROMPT 'Specificati parola pentru SYSTEM>'
PROMPT
ACCEPT oraSID CHAR PROMPT 'Specificati SID-ul bazei de date>'
PROMPT
ACCEPT dataDirectory CHAR PROMPT 'Specificati directorul unde se va instala baza de date (fara \ la sfarsit)>'
PROMPT
ACCEPT coPassword CHAR PROMPT 'Specificati parola pentru Contafin Oracle>'
PROMPT
ACCEPT fnName CHAR PROMPT 'Specificati numele pentru firma noua>'
PROMPT
ACCEPT fnPassword CHAR PROMPT 'Specificati parola pentru &&fnName>'
PROMPT
connect SYSTEM/&&systemPassword@&&oraSID
PROMPT se creeaza tablespace ROA
@CreateDB.sql
PROMPT se creeaza userul CONTAFIN_ORACLE
@CreateCO.sql
PROMPT se creeaza userul <FIRMA>
@CreateFN.sql
disconnect
-- se importa scripturi pe sys
connect SYS/&&systemPassword@&&oraSID as sysdba
@sys_2006_06_26_01.sql
@sys_2007_03_26_01.sql
@sys_2007_12_11_01.sql
@sys_2009_09_15_01_LICENTA.sql
@sys_2012_06_19_01_LOG.sql
@sys_2012_06_21_01_FIRMA.sql
@sys_2012_06_21_02_PACK_AUTH.sql
@sys_2013_01_23_01_PACK_AUTH.sql
@sys_2013_01_23_01_PACK_AUTH.sql
@sys_2013_01_23_02.sql
@sys_2013_06_17_01_COMUN.sql
@sys_2013_07_18_01_AUTH_PACK.sql
@sys_2013_07_24_01.sql
@sys_2013_08_29_01_AUTH_PACK.sql
@sys_2014_07_10_01_FIRMA.sql
@sys_2014_07_24_01.sql
@sys_2014_08_18_01.sql
@sys_2014_08_18_02_UPDATE_UPDATESQLPLUS.sql
@sys_2014_08_18_03_UPDATE.sql
@sys_2014_09_04_01_FIRMA.sql
@sys_2014_10_10_01_DREPTURI.sql
@sys_2014_10_21_01_FIRMA.sql
@sys_2014_11_06_01_FIRMA.sql
@sys_2017_02_28_01_SCHEMA.sql
@sys_2020_04_07_01_SCHEMA.sql
@sys_2020_07_01_01_AUTH_PACK.sql
@sys_2021_12_08_01_COMUN.sql
@sys_2023_05_03_01_COMUN.sql
@sys_2024_02_22_01_COMUN.sql
@sys_2025_09_24_03_EXECUTESCRIPTOS.sql
@sys_2026_01_14_01_AUTH_PACK.sql
--------------------------------------------------
create or replace view vauth_serii 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
/
--------------------------------------------------
disconnect
spool import_co.bat
rem imp SYSTEM/&&systemPassword@&&oraSID fromuser=CONTAFIN_ORACLE touser=CONTAFIN_ORACLE file=contafin_oracle.dmp log=contafin_oracle.log
PROMPT impdp SYSTEM/&&systemPassword@&&oraSID directory=DMPDIR dumpfile=contafin_oracle.dmp logfile=contafin_oracle.log
spool off
spool post_co.bat
PROMPT sqlplus SYSTEM/&&systemPassword@&&oraSID @postdbcreation.sql
spool off
spool import_firma.bat
REM imp SYSTEM/&&systemPassword@&&oraSID fromuser=firmanoua touser=&&fnName file=firmanoua.dmp log=&&fnName.log
PROMPT impdp SYSTEM/&&systemPassword@&&oraSID directory=DMPDIR dumpfile=firmanoua.dmp logfile=&&fnName..log remap_schema=firmanoua:&&fnName
spool off
quit

View File

@@ -0,0 +1,2 @@
sqlplus.exe /nolog @roa_firma.sql
call import_firma.bat

View File

@@ -0,0 +1,26 @@
set verify off
ACCEPT systemPassword CHAR PROMPT 'Specificati parola pentru SYSTEM>'
PROMPT
ACCEPT oraSID CHAR PROMPT 'Specificati SID-ul bazei de date>'
PROMPT
ACCEPT fnName CHAR PROMPT 'Specificati numele pentru firma noua>'
PROMPT
ACCEPT fnPassword CHAR PROMPT 'Specificati parola pentru &&fnName>'
PROMPT
connect SYSTEM/&&systemPassword@&&oraSID
@CreateFN.sql
disconnect
spool import_firma.bat
PROMPT impdp SYSTEM/&&systemPassword@&&oraSID directory=DMPDIR dumpfile=firmanoua.dmp logfile=&&fnName.log remap_schema=firmanoua:&&fnName
spool off
quit

View File

@@ -0,0 +1,570 @@
drop table AUTH_DETALII;
drop package body GEN_SERII;
drop package GEN_SERII;
drop table gen_seriiprog;
drop table gen_clienti;
drop table gen_programe;
drop view VGEN_SERIIPROG;
drop view VGEN_clienti;
drop view VGEN_PROGRAME;
drop view contafin_oracle.vdef_programe_serii;
prompt
prompt Creare tabela AUTH_DETALII
prompt =========================
prompt
-- Create table
create table AUTH_DETALII
(
DETALII VARCHAR2(15) not null
)
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 16K
minextents 1
maxextents unlimited
);
prompt
prompt Creare tabela AUTH_SERII
prompt ========================
prompt
create table AUTH_SERII
(
ID_SERIE NUMBER(5) not null,
ID_PROGRAM NUMBER(2) not null,
SERIE RAW(128) not null,
STERS NUMBER(1) default 0 not null,
DATAORA DATE default sysdate not null,
ID_UTIL NUMBER(5) not null,
DATAORAS DATE,
ID_UTILS NUMBER(5)
)
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 16K
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table AUTH_SERII
add constraint PK_AUTH_SERII primary key (ID_SERIE)
using index
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
prompt
prompt Creare secventa SEQ_AUTH_SERII
prompt ==============================
prompt
create sequence SEQ_AUTH_SERII
minvalue 1
maxvalue 99999999999999999
start with 1
increment by 1
nocache;
prompt
prompt Creare package AUTH_PACK
prompt ========================
prompt
create or replace package 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 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;
/
prompt
prompt Creare package body AUTH_PACK
prompt =============================
prompt
create or replace package body AUTH_PACK is
procedure verifica_program is
v_program VARCHAR2(256);
v_modul VARCHAR2(256);
v_sid NUMBER(16);
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';
IF v_program not in ('PLSQLDEV.EXE', 'ROASTART.EXE') THEN
IF v_program <> v_modul THEN
RAISE_APPLICATION_ERROR(-20000, 'Acces interzis!');
END IF;
auth_pack.verifica_licenta(v_sid, v_program);
END IF;
end;
-------------------------------------------------------------------------------------
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
RAISE_APPLICATION_ERROR(-20000, 'Acces interzis!');
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_utilizatori := auth_pack.decripteaza_nr_util(v_seriec);
v_data_val := auth_pack.decripteaza_data_val(v_seriec, v_zi);
IF v_data_val >= SYSDATE THEN
IF v_utilizatori > 0 THEN
SELECT COUNT(*)
INTO v_nr_util
FROM v$session
WHERE UPPER(TRIM(PROGRAM)) = v_program
AND SID != v_sid;
IF v_nr_util >= v_utilizatori THEN
RAISE_APPLICATION_ERROR(-20000,
'Ati depasit numarul de licente (' ||
v_utilizatori || ') pentru programul ' ||
v_nume_program || ' !');
END IF;
ELSE
RAISE_APPLICATION_ERROR(-20000,
'Seria introdusa pentru acest program nu este corecta!');
END IF;
ELSE
RAISE_APPLICATION_ERROR(-20000,
'Licenta pentru acest program a expirat!');
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 VARCHAR2(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 := 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');
dbms_obfuscation_toolkit.DES3Decrypt(input => v_serie,
key => utl_raw.cast_to_raw(v_cheie),
decrypted_data => v_serieval);
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;
/
prompt
prompt Creare trigger LOGON_AUDIT_TRIGGER
prompt ==================================
prompt
CREATE OR REPLACE TRIGGER logon_audit_trigger
AFTER LOGON ON DATABASE
BEGIN
auth_pack.verifica_program();
DBMS_APPLICATION_INFO.SET_CLIENT_INFO (sys_context('userenv', 'ip_address'));
/* IF USER NOT IN ('SYSMAN', 'DBSNMP') THEN
insert into stats$user_log
values
(user,
sys_context('USERENV', 'SESSIONID'),
sys_context('USERENV', 'HOST'),
null,
null,
null,
sysdate,
to_char(sysdate, 'hh24:mi:ss'),
null,
null,
null,
null,
null,
null,
sys_context('userenv', 'ip_address'));
update stats$user_log
set first_action = UPPER((select action
from v$session
where sys_context('USERENV', 'SESSIONID') =
audsid))
where sys_context('USERENV', 'SESSIONID') = session_id;
--***************************************************
-- Update the last program accessed
-- ***************************************************
update stats$user_log
set first_program = UPPER((select program
from v$session
where sys_context('USERENV', 'SESSIONID') =
audsid))
where sys_context('USERENV', 'SESSIONID') = session_id;
-- ***************************************************
-- Update the last module accessed
-- ***************************************************
update stats$user_log
set first_module = UPPER((select module
from v$session
where sys_context('USERENV', 'SESSIONID') =
audsid))
where sys_context('USERENV', 'SESSIONID') = session_id;
END IF;*/
END;
/
prompt
prompt Creare view VAUTH_SERII
prompt =======================
prompt
create or replace view vauth_serii 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
/
CREATE PUBLIC SYNONYM SYN_VDEF_PROGRAME FOR CONTAFIN_ORACLE.VDEF_PROGRAME;
GRANT SELECT ON SYN_VDEF_PROGRAME TO PUBLIC;
GRANT REFERENCES ON SYN_VDEF_PROGRAME TO PUBLIC;
create synonym contafin_oracle.pack_autentificare for sys.auth_pack;
grant execute on contafin_oracle.pack_autentificare to public;
GRANT EXECUTE ON AUTH_PACK TO CONTAFIN_ORACLE;
create synonym contafin_oracle.vdef_programe_serii for sys.vauth_serii;

View File

@@ -0,0 +1,26 @@
------------------------------------------------------
-- AUTH_PACK.VERIFICA_PROGRAM (START.EXE)
-- Creat de marius.mutu pe 11/12/2007
------------------------------------------------------
create or replace view vauth_serii 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;
/
CREATE OR REPLACE TRIGGER logon_audit_trigger
AFTER LOGON ON DATABASE
BEGIN
DBMS_APPLICATION_INFO.SET_CLIENT_INFO(sys_context('userenv',
'ip_address'));
auth_pack.verifica_program();
END;
/

View File

@@ -0,0 +1 @@
alter table AUTH_SERII modify ID_PROGRAM NUMBER(5);

View File

@@ -0,0 +1,41 @@
prompt
prompt table INFO
prompt ================================
prompt
create table INFO
(
INFO CLOB,
DATAORA TIMESTAMP(6) default SYSTIMESTAMP,
LOCATIA VARCHAR2(200) NULL
);
prompt
prompt PROCEDURE pINFO
prompt ================================
prompt
CREATE OR REPLACE PROCEDURE 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==
/
commit;

View File

@@ -0,0 +1,126 @@
prompt
prompt procedure NewSchema
prompt ================================
prompt
create or replace procedure NewSchema wrapped
a000000
b2
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
7
ce0 483
Ewb+02W/Ux+ctMgwkXYISVy+8K8wg+0rea4FfC8ZFz8CAiG+jXs2igUvt2hd8gDxV8du+09R
UOzRCZqnYYSQzgiYVy5aEWvpGOMlhY1PEkK5/8FOY0vdy2wvriQ51poj08SJlFQQuIg6lRo9
F5s0x6LLI4nBRhxqAh9FTMgHbX9yVsAt3+778nunbHGcQp8pYB6K0tKgEFKR38cf1mk5VrEJ
6Q36xAzmEnFRNOeI7U3jtC8WuX+VOLoacEGGzVCBEmg3JbOr+YgLx6GfC1/9YTUELEqXSbcy
RgFoMFwl8d18gkBba10pJgbKJ31PXKx1xrlRIbMC1bkBG9nEJ0XneckByPwwJvona+tF934u
oWV36wGbyH2ovg/Bpm1ES5AFEyIwFNIQyAFEDfRqZDdpAn+1WfTm20rsDsYXwQ/QKTPLV5iK
L8UCBQs3nqKueaH7wmU/KIGENKuW+mW8LB6VehwRZkSEzgmuiwMh3LE9YkTi0BJO9TPIXyot
a8bmgFgaOmge9CuIA//Hi1my3WJUa+EVTB9+/7hc5i6nl8QcgcyrrpyRfBPcgaaQbu1HuxyV
mD1jI3+6Y1qwqBATJXWPSS4GUpsobY8gUSz9PNDMLH3uxXmDuwL5AyXr1Go4l+jekN5lq+77
flQeIxmgjC7oqk276oybdFbS4PdH6C4+D31S6CpB4hMutCd73Bv6067mYxA0ur87ghfXvp/u
Dg2SspwyoLfukdyZoYpz58KYSC8xWX8sbK5GKIdtwLEfCbPLa77hcUJrhvWfcanNHz9+P5U9
zKAio3hqftplh3sGGLyKQEaKOcSSWtqd8padjP4g/zlYqcZxfLSk/mH01DDfUSAnrwwfVmxd
TOhjUwL+g1y/P0j+Cu7HZwRpTgdGa01KaqGchvru2HJBk53cVUSVwiT32zSKSQ8HxDNL/ywn
S8zMFfhEJ8FDpM6D3k1lliLa50QOZk+hWfAVOFs6j0ZqRcuiuNlSVvR1Y1OlR/M0iyI7Pj8A
5TfgCekkor8gZwwUg+IWtd3GdUa6meRfJn8g1CQ370F05daH3CrOKamJud9/5hSG+6JH/qRB
eeeW5hrIO5bBMVOaqP2zzzyDoP8jV37YlgpPxgYWE7V6UzGg7q61+zXj5Hk=
/
prompt
prompt procedure NewSchemaPost
prompt ================================
prompt
create or replace procedure NewSchemaPost wrapped
a000000
b2
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
7
980 3f5
dqDiV7hCSWDDu3lWWO+FYFjQhJMwgw0rTK4FfI5Vx6qVEAwV4Scdt+ifWWX0DGJsn8na3TPT
6VzoLpliUQIuTSQ/+VoTGjuiiO8ojWQQzxD/7cYrXv/mdgF2HWKqbSnQm2FawW1j1YTz3Lis
3T/q4we22x2dW1sQ8dSI6RPIyfpEiwcgYKCUg9ccL7NevQZpz/QFfSoqv1C7/u33QPX+ZILd
pWgaYcjLndGilohpjqj0Wh0JqEhv1BJvfXjThleZrfF0KVHsoBjssF7+YkAI35EkGzV4efOy
1FYHf5n3FDAPsllvSV1USSy24iN93SdEHkqDNp92OKi9KlifCSHOmc+hTSlMgoOSLUyzWxcm
0UAAwHJ/ClyxNv+h4+BZ79s1cL3jyX9uariP1t7Iqzm87Fwd+sAuUKRBIyJp8Bhejr5qgiyO
21KSSoat77cAbPVHcWr6IBhDMenP1mpZfxShrO9RvqtwLtW2RoerWzoNoeTcGsegkbHLiKsj
o1P2WjGkGFjgQ1jytJMTlktO/P4KkvHbJlg7eWPCaxaXtmBDolOBiCJ0eldAr01cIHyUD4lc
rUwccVJMTpjgktWd1bsfTpPMkFltJ5JpjZVe93K5TrBPXCn8OXQdKNRubC8BFp/LPhxr8c1o
N0g4seAnOw3sO9Vrw81oGu/OUyZz1WgbaW4grf/OsntACnI8syYoGG7IWn19R6KBJQfEwrrq
RZ1MT5D0Yl5I5e+4X4S9xJUsxHVCaVaP4sXJpXM/P/is8WNSTW7OIzsN2kfZyQiRNEIpIhBh
cmFucKOGtb7ZsincB2RJVDqFYDViwYg1cqGDSHAME8B1Jb9pF0o5r/j8OCswls1H9bxWTkML
CLUSTvyAkKFu2dV3SGceQHkja2NkF66a/HsNReBj7hMvsPF8HiGVAuFe1IZReSQMhEPUbkn4
2K/z81eA3qu27d0R4shfmMY3ku8l/msZJ6WXsoyHrhKsBva6nYm9rSP+H3W7f+8=
/
prompt
prompt function NewSchemaProgress
prompt ================================
prompt
create or replace function 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=
/
prompt
prompt sinonime, drepturi
prompt ================================
prompt
create or replace directory DMPDIR as 'C:\DMPDIR';
CREATE PUBLIC SYNONYM SYN_NEWSCHEMA FOR NEWSCHEMA;
GRANT EXECUTE ON SYN_NEWSCHEMA TO PUBLIC;
CREATE PUBLIC SYNONYM SYN_NEWSCHEMAPROGRESS FOR NEWSCHEMAPROGRESS;
GRANT EXECUTE ON SYN_NEWSCHEMAPROGRESS TO PUBLIC;
CREATE PUBLIC SYNONYM SYN_NEWSCHEMAPOST FOR NEWSCHEMAPOST;
GRANT EXECUTE ON SYN_NEWSCHEMAPOST TO PUBLIC;
commit;

View File

@@ -0,0 +1,109 @@
prompt
prompt package AUTH_PACK
prompt ================================
prompt
create or replace package AUTH_PACK wrapped
a000000
b2
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
9
4b0 1be
CtprDYbYCTb/dB7mvvqXyFlHLtAwg42Jr0gCyi/pmD8Pr8KWKeW66l4EjcOzX3ATxO61tVHW
tGbeN3cRZu/Hi/9EcTW8aqnhbqRzlx1rxAUu406LF2PpUcBG4IAl7aePrSEvR0zuThpsq5ly
mJqg04Pnhot4Gh8tqhdAj8sUgA6xEupjzvpYqeG3t+ZX6fIv+Z5dEi6Cny1jIb2OU/vk1Mf3
mREyXL9vBkYVDcbbV1OgXi7uq//8vYmFGhfC320hcEwr5nkBUNC9YsN+RoQ2LPMl2u87h1+0
uObe8xwyl0wvo4D6AmaVUKiYlfRqZun7IF+k7ARBB62iaxTtYdrlVoYPCnL/KoKsfQKPR+cl
q2FMDRuaShVl2jUqseLIbXmdPjhJevXUAHvFo60GsEwEciE/ArUWwpkXuBlSeh4F5/DyJLC5
KZmapdUK
/
create or replace package body AUTH_PACK wrapped
a000000
b2
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
b
38c8 f1d
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
/

View File

@@ -0,0 +1,109 @@
prompt
prompt package AUTH_PACK
prompt ================================
prompt
create or replace package AUTH_PACK wrapped
a000000
b2
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
9
4b0 1be
CtprDYbYCTb/dB7mvvqXyFlHLtAwg42Jr0gCyi/pmD8Pr8KWKeW66l4EjcOzX3ATxO61tVHW
tGbeN3cRZu/Hi/9EcTW8aqnhbqRzlx1rxAUu406LF2PpUcBG4IAl7aePrSEvR0zuThpsq5ly
mJqg04Pnhot4Gh8tqhdAj8sUgA6xEupjzvpYqeG3t+ZX6fIv+Z5dEi6Cny1jIb2OU/vk1Mf3
mREyXL9vBkYVDcbbV1OgXi7uq//8vYmFGhfC320hcEwr5nkBUNC9YsN+RoQ2LPMl2u87h1+0
uObe8xwyl0wvo4D6AmaVUKiYlfRqZun7IF+k7ARBB62iaxTtYdrlVoYPCnL/KoKsfQKPR+cl
q2FMDRuaShVl2jUqseLIbXmdPjhJevXUAHvFo60GsEwEciE/ArUWwpkXuBlSeh4F5/DyJLC5
KZmapdUK
/
create or replace package body AUTH_PACK wrapped
a000000
b2
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
b
38cb f25
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
KLqPlMY=
/

View File

@@ -0,0 +1,8 @@
prompt
prompt drepturi DMPDIR pentru CONTAFIN_ORACLE
prompt ================================
prompt
grant all on directory DMPDIR to CONTAFIN_ORACLE;
grant exp_full_database to CONTAFIN_ORACLE;
grant imp_full_database to CONTAFIN_ORACLE;
grant select on dba_datapump_jobs to CONTAFIN_ORACLE;

View File

@@ -0,0 +1,6 @@
-------------------------------------------------
-- CREAT DE MARIUS.MUTU PE 17.06.2013
-------------------------------------------------
-- DREPTURI PENTRU CREAREA DIRECTOARELOR UPD_ROAUPDATE
grant create any directory to CONTAFIN_ORACLE;

View File

@@ -0,0 +1,109 @@
prompt
prompt package AUTH_PACK
prompt ================================
prompt
create or replace package AUTH_PACK wrapped
a000000
b2
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
9
4b0 1be
CtprDYbYCTb/dB7mvvqXyFlHLtAwg42Jr0gCyi/pmD8Pr8KWKeW66l4EjcOzX3ATxO61tVHW
tGbeN3cRZu/Hi/9EcTW8aqnhbqRzlx1rxAUu406LF2PpUcBG4IAl7aePrSEvR0zuThpsq5ly
mJqg04Pnhot4Gh8tqhdAj8sUgA6xEupjzvpYqeG3t+ZX6fIv+Z5dEi6Cny1jIb2OU/vk1Mf3
mREyXL9vBkYVDcbbV1OgXi7uq//8vYmFGhfC320hcEwr5nkBUNC9YsN+RoQ2LPMl2u87h1+0
uObe8xwyl0wvo4D6AmaVUKiYlfRqZun7IF+k7ARBB62iaxTtYdrlVoYPCnL/KoKsfQKPR+cl
q2FMDRuaShVl2jUqseLIbXmdPjhJevXUAHvFo60GsEwEciE/ArUWwpkXuBlSeh4F5/DyJLC5
KZmapdUK
/
create or replace package body AUTH_PACK wrapped
a000000
b2
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
b
38d8 f29
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
zq61HfBNBB4=
/

View File

@@ -0,0 +1,20 @@
GRANT EXECUTE ON dbms_scheduler TO CONTAFIN_ORACLE;
grant create any job to CONTAFIN_ORACLE;
grant create external job to CONTAFIN_ORACLE;
BEGIN
DBMS_RULE_ADM.grant_system_privilege(
privilege => DBMS_RULE_ADM.create_rule_set_obj,
grantee => 'CONTAFIN_ORACLE',
grant_option => FALSE);
DBMS_RULE_ADM.grant_system_privilege(
privilege => DBMS_RULE_ADM.create_evaluation_context_obj,
grantee => 'CONTAFIN_ORACLE',
grant_option => FALSE);
DBMS_RULE_ADM.grant_system_privilege(
privilege => DBMS_RULE_ADM.create_rule_obj,
grantee => 'CONTAFIN_ORACLE',
grant_option => FALSE);
END;
/

View File

@@ -0,0 +1,115 @@
prompt
prompt Modificare package AUTH_PACK
prompt ============================
prompt
create or replace package AUTH_PACK wrapped
a000000
b2
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
9
506 1c6
ix9Hsmg5Tf3Okokvs7pOGDEGZGUwg42JDEhGfC+iA0FeMFj3wpenXMZIDpR8TXOhIf25qm0h
fL3JZgWrNtP5d8e+EYLW+UbLlDaalgMhjr7Z6Sb4YnJHt2C2BFyi6KchViU9f18uyTDK8Dxq
9nF2iOkrMXw/yp0mzgpx2u9LuTeaZC73wnSv4hZL8mxWs3fiU6FPPTDstzLAi5GOMN70gM9a
+3RGy29Jgsx+t6H+cSrTv+4ZWubF8pHwj96mx98/wkN6wAcBuluXQzWq83dp+GAabe72B6Cv
J663XMtbdxzuK+hxlIwozxrIY1QZfrFXEoIMf8pDb2sY90IwQAR3WccQgI3Tz+SS8XFcLexB
BLkYPaNsYXce9wVhSyKQ2QknPhT0zSQBO0b9kFMFSsLMM87NSa+ZLofuiIA/0wJ9YWqT0e+g
i85DKpYkSJdXOw==
/
prompt
prompt Modificare package body AUTH_PACK
prompt =================================
prompt
create or replace package body AUTH_PACK wrapped
a000000
b2
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
b
3bfc faf
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
/

View File

@@ -0,0 +1,83 @@
prompt
prompt NewSchema
prompt ================================
prompt
create or replace procedure NewSchema wrapped
a000000
1
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
7
cd0 47f
XXSAHf/uoPEHO/9IjItNTH0bYxYwg+0rTCATfI5Vx6oCXN7AZgFcg+07/BRbbtTVcMlHgyKo
7FOICeZlWisB/NCalTaevXkJvZTzXYXBQfgpHh6eSGnrH46t/Pr9tStOS++ycgTMEw4PogTv
ZtEjSX1NgHunuy9UV7wADgYwfwZ96dE86Ucdodl8U3m2xlbXfW7++HO5Q/QZRy7Sz+73bmMY
/FEg6ucoWKZCubbPk/N/JklYhBSM+GYCwa0Z0nm/hVajq6NqnXBZG2mCYBM4J0Zh7hrPZZNt
/YNf6myyNb2RYPg3fCM/4gTndIxO8i9OtEynxTnS7K1Yl5s75dHmE96IScVxPqDcXAnq8Tt/
GBvFh+nQ9+wOBy7LfOOA/scS2lHLm0ycGMKsRYXgeI44vX+1X/c2ooQuj+tObWSwMKoHoy4j
L29oHNOuI88W/hoWMGPNQU3GuAC6a1zOfF4pZXbVFFf7zvLXnG0UWd89YqF5HzOn+gZ/7D6R
JagIYia3i2UXhdoBRyOWWOsqZ7tN7gwYdXlet/NUjWmQY5s7gBDsRgie8B9S2NRwXeB4nVvj
EynTjdE8vVPr05phIYuloVG4b3PWZs79JrCnOqj8CyqTSXkFkOUk9pTEHMtM33nHG7P1nltL
ATzXwnmEBVm1ogDYsEOIWlzsYG1TYpvD12U8fBmgE0syem2Ls57c5mMQNBOYPFgDi3GYuGe6
c0DZe4MxkbzbAhTSP6ZYHQWZWWb0mfEXaGPcW4IFQ+YGHBWt+9h2msIjsh9wv8ZKzWRTexg8
Bx4n4945g/JtD4ZVSONpglOC4cROCtL82lS1i37IvVfb6KsFuCAeEUdvXuQbmXFFd8hxaBdW
lWLPaWQ0v8ftD059dp7hpT9aLxiDVxlDwFetGcFOFcGxpMQmFDFPZ2fcy5iHB7/Lzm4kVAvW
Uc8omXf/l9qlmEk4Hr/53rjUjGW49KkaWgTA3R91foXdUfvtC3xKNtvIX9qSfVV8H5waZIDr
t6KFj1ssdnSR9DbtltsszpGy1w5Ii2sr4sYAy++QpeXWTLno/utR5rT43KgU504RZ3Gx4DE5
v+FnwLM6wPvrEJ0HYVE6fg15jYFpdWle1BH9B34Zx33NYc0/kihI8ZJ+
/
prompt
prompt NewSchemaPost
prompt ================================
prompt
create or replace procedure NewSchemaPost wrapped
a000000
1
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
7
a49 412
S1TTOCsSGk6ASxhiCjWIafBzqg4wgw0rTK4FfI5Vgp0GvGw4+w0CoV7aG1jbY6fT2gOkcDSi
zI3e6/JtETEbdywkqhQuJclRdIWElAXGscFoEuLrRgOmBz7GZ22a4JLtU9e3lcBDl2c2tnbv
S3JsBq82CDeqphIA8WA+6ROoLobHR/6aXxELEXgSZ9s3ni9EBgx3oup3aD9ksU5gqyUZD+mp
7li9eahiP3njh2UOfKLT96saQFOHBL9WUP3T7hayV/F0KRrsSxjssIT+VkAIGxr9towe6OOr
C6fW40Ra02iNHbaVvVc8r8ZGCqt7S4eEXMz93bwHVFrmLhqQLyr5dg8vJyfqnXlztOV91uui
SWocMVJHI1XfN8d2DufrL1IvVOFR3jYXfIr4cJ4ah1u87FyW8QHsDtp6CM8Oq5RsFvUHsCIW
44bSdsbHYBsj5n11vkC3D0nZA23Oq1sm4FoGBAeixyrd8SvF5+18y5sMt84790qzyEx7kRF9
3u7iqAG/FskYjRdlOBd5NDeQ6p0PPbbG3PrYwo0YQBV8bYiNtu6nF85Q/o/nkoxgvK+Rz5NH
GCknu18ebppD608xTFKdcUdOMQghTy4syen5dRdO+IoIxti4MvtAHSjUbpUv6BbAM6Eca/HN
0mfaLY11CfYmyQpsieWQ3HtG0BNond154ekxp4Zfmg4BU5t+AHsINfe2070AeyqMwClqujE7
YlWa/3L/232PXHvMwUDbvZiom5r6QpnXjBu30T7hgFfIuBO1Uk6+WzrTuck6drxVlkhPa5b0
4T0Jlh9pg2hxs2+u1BPV+OsX+HP3tlkM5KqcGhtV5dQ9NgpAS4zlHK7nI/Iln1yrg8MKFhC6
/oe/Acv41v4DB0K5AMRl65XlhSudm7Fk122d3FkGWYdRyfurVUsmAqeH10E0Pe1QTRiNQGQd
bloV2OuOH55ZiNBt6HNWspT9xxy/k9bvZrhA8RRmIzezWaiIv9A5/CxccgfACq/VeE0FYBKs
BtUTnUa9rSP+Hyu2h20=
/

View File

@@ -0,0 +1 @@
GRANT EXECUTE ON UTL_FILE TO PUBLIC;

View File

@@ -0,0 +1,7 @@
prompt
prompt UTL_HTTP
prompt
grant execute on UTL_HTTP to contafin_oracle;
grant execute on UTL_SMTP to contafin_oracle;
exec contafin_oracle.pack_migrare.UpdateVersiune('sys_2014_08_18_01','','SYS');
commit;

View File

@@ -0,0 +1,33 @@
prompt
prompt UpdateSQLPLUS
prompt
create or replace procedure UpdateSQLPLUS wrapped
a000000
1
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
7
2b3 1a9
f6pKgyTHWgwSQY8fo6q7G9gRoJowg5Dxr9xqfHRArf4+zwxJLnzFU3yy9xsZo4kabKFJgY6N
zK84fBTf9GocQdgTPKzorKU+wj+qYapJsYiEhxFGBnMmo7GLNV1RfGsBB+rceeEmrK09Vmt7
qzmlwaUv6Oto31/RkaZ3NqxVFy1R09AppSMhq1/WBBcmm3mjr9c2hehYuwsICZ0rSt2fmd/H
mMJQiUBebYTKYyg+ra7xffLo1C+uHY8tIf9L27s+aU+C8IfNetp6n32al212Ad/XwxMTaBV4
0JK95ch/J5wupD0D5lHCyYDjP7v22XaYrQ/p/HIjLZPq0Nns0h1ps1TKByypPpQ5rpMLUEXJ
MWrISNzpN6QTjyWYzwhho+JB+rWm91tozXKxOqSwVPjuBaNkNZXGFw+a5g5X
/
exec contafin_oracle.pack_migrare.UpdateVersiune('sys_2014_08_18_02_UPDATE_UPDATESQLPLUS','','SYS');
commit;

View File

@@ -0,0 +1,7 @@
prompt
prompt UpdateSQLPLUS
prompt
grant execute on UpdateSQLPLUS to contafin_oracle;
grant execute on UTL_MAIL to contafin_oracle;
exec contafin_oracle.pack_migrare.UpdateVersiune('sys_2014_08_18_03_UPDATE','','SYS');
commit;

View File

@@ -0,0 +1,45 @@
prompt
prompt NewSchema
prompt ================================
prompt
create or replace procedure NewSchemaPost wrapped
a000000
1
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
7
b18 490
E3BkWrZ+YiWKLtIqWyBUI5SJPtswgw0reSDrfC+Lx6qVEAxlwuXNZ+ZiE12t0Q1ainDafooM
jlw1WZFVoJ+p6HMw5PGgobqgr1R36Ag6zz9BwbloGqwL0wGsptWqlzrEm+VaZJzVDzj0FxQ1
j+JyWo+I04xLW65Fjm2CQDyEp2ywonoQf+A7a7p2po0ApA5z9C3kjsTq33xz7nB85xvUY/0K
9DmGC5jwxylwzUV1Ph6O6VqoRVIlhMJYdblYcB8hG1JARAl2iDd5VLJifGtb/wdtYdk/TzaQ
xKF+z4ohSq1gGPEQq7QWHG/bNk8Ja04pr2odITEy+2jHohpRR2CDvS0IJGwsFgNCaHqB/CAe
i2UL33IJ7+MFn3IrKChVUaWSBJVG6VqpFJ4v2eBXQAh8NhMUc1eeDVwkFkH9yPnOFuc3iGRX
6fckP7asnwg0N8FEGdtgrj4TwJrgnnisREjxbrZu3kYhoVqisiseVGqXFAEsfpQCMmtGkLMa
sWtM6vq0FYLbEJmXO1CFIeXdxe7Y0RmFMYFzbbzx2wr3KmNjjGsWl7b/d1mSgRyodB1XRu4a
Y3hUlZwBXP/qritoET9eR53BeEPNmyPMw3NCzNe75cJTlpuVeT+qk428od0wjt3DpTZRdJUZ
XtuMWQiQIn2eBcgmvjx+YYPmA4Mp6B0wxDz5iD0bzG4gXG47eH2Oce3EiKQCDq+hAhqI7S2M
I/zNDI26nCNTO3JKOCX4lpARoGuhl5ZNkgNXlq9CJWDC0BgUf6+e4hgPPy3nDlQVLlxWjx7N
gT0PpQwL2Lr8Ojb8ZcTGoE6w64Etc/nbc1smiDgNtSSwkR1Ft/ADiLOy7mAuIhyo0gRjzdig
Uykrs+Rh/+1zWK0ESofqv21mzgVHR2TqAbySzOS1aHr4mvTV8QpyTZCpK3jYxzhNeDyMnHsf
o5MxaGjRHOxkuRj8m7xTYjjemh4OxY/5wpq7EpiYE+zmXpfA0S9KoSTpzgu52ymYLK/3ZHUS
YN6exkl85/3W26zoxbag9t+Akj7x21QHOE7T814mX2OIW/Y5XXa3w8y5q+kM+qkevPPCVQBK
T6dA5/eKCn43TRS+1ARegq+T4gC+pSiAkmO4L+btd5Ie4DwHYz7eYP92bokMKkKB/Y4X8b4=
/
exec contafin_oracle.pack_migrare.UpdateVersiune('sys_2014_09_04_01_FIRMA.sql','','SYS');
commit;

View File

@@ -0,0 +1,20 @@
------------------------------------------------------
-- view vauth_serii
-- Creat de marius.mutu pe 10/10/2014
------------------------------------------------------
create or replace view vauth_serii 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;
GRANT EXECUTE ON UTL_INADDR TO CONTAFIN_ORACLE;
exec contafin_oracle.pack_migrare.UpdateVersiune('sys_2014_10_10_01_DREPTURI','','SYS');
commit;

View File

@@ -0,0 +1,306 @@
------------------------------------------------------
-- view vauth_serii
-- Creat de marius.mutu pe 21/10/2014
------------------------------------------------------
PROMPT
PROMPT procedure NEWSCHEMA
PROMPT
create or replace procedure 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;
/
PROMPT
PROMPT procedure NEWSCHEMAJOB
PROMPT
create or replace procedure 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;
/
BEGIN
EXECUTE IMMEDIATE 'CREATE PUBLIC SYNONYM SYN_NEWSCHEMAJOB FOR NEWSCHEMAJOB';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON SYN_NEWSCHEMAJOB TO CONTAFIN_ORACLE';
EXECUTE IMMEDIATE 'DROP PUBLIC SYNONYM SYN_NEWSCHEMAPOST';
EXECUTE IMMEDIATE 'DROP procedure NewSchemaPost';
EXCEPTION WHEN OTHERS THEN
NULL;
END;
/
exec contafin_oracle.pack_migrare.UpdateVersiune('sys_2014_10_21_01_FIRMA','','SYS');
commit;

View File

@@ -0,0 +1,38 @@
------------------------------------------------------
-- function NEWSCHEMAPROGRESS - se verifica in dba_datapump_jobs daca mai exista job-ul de import date
-- Creat de marius.mutu pe 06/11/2014
------------------------------------------------------
PROMPT
PROMPT function NEWSCHEMAPROGRESS
PROMPT
create or replace function NEWSCHEMAPROGRESS(tcSchema VARCHAR2)
return varchar2 is
Result Varchar2(10000);
lcSchema VARCHAR2(100) := UPPER(tcSchema);
begin
begin
select state
into Result
from dba_datapump_jobs
where job_name = lcSchema
AND OPERATION = 'IMPORT'
AND JOB_MODE = 'SCHEMA';
if upper(Result) = 'EXECUTING' THEN
Result := 'IN EXECUTIE';
elsif upper(Result) = 'COMPLETING' THEN
Result := 'SE FINALIZEAZA';
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
Result := 'FINALIZAT';
end;
return(Result);
end NEWSCHEMAPROGRESS;
/
exec contafin_oracle.pack_migrare.UpdateVersiune('sys_2014_11_06_01_FIRMA','','SYS');
commit;

View File

@@ -0,0 +1,292 @@
PROMPT
PROMPT NewSchema
PROMPT
create or replace procedure NewSchema(tcSchema varchar2,
tnLuna number,
tnAn number) is
lcCommand varchar2(1000);
lcSchemaSursa VARCHAR2(100) := 'FIRMANOUA';
lcSchemaDestinatie VARCHAR2(100) := tcSchema;
lcDumpFile VARCHAR2(100) := 'firmanoua.dmp';
lcLogFile VARCHAR2(100) := LOWER(tcSchema) || '.log';
-- 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).
begin
-- 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);
PINFO('DBMS_DATAPUMP.ADD_FILE LOG', lcLocatie);
DBMS_DATAPUMP.ADD_FILE(handle => h1,
filename => lcLogFile,
directory => 'DMPDIR',
filetype => 3);
PINFO('DBMS_DATAPUMP.ADD_FILE DMP', lcLocatie);
DBMS_DATAPUMP.ADD_FILE(handle => h1,
filename => lcDumpFile,
directory => 'DMPDIR',
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);
DBMS_DATAPUMP.DETACH(h1);
EXCEPTION
WHEN OTHERS THEN
PINFO(SQLERRM, lcLocatie);
raise_application_error(-20000, SQLERRM);
END;
BEGIN
------------------------------------------------------------------------
-- 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';
-- Da eroare pe linux - starea pachetului pack_personal a fost revocata???
-- EXECUTE IMMEDIATE lcSql INTO lnZileLucratoare USING ldDataI, ldDataF;
lnZileLucratoare := 20; -- un numar ales aleator
lnOreLucratoare := lnZileLucratoare * 8;
-- Nu stiu de ce, dar este invalidat pack_sesiune si se apeleaza din trg > pack_validare
-- Il fac disabled temporar
EXECUTE IMMEDIATE 'ALTER TRIGGER ' || lcSchemaDestinatie || '.TRG_SAL_CALENDAR_BU DISABLE';
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;
EXECUTE IMMEDIATE 'ALTER TRIGGER ' || lcSchemaDestinatie || '.TRG_SAL_CALENDAR_BU ENABLE';
-- SAL_IMPOZITAR
EXECUTE IMMEDIATE 'ALTER TRIGGER ' || lcSchemaDestinatie || '.TRG_SAL_IMPOZITAR_BU DISABLE';
lcSql := 'UPDATE ' || lcSchemaDestinatie || '.SAL_IMPOZITAR SET AN = :1 , LUNA = :2';
PINFO(lcSql, lcLocatie);
EXECUTE IMMEDIATE lcSql
USING lnAn, lnLuna;
EXECUTE IMMEDIATE 'ALTER TRIGGER ' || lcSchemaDestinatie || '.TRG_SAL_IMPOZITAR_BU ENABLE';
-- 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;
EXCEPTION
WHEN OTHERS THEN
PINFO(SQLERRM, lcLocatie);
raise_application_error(-20000, SQLERRM);
END;
BEGIN
------------------------------------------------------------------------
-- 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);
-- nu mai ridic exceptie, in caz ca nu este configurata actualizarea
-- raise_application_error(-20000, SQLERRM);
END;
end NewSchema;
/
exec contafin_oracle.pack_migrare.UpdateVersiune('sys_2017_02_28_01_SCHEMA','','SYS');
commit;

View File

@@ -0,0 +1,266 @@
create or replace procedure 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;
/
exec contafin_oracle.pack_migrare.UpdateVersiune('sys_2020_04_07_01_SCHEMA','','SYS');
commit;

View File

@@ -0,0 +1,110 @@
create or replace package AUTH_PACK wrapped
a000000
1
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
9
506 1c6
ix9Hsmg5Tf3Okokvs7pOGDEGZGUwg42JDEhGfC+iA0FeMFj3wpenXMZIDpR8TXOhIf25qm0h
fL3JZgWrNtP5d8e+EYLW+UbLlDaalgMhjr7Z6Sb4YnJHt2C2BFyi6KchViU9f18uyTDK8Dxq
9nF2iOkrMXw/yp0mzgpx2u9LuTeaZC73wnSv4hZL8mxWs3fiU6FPPTDstzLAi5GOMN70gM9a
+3RGy29Jgsx+t6H+cSrTv+4ZWubF8pHwj96mx98/wkN6wAcBuluXQzWq83dp+GAabe72B6Cv
J663XMtbdxzuK+hxlIwozxrIY1QZfrFXEoIMf8pDb2sY90IwQAR3WccQgI3Tz+SS8XFcLexB
BLkYPaNsYXce9wVhSyKQ2QknPhT0zSQBO0b9kFMFSsLMM87NSa+ZLofuiIA/0wJ9YWqT0e+g
i85DKpYkSJdXOw==
/
create or replace package body AUTH_PACK wrapped
a000000
1
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
b
3bad faf
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
/
exec contafin_oracle.pack_migrare.UpdateVersiune('sys_2020_07_01_01_AUTH_PACK','','SYS');
commit;

View File

@@ -0,0 +1,4 @@
alter system set NLS_LANGUAGE='ROMANIAN' scope=spfile;
exec contafin_oracle.pack_migrare.UpdateVersiune('sys_2021_12_08_01_COMUN','','SYS');
commit;

View File

@@ -0,0 +1,25 @@
-- ExecuteScriptOS - executa script powershell pentru download programe
create or replace procedure ExecuteScriptOS(tcPowerShellPath in varchar2,
tcScriptPath in varchar2) as
lcJobName varchar2(500);
begin
lcJobName := 'exec_ps_' || to_char(sysdate, 'YYYYMMDDHH24MISS');
dbms_scheduler.create_job(lcJobName,
job_action => tcPowerShellPath,
number_of_arguments => 1,
job_type => 'executable',
enabled => false);
dbms_scheduler.set_job_argument_value(lcJobName, 1, tcScriptPath);
dbms_scheduler.enable(lcJobName);
end ExecuteScriptOS;
/
grant execute on dbms_lock to public;
create or replace public SYNONYM ExecuteScriptOS for ExecuteScriptOS;
grant execute on ExecuteScriptOS to contafin_oracle;
exec contafin_oracle.pack_migrare.UpdateVersiune('sys_2023_05_03_01_COMUN','','SYS');
commit;

View File

@@ -0,0 +1,38 @@
create or replace noneditionable procedure ExecuteScriptOS(tcPowerShellPath in varchar2,
tcScriptPath in varchar2) as
lcJobName varchar2(500);
begin
lcJobName := 'exec_ps_' || to_char(sysdate, 'YYYYMMDDHH24MISS');
dbms_scheduler.create_job(lcJobName,
job_action => tcPowerShellPath,
number_of_arguments => 1,
job_type => 'executable',
enabled => false);
dbms_scheduler.set_job_argument_value(lcJobName, 1, tcScriptPath);
dbms_scheduler.enable(lcJobName);
end ExecuteScriptOS;
/
grant execute on ExecuteScriptOS to contafin_oracle;
create or replace procedure 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;
/
grant execute on UpdateSQLPLUS to contafin_oracle;
exec contafin_oracle.pack_migrare.UpdateVersiune('sys_2024_02_22_01_COMUN','','SYS');
commit;

View File

@@ -0,0 +1,25 @@
create or replace procedure 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;
/
exec contafin_oracle.pack_migrare.UpdateVersiune('sys_2025_09_24_03_EXECUTESCRIPTOS','','SYS');
commit;

View File

@@ -0,0 +1,553 @@
create or replace package 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;
/
create or replace package body 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;
/
exec contafin_oracle.pack_migrare.UpdateVersiune('sys_2026_01_14_01_AUTH_PACK','','SYS');
commit;

View File

@@ -0,0 +1,493 @@
create or replace noneditionable package body AUTH_PACK is
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',
'WEBDEV.WEBSERVER.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 := 10; -- auth_pack.decripteaza_nr_util(v_seriec);
--v_data_val := sysdate; -- auth_pack.decripteaza_data_val(v_seriec, v_zi);
v_data_val := TO_DATE('31122099','DDMMYYYY');
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 := TO_DATE('31122099','DDMMYYYY'); -- 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 := 50; --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 := 10; -- 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 := SYSDATE ; --auth_pack.decripteaza_data_val(V_SERIEC, V_ZI);
v_data_val := TO_DATE('31122099','DDMMYYYY');
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 VARCHAR2(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 := 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');
/* dbms_obfuscation_toolkit.DES3Decrypt(input => v_serie,
key => utl_raw.cast_to_raw(v_cheie),
decrypted_data => v_serieval);*/
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;
v_seriedec := NULL;
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;

View File

@@ -0,0 +1,13 @@
TODO: REZOLVAT ERORI
Compilation errors for VIEW VCRM_FACTURI
ORA-00904: "C"."NR_CTR": identificator nevalid
Compilation errors for VIEW VCRM_FACTURI
ORA-00904: "C"."NR_CTR": identificator nevalid
Compilation errors for VIEW VCRM_RATE
ORA-00904: "C"."NR_CTR": identificator nevalid

View File

@@ -0,0 +1,390 @@
# ROA Oracle Database Setup for Windows
## Overview
Scripts and documentation for setting up ROA Oracle Database on Windows servers:
| Scenario | Description |
|----------|-------------|
| **New Server** | Oracle 21c SE (non-CDB) or XE (CDB/PDB) + CONTAFIN_ORACLE.dmp |
| **Migration** | Import existing DMP files (CONTAFIN_ORACLE + 30-50 companies) |
| **Add Company** | Add new company schema to existing server |
---
## Prerequisites
- Windows Server 2016+ or Windows 10/11
- Oracle 21c Standard Edition or Express Edition installed
- Administrator privileges
- PowerShell 5.1+
- Minimum 8GB RAM (16GB recommended for SE)
- 50GB free disk space
---
## Quick Start
1. Download Oracle 21c XE or SE from Oracle
2. Install Oracle (see `docs/00-INSTALL-ORACLE-XE.md` or `docs/00-INSTALL-ORACLE-SE.md`)
3. Copy DMP files to `C:\DMPDIR\`
4. Copy `config.example.ps1` to `config.ps1` and edit values
5. Run scripts in order: `01` -> `07`
```powershell
# Example workflow
.\01-setup-database.ps1
.\02-create-sys-objects.ps1
.\03-import-contafin.ps1
.\04-create-synonyms-grants.ps1
.\05-import-companies.ps1
.\07-verify-installation.ps1
```
---
## Configuration
Copy `config.example.ps1` to `config.ps1` and edit:
| Parameter | XE Value | SE Value |
|-----------|----------|----------|
| `ORACLE_HOME` | `C:\app\oracle\product\21c\dbhomeXE` | `C:\app\oracle\product\21c\dbhome_1` |
| `SERVICE_NAME` | `XEPDB1` | `ROA` |
| `DATAFILE_DIR` | `C:\app\oracle\oradata\XE\XEPDB1` | `C:\app\oracle\oradata\ROA` |
---
## Directory Structure
```
roa-windows-setup/
├── README.md # This file
├── config.example.ps1 # Configuration template
├── docs/ # Installation guides
│ ├── 00-INSTALL-ORACLE-XE.md # Oracle 21c XE installation
│ └── 00-INSTALL-ORACLE-SE.md # Oracle 21c SE installation
├── scripts/ # PowerShell setup scripts
│ ├── 01-setup-database.ps1 # Tablespace, profile, CONTAFIN_ORACLE user
│ ├── 02-create-sys-objects.ps1# SYS objects (AUTH_PACK, NEWSCHEMA, etc.)
│ ├── 03-import-contafin.ps1 # Import CONTAFIN_ORACLE schema
│ ├── 04-create-synonyms-grants.ps1 # Public synonyms and grants
│ ├── 05-import-companies.ps1 # Batch import company schemas
│ ├── 06-add-company.ps1 # Add new company to existing server
│ └── 07-verify-installation.ps1# Verify installation completeness
├── config/ # Configuration templates
│ └── sqlnet.ora # Compatibility for Instant Client 10/11
├── par/ # Data Pump parameter files
│ ├── import-contafin.par # CONTAFIN_ORACLE import parameters
│ └── import-company.par # Company schema import template
├── sql/ # SQL scripts
│ └── (to be added)
└── test/ # Testing scripts
└── clone-vm300.sh # Proxmox VM cloning for testing
```
---
## Scripts Overview
| Script | Purpose | Required |
|--------|---------|----------|
| `01-setup-database.ps1` | Create tablespace ROA, configure profile, create CONTAFIN_ORACLE user | Yes |
| `02-create-sys-objects.ps1` | Install SYS objects: AUTH_PACK, NEWSCHEMA, EXECUTESCRIPTOS, UTL_MAIL | Yes |
| `03-import-contafin.ps1` | Import CONTAFIN_ORACLE schema from DMP | Yes |
| `04-create-synonyms-grants.ps1` | Create public synonyms and grants for CONTAFIN_ORACLE | Yes |
| `05-import-companies.ps1` | Batch import company schemas from DMP files | Yes |
| `06-add-company.ps1` | Add new company to existing server | Optional |
| `07-verify-installation.ps1` | Verify installation completeness (objects, grants, synonyms) | Yes |
---
## Architecture Differences
### Oracle 21c Standard Edition (non-CDB)
Traditional single-database architecture (legacy compatibility).
| Feature | Value |
|---------|-------|
| Architecture | Single database (non-CDB) |
| Database Name | ROA |
| Service Name | ROA |
| SID | ROA |
| Connection | `system/pass@ROA` |
| Datafiles | `C:\app\oracle\oradata\ROA\` |
**Advantages:**
- Simpler administration
- Compatible with Oracle 10g migration scripts
- No PDB management overhead
### Oracle 21c Express Edition (CDB/PDB)
Modern multitenant architecture with Container Database.
| Feature | Value |
|---------|-------|
| Architecture | Container + Pluggable Database |
| CDB Name | XE |
| PDB Name | XEPDB1 |
| Service Name | XEPDB1 (for applications) |
| Connection | `system/pass@XEPDB1` |
| Datafiles | `C:\app\oracle\oradata\XE\XEPDB1\` |
**Advantages:**
- Free license (Express Edition)
- Modern architecture
- Easy backup/clone of PDB
**Connection Warning:**
> Always connect to **XEPDB1** (PDB), not to **XE** (CDB root) for ROA operations!
---
## Standard Passwords
| User | Password | Notes |
|------|----------|-------|
| SYS | romfastsoft | SYSDBA |
| SYSTEM | romfastsoft | DBA |
| CONTAFIN_ORACLE | ROMFASTSOFT | Common schema |
| Company schemas | From NOM_FIRME.parola | See company-specific config |
> **Security Note:** Change passwords in production environments!
---
## DMP Files Required
### For New Installation
| File | Description | Size |
|------|-------------|------|
| `contafin_oracle.dmp` | Common schema (rights, updates, etc.) | ~50MB |
| `[company].dmp` | Company schema (one per company) | ~100-500MB each |
### Obtaining DMP Files
Export from existing Oracle 18c server (for compatibility):
```bash
# From LXC 108 (Oracle 18c - port 1522)
docker exec oracle18-xe expdp system/romfastsoft@localhost:1521/XEPDB1 \
SCHEMAS=CONTAFIN_ORACLE DIRECTORY=DMPDIR DUMPFILE=contafin_oracle.dmp \
LOGFILE=export_contafin.log VERSION=11.2
```
Copy to Windows:
```powershell
# Using SCP from WSL/Linux
scp root@10.0.20.201:/opt/oracle18/oradata/dmpdir/contafin_oracle.dmp C:\DMPDIR\
```
---
## Workflow Examples
### New Server Installation
```powershell
# 1. Install Oracle 21c XE (see docs/00-INSTALL-ORACLE-XE.md)
# 2. Configure
Copy-Item config.example.ps1 config.ps1
notepad config.ps1 # Edit values
# 3. Copy DMP files
mkdir C:\DMPDIR
Copy-Item \\server\dmp\*.dmp C:\DMPDIR\
# 4. Run setup scripts
.\01-setup-database.ps1
.\02-create-sys-objects.ps1
.\03-import-contafin.ps1
.\04-create-synonyms-grants.ps1
.\05-import-companies.ps1
.\07-verify-installation.ps1
```
### Add New Company
```powershell
# Copy company DMP
Copy-Item \\server\dmp\NEWCOMPANY.dmp C:\DMPDIR\
# Run add company script
.\06-add-company.ps1 -CompanyName "NEWCOMPANY" -Password "ROMFASTSOFT"
```
### Migration from Oracle 10g
```powershell
# 1. Export from Oracle 10g (on source Windows server)
exp system/password@ORCL file=C:\backup\COMPANY.dmp owner=COMPANY
# 2. Convert with Oracle 21c imp (if needed)
# Or use impdp with VERSION parameter
# 3. Import using scripts
.\05-import-companies.ps1 -DmpFile "COMPANY.dmp"
```
---
## Troubleshooting
### ORA-28040: No matching authentication protocol
**Problem:** Old clients (Instant Client 10/11) cannot connect to Oracle 21c.
**Solution:** Configure `sqlnet.ora` for backward compatibility:
```powershell
# Copy sqlnet.ora template
Copy-Item config\sqlnet.ora $env:ORACLE_HOME\network\admin\sqlnet.ora
# Restart listener
lsnrctl reload
```
### ORA-01017: invalid username/password
**After configuring sqlnet.ora for old clients, reset passwords:**
```sql
ALTER USER CONTAFIN_ORACLE IDENTIFIED BY ROMFASTSOFT;
ALTER USER [COMPANY] IDENTIFIED BY [PASSWORD];
```
### ORA-12514: TNS:listener does not currently know of service
**Check listener status:**
```powershell
lsnrctl status
lsnrctl services
```
**For XE, ensure PDB is open:**
```sql
ALTER SESSION SET CONTAINER = XEPDB1;
ALTER PLUGGABLE DATABASE XEPDB1 OPEN;
ALTER PLUGGABLE DATABASE XEPDB1 SAVE STATE;
```
### Import Errors
**ORA-00959: tablespace 'ROA' does not exist:**
```powershell
# Use REMAP_TABLESPACE in impdp
impdp ... REMAP_TABLESPACE=ROA:USERS
```
**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).
### Service Not Starting
Check Windows Services:
- `OracleServiceXE` (for XE)
- `OracleServiceROA` (for SE)
- `OracleOraDB21Home1TNSListener`
```powershell
# Restart services
net stop OracleServiceXE
net start OracleServiceXE
net stop OracleOraDB21Home1TNSListener
net start OracleOraDB21Home1TNSListener
```
---
## Connection Strings
### SQL*Plus
```bash
# Oracle XE (connect to PDB)
sqlplus system/romfastsoft@localhost:1521/XEPDB1
sqlplus CONTAFIN_ORACLE/ROMFASTSOFT@localhost:1521/XEPDB1
# Oracle SE (connect to database)
sqlplus system/romfastsoft@localhost:1521/ROA
sqlplus CONTAFIN_ORACLE/ROMFASTSOFT@localhost:1521/ROA
```
### JDBC
```
# Oracle XE
jdbc:oracle:thin:@localhost:1521/XEPDB1
# Oracle SE
jdbc:oracle:thin:@localhost:1521/ROA
```
### ODBC (Instant Client)
| Parameter | XE Value | SE Value |
|-----------|----------|----------|
| Host | localhost | localhost |
| Port | 1521 | 1521 |
| Service Name | XEPDB1 | ROA |
| User | CONTAFIN_ORACLE | CONTAFIN_ORACLE |
| Password | ROMFASTSOFT | ROMFASTSOFT |
### TNS Entry
```
# For Oracle XE
ROA =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA = (SERVICE_NAME = XEPDB1))
)
# For Oracle SE
ROA =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA = (SERVICE_NAME = ROA))
)
```
---
## Testing with Proxmox VM Clone
For testing installations, use the VM cloning script:
```bash
# On Proxmox host (pvemini)
./test/clone-vm300.sh 301 # Creates VM 301 from template 300
```
See `test/clone-vm300.sh` for details.
---
## Related Documentation
- **Oracle LXC 108 (Docker):** `../README.md`
- **Migration Oracle 10g -> 21c:** `../migration/README.md`
- **SQL Migration Guidelines:** `/system_instructions/system_prompt.md`
- **Proxmox Infrastructure:** `../../README.md`
---
**Last Updated:** 2026-01-28
**Author:** Marius Mutu
**Project:** ROMFASTSQL - ROA Oracle Database Windows Setup

View File

@@ -0,0 +1,372 @@
# =============================================================================
# ROA Oracle Database Setup Configuration
# =============================================================================
# This file is sourced by setup scripts. It auto-detects Oracle paths and
# prompts for user input when needed.
#
# Usage:
# 1. Copy to config.ps1: Copy-Item config.example.ps1 config.ps1
# 2. Run any setup script - it will prompt for missing values
# 3. Or edit config.ps1 manually to set values
#
# If a value is $null or empty, the script will auto-detect or prompt.
# =============================================================================
# -----------------------------------------------------------------------------
# Oracle Installation Paths (auto-detected if empty)
# -----------------------------------------------------------------------------
# Oracle Home - leave empty to auto-detect from registry/common paths
$ORACLE_HOME = $null
# Oracle Base - derived from ORACLE_HOME if empty
$ORACLE_BASE = $null
# -----------------------------------------------------------------------------
# Database Connection (auto-detected if empty)
# -----------------------------------------------------------------------------
# Service Name - leave empty to auto-detect (XEPDB1 for XE, ROA for SE)
$SERVICE_NAME = $null
# Database host - auto-detected from listener if empty
$DB_HOST = $null
# Database port
$DB_PORT = 1521
# -----------------------------------------------------------------------------
# Passwords - MUST be set (will prompt if empty)
# -----------------------------------------------------------------------------
# SYS/SYSTEM password (set during Oracle installation)
$SYSTEM_PASSWORD = $null
# CONTAFIN_ORACLE schema password
$CONTAFIN_PASSWORD = "ROMFASTSOFT"
# Default password for new company schemas
$DEFAULT_COMPANY_PASSWORD = "ROMFASTSOFT"
# -----------------------------------------------------------------------------
# Paths (auto-detected if empty)
# -----------------------------------------------------------------------------
# Directory for DMP files (import/export)
$DMPDIR = "C:\DMPDIR"
# Oracle DIRECTORY object name
$DMPDIR_NAME = "DMPDIR"
# Datafile directory - auto-detected from existing datafiles if empty
$DATAFILE_DIR = $null
# -----------------------------------------------------------------------------
# Tablespace Configuration
# -----------------------------------------------------------------------------
$TABLESPACE_NAME = "ROA"
$TABLESPACE_SIZE = "2G"
$TABLESPACE_MAXSIZE = "UNLIMITED"
$TABLESPACE_AUTOEXTEND = $true
# -----------------------------------------------------------------------------
# Import Settings
# -----------------------------------------------------------------------------
$PARALLEL_JOBS = 2
$TABLE_EXISTS_ACTION = "REPLACE"
# -----------------------------------------------------------------------------
# Logging
# -----------------------------------------------------------------------------
$LOG_DIR = "$PSScriptRoot\logs"
$VERBOSE_LOGGING = $true
# -----------------------------------------------------------------------------
# Advanced Settings
# -----------------------------------------------------------------------------
$NLS_CHARACTERSET = "WE8MSWIN1252"
$USER_PROFILE = "DEFAULT"
$DEFAULT_TABLESPACE = "USERS"
$TEMP_TABLESPACE = "TEMP"
# =============================================================================
# AUTO-DETECTION AND PROMPTING FUNCTIONS
# =============================================================================
function Initialize-Config {
<#
.SYNOPSIS
Initialize configuration by auto-detecting values and prompting for missing ones.
#>
Write-Host ""
Write-Host "========================================" -ForegroundColor Cyan
Write-Host " ROA Oracle Setup - Configuration" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
Write-Host ""
# Auto-detect Oracle Home
if (-not $script:ORACLE_HOME) {
$script:ORACLE_HOME = Find-OracleHome
if ($script:ORACLE_HOME) {
Write-Host "[AUTO] Oracle Home: $script:ORACLE_HOME" -ForegroundColor Green
} else {
$script:ORACLE_HOME = Read-Host "Enter Oracle Home path (e.g., C:\app\oracle\product\21c\dbhomeXE)"
}
} else {
Write-Host "[SET] Oracle Home: $script:ORACLE_HOME" -ForegroundColor Gray
}
# Derive Oracle Base
if (-not $script:ORACLE_BASE) {
# Go up from dbhomeXE to product to 21c to oracle to app
$script:ORACLE_BASE = Split-Path (Split-Path (Split-Path $script:ORACLE_HOME -Parent) -Parent) -Parent
Write-Host "[AUTO] Oracle Base: $script:ORACLE_BASE" -ForegroundColor Green
}
# Prompt for SYSTEM password if not set
if (-not $script:SYSTEM_PASSWORD) {
$securePass = Read-Host "Enter SYSTEM password" -AsSecureString
$script:SYSTEM_PASSWORD = [Runtime.InteropServices.Marshal]::PtrToStringAuto(
[Runtime.InteropServices.Marshal]::SecureStringToBSTR($securePass))
}
# Auto-detect DB_HOST from listener
if (-not $script:DB_HOST) {
$script:DB_HOST = Find-ListenerHost
if ($script:DB_HOST) {
Write-Host "[AUTO] Database Host: $script:DB_HOST" -ForegroundColor Green
} else {
$script:DB_HOST = "localhost"
Write-Host "[DEFAULT] Database Host: $script:DB_HOST" -ForegroundColor Yellow
}
} else {
Write-Host "[SET] Database Host: $script:DB_HOST" -ForegroundColor Gray
}
# Build connection string
$script:DB_CONNECT = "${script:DB_HOST}:${script:DB_PORT}"
# Auto-detect Service Name
if (-not $script:SERVICE_NAME) {
$script:SERVICE_NAME = Find-ServiceName
if ($script:SERVICE_NAME) {
Write-Host "[AUTO] Service Name: $script:SERVICE_NAME" -ForegroundColor Green
} else {
$script:SERVICE_NAME = Read-Host "Enter Service Name (XEPDB1 for XE, or your database name)"
}
} else {
Write-Host "[SET] Service Name: $script:SERVICE_NAME" -ForegroundColor Gray
}
# Full connection string
$script:DB_CONNECT = "${script:DB_HOST}:${script:DB_PORT}/${script:SERVICE_NAME}"
Write-Host "[INFO] Connection: $script:DB_CONNECT" -ForegroundColor Cyan
# Auto-detect datafile directory
if (-not $script:DATAFILE_DIR) {
$script:DATAFILE_DIR = Find-DatafileDir
if ($script:DATAFILE_DIR) {
Write-Host "[AUTO] Datafile Dir: $script:DATAFILE_DIR" -ForegroundColor Green
} else {
Write-Host "[WARN] Could not auto-detect datafile directory" -ForegroundColor Yellow
$script:DATAFILE_DIR = Read-Host "Enter datafile directory path"
}
} else {
Write-Host "[SET] Datafile Dir: $script:DATAFILE_DIR" -ForegroundColor Gray
}
# Create log directory
if (-not (Test-Path $script:LOG_DIR)) {
New-Item -ItemType Directory -Path $script:LOG_DIR -Force | Out-Null
}
Write-Host ""
Write-Host "Configuration complete!" -ForegroundColor Green
Write-Host ""
}
function Find-OracleHome {
<#
.SYNOPSIS
Auto-detect Oracle Home from registry or common paths.
#>
# Try ORACLE_HOME environment variable
if ($env:ORACLE_HOME -and (Test-Path "$env:ORACLE_HOME\bin\sqlplus.exe")) {
return $env:ORACLE_HOME
}
# Try registry
$regPaths = @(
'HKLM:\SOFTWARE\Oracle\KEY_OraDB21Home1',
'HKLM:\SOFTWARE\Oracle\KEY_OraDB18Home1',
'HKLM:\SOFTWARE\Oracle\KEY_XE',
'HKLM:\SOFTWARE\Wow6432Node\Oracle\KEY_OraDB21Home1'
)
foreach ($regPath in $regPaths) {
if (Test-Path $regPath) {
$oraHome = (Get-ItemProperty -Path $regPath -ErrorAction SilentlyContinue).ORACLE_HOME
if ($oraHome -and (Test-Path "$oraHome\bin\sqlplus.exe")) {
return $oraHome
}
}
}
# Try common paths (including user-specific)
$currentUser = $env:USERNAME
$commonPaths = @(
"C:\app\$currentUser\product\21c\dbhomeXE",
"C:\app\$currentUser\product\21c\dbhome_1",
'C:\app\oracle\product\21c\dbhomeXE',
'C:\app\oracle\product\21c\dbhome_1',
'C:\app\romfast\product\21c\dbhomeXE',
"D:\app\$currentUser\product\21c\dbhomeXE",
'D:\app\oracle\product\21c\dbhomeXE'
)
foreach ($path in $commonPaths) {
if (Test-Path "$path\bin\sqlplus.exe") {
return $path
}
}
return $null
}
function Find-ListenerHost {
<#
.SYNOPSIS
Get the host from listener configuration.
#>
if (-not $script:ORACLE_HOME) { return $null }
try {
$lsnrctl = Join-Path $script:ORACLE_HOME "bin\lsnrctl.exe"
if (-not (Test-Path $lsnrctl)) { return $null }
$output = & $lsnrctl status 2>&1 | Out-String
# Parse HOST from listener output
if ($output -match "HOST=([^\)]+)\)") {
$host = $Matches[1]
# If it's 0.0.0.0 or localhost variant, try to get actual IP
if ($host -eq "0.0.0.0" -or $host -match "^127\." -or $host -eq "localhost") {
# Get first non-loopback IPv4 address
$ip = (Get-NetIPAddress -AddressFamily IPv4 |
Where-Object { $_.IPAddress -notmatch "^127\." } |
Select-Object -First 1).IPAddress
if ($ip) { return $ip }
}
return $host
}
} catch {
# Ignore errors
}
return $null
}
function Find-ServiceName {
<#
.SYNOPSIS
Auto-detect service name from listener.
#>
if (-not $script:ORACLE_HOME) { return $null }
try {
$lsnrctl = Join-Path $script:ORACLE_HOME "bin\lsnrctl.exe"
if (-not (Test-Path $lsnrctl)) { return $null }
$output = & $lsnrctl status 2>&1 | Out-String
# Look for XEPDB1 first (Oracle XE PDB)
if ($output -match 'Service "xepdb1"') {
return "XEPDB1"
}
# Look for ROA
if ($output -match 'Service "roa"') {
return "ROA"
}
# Look for XE
if ($output -match 'Service "XE"') {
return "XE"
}
} catch {
# Ignore errors
}
# Default to XEPDB1 for modern Oracle XE
return "XEPDB1"
}
function Find-DatafileDir {
<#
.SYNOPSIS
Auto-detect datafile directory from existing database files.
#>
if (-not $script:ORACLE_HOME -or -not $script:SYSTEM_PASSWORD -or -not $script:SERVICE_NAME) {
return $null
}
try {
$sqlplus = Join-Path $script:ORACLE_HOME "bin\sqlplus.exe"
$connStr = "system/$script:SYSTEM_PASSWORD@${script:DB_HOST}:${script:DB_PORT}/${script:SERVICE_NAME}"
$sql = @"
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF LINESIZE 500
SELECT SUBSTR(file_name, 1, INSTR(file_name, '\', -1) - 1)
FROM dba_data_files
WHERE tablespace_name = 'SYSTEM' AND ROWNUM = 1;
EXIT;
"@
$result = $sql | & $sqlplus -s $connStr 2>$null
$path = ($result -split "`n" | Where-Object { $_ -match "^[A-Z]:\\" } | Select-Object -First 1)
if ($path) {
return $path.Trim()
}
} catch {
# Ignore errors
}
return $null
}
function Get-OracleConnection {
return "system/$script:SYSTEM_PASSWORD@$script:DB_CONNECT"
}
function Get-SysdbaConnection {
return "sys/$script:SYSTEM_PASSWORD@$script:DB_CONNECT as sysdba"
}
function Get-SqlPlusPath {
return Join-Path $script:ORACLE_HOME "bin\sqlplus.exe"
}
function Get-ImpdpPath {
return Join-Path $script:ORACLE_HOME "bin\impdp.exe"
}
function Get-ExpdpPath {
return Join-Path $script:ORACLE_HOME "bin\expdp.exe"
}
# =============================================================================
# AUTO-INITIALIZE when sourced (if not already configured)
# =============================================================================
# Check if this is being sourced by a setup script
if ($MyInvocation.InvocationName -ne '.') {
Write-Host "This file should be dot-sourced: . .\config.ps1" -ForegroundColor Yellow
}

View File

@@ -0,0 +1,105 @@
# =============================================================================
# Oracle sqlnet.ora - Compatibility Configuration for Old Instant Client
# =============================================================================
#
# Purpose: Allow connections from Oracle Instant Client 10g/11g to Oracle 21c
#
# IMPORTANT - Oracle 21c Location:
# Oracle 21c uses a read-only Oracle Home. Configuration files must go in
# the "Oracle Base Home" directory, NOT in ORACLE_HOME.
#
# For Oracle 21c XE, copy to:
# %ORACLE_BASE%\product\21c\homes\OraDB21Home1\network\admin\sqlnet.ora
# Example:
# C:\app\<user>\product\21c\homes\OraDB21Home1\network\admin\sqlnet.ora
#
# For older Oracle versions, copy to:
# %ORACLE_HOME%\network\admin\sqlnet.ora
#
# After copying:
# 1. STOP and START listener (not just reload!):
# lsnrctl stop
# lsnrctl start
# 2. Wait ~10 seconds for database services to re-register
# 3. Reset user passwords (required to generate 10G password verifier):
# ALTER USER CONTAFIN_ORACLE IDENTIFIED BY ROMFASTSOFT;
# ALTER USER <company> IDENTIFIED BY <password>;
#
# Note: The password MUST be reset after sqlnet.ora change - this regenerates
# the password hash to include the 10G verifier needed by old clients.
#
# =============================================================================
# -----------------------------------------------------------------------------
# Authentication Protocol Compatibility
# -----------------------------------------------------------------------------
# Allow older authentication protocols (required for Instant Client 10/11)
# Value 8 allows all protocols from Oracle 8i onwards
# Default in 21c is 12, which blocks clients older than 12c
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
# -----------------------------------------------------------------------------
# Password Case Sensitivity (Optional)
# -----------------------------------------------------------------------------
# Disable password case sensitivity for compatibility with old applications
# that may send passwords in uppercase
# Uncomment if needed:
# SEC_CASE_SENSITIVE_LOGON=FALSE
# -----------------------------------------------------------------------------
# Name Resolution
# -----------------------------------------------------------------------------
# Standard name resolution order
NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)
# -----------------------------------------------------------------------------
# Connection Settings (Optional)
# -----------------------------------------------------------------------------
# Timeout for establishing connection (seconds)
# SQLNET.INBOUND_CONNECT_TIMEOUT = 60
# Dead connection detection interval (minutes)
# SQLNET.EXPIRE_TIME = 10
# -----------------------------------------------------------------------------
# Encryption (Optional - for secure connections)
# -----------------------------------------------------------------------------
# Enable native encryption (AES256)
# SQLNET.ENCRYPTION_SERVER = REQUIRED
# SQLNET.ENCRYPTION_TYPES_SERVER = (AES256)
# SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED
# SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256)
# -----------------------------------------------------------------------------
# Logging (for troubleshooting)
# -----------------------------------------------------------------------------
# Enable tracing (set to OFF in production)
# TRACE_LEVEL_CLIENT = OFF
# TRACE_LEVEL_SERVER = OFF
# Log file locations
# LOG_DIRECTORY_CLIENT = C:\app\oracle\network\log
# LOG_DIRECTORY_SERVER = C:\app\oracle\network\log
# =============================================================================
# After applying this configuration:
#
# 1. Reload listener:
# lsnrctl reload
#
# 2. Reset passwords for users connecting with old clients:
# sqlplus sys/romfastsoft@SERVICE as sysdba
# ALTER USER CONTAFIN_ORACLE IDENTIFIED BY ROMFASTSOFT;
# ALTER USER [COMPANY] IDENTIFIED BY [PASSWORD];
#
# 3. Test connection from old client:
# sqlplus CONTAFIN_ORACLE/ROMFASTSOFT@//host:1521/SERVICE
#
# =============================================================================

View File

@@ -0,0 +1,436 @@
# Installing Oracle 21c Standard Edition on Windows
## Overview
Oracle 21c Standard Edition 2 (SE2) is a licensed product for production use.
Unlike Express Edition, SE has no resource limitations.
| Feature | Express Edition | Standard Edition 2 |
|---------|-----------------|-------------------|
| License | Free | Paid (per socket) |
| CPU | 2 threads max | Unlimited |
| RAM | 2 GB max | Unlimited |
| User Data | 12 GB max | Unlimited |
| Architecture | CDB only | CDB or non-CDB |
For large ROA installations (50+ companies), SE2 is recommended.
---
## Download
1. Go to Oracle Database Downloads:
https://www.oracle.com/database/technologies/oracle-database-software-downloads.html
2. Download **Oracle Database 21c for Windows x64**
- File: `WINDOWS.X64_213000_db_home.zip` (~2.9 GB)
- Requires Oracle account
3. You will also need the Oracle Database license key
---
## System Requirements
| Requirement | Minimum | Recommended |
|-------------|---------|-------------|
| OS | Windows Server 2016+ | Windows Server 2019/2022 |
| RAM | 8 GB | 16 GB+ |
| Disk | 30 GB | 100 GB+ |
| CPU | 4 cores | 8+ cores |
---
## Installation
### Step 1: Extract ZIP
```powershell
# Create Oracle Home directory first
mkdir C:\app\oracle\product\21c\dbhome_1
# Extract directly to Oracle Home
Expand-Archive WINDOWS.X64_213000_db_home.zip -DestinationPath C:\app\oracle\product\21c\dbhome_1
```
### Step 2: Run Installer
1. Open Command Prompt **as Administrator**
2. Navigate to Oracle Home:
```powershell
cd C:\app\oracle\product\21c\dbhome_1
```
3. Run setup:
```powershell
.\setup.exe
```
### Step 3: Installation Wizard
1. **Configuration Option**
- Select: **Create and configure a single instance database**
- Click Next
2. **System Class**
- Select: **Server Class**
- Click Next
3. **Database Edition**
- Select: **Standard Edition 2**
- Click Next
4. **Installation Type**
- Select: **Typical Install** (simpler)
- Or **Advanced Install** for custom settings
- Click Next
5. **For Typical Install:**
- Oracle base: `C:\app\oracle`
- Database file location: `C:\app\oracle\oradata`
- Database edition: Standard Edition 2
- Character set: **WE8MSWIN1252** (for Romanian support)
- Global database name: **ROA**
- Password: `romfastsoft`
- **Uncheck:** Create as Container database (for non-CDB)
6. **Summary** - Review and click Install
7. **Installation Progress** - Wait (~30-45 minutes)
8. **Finish** - Note connection information
---
## Non-CDB vs CDB Architecture
### Non-CDB (Traditional - Recommended for ROA)
Single database, simpler administration:
```
+---------------------------+
| Database: ROA |
| +---------------------+ |
| | Schema: CONTAFIN | |
| +---------------------+ |
| | Schema: COMPANY1 | |
| +---------------------+ |
| | Schema: COMPANY2 | |
| +---------------------+ |
+---------------------------+
```
Connection: `system/romfastsoft@ROA`
### CDB (Multitenant)
Container with pluggable databases:
```
+---------------------------------------------+
| CDB: ROA |
| +---------------------------------------+ |
| | CDB$ROOT | |
| +---------------------------------------+ |
| +---------------------------------------+ |
| | ROAPDB1 - Application Data | |
| +---------------------------------------+ |
+---------------------------------------------+
```
Connection: `system/romfastsoft@ROAPDB1`
> **Recommendation:** Use **non-CDB** for compatibility with Oracle 10g migration scripts.
---
## Post-Installation Configuration
### Verify Services Running
```powershell
Get-Service Oracle* | Format-Table Name, Status, StartType
```
Expected services:
| Service | Description |
|---------|-------------|
| OracleServiceROA | Database instance |
| OracleOraDB21Home1TNSListener | TNS Listener |
| OracleVssWriterROA | VSS Writer for backups |
### Test Connection
```powershell
# Set Oracle environment
$env:ORACLE_HOME = "C:\app\oracle\product\21c\dbhome_1"
$env:ORACLE_SID = "ROA"
$env:PATH = "$env:ORACLE_HOME\bin;$env:PATH"
# Test connection
sqlplus system/romfastsoft@localhost:1521/ROA
```
### Configure for Old Client Compatibility
```powershell
notepad C:\app\oracle\product\21c\dbhome_1\network\admin\sqlnet.ora
```
Add:
```
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
```
Reload listener:
```powershell
lsnrctl reload
```
---
## Create DMPDIR Directory
```sql
-- Connect as SYSDBA
sqlplus sys/romfastsoft@localhost:1521/ROA as sysdba
-- Create Windows directory
host mkdir C:\DMPDIR
-- Create Oracle DIRECTORY object
CREATE OR REPLACE DIRECTORY DMPDIR AS 'C:\DMPDIR';
GRANT READ, WRITE ON DIRECTORY DMPDIR TO PUBLIC;
-- Verify
SELECT directory_name, directory_path FROM dba_directories WHERE directory_name = 'DMPDIR';
```
---
## Configure Password Policy
```sql
sqlplus sys/romfastsoft@localhost:1521/ROA as sysdba
-- Modify DEFAULT profile
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_TIME UNLIMITED;
ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_MAX UNLIMITED;
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED;
```
---
## Memory Configuration
For Standard Edition with 16GB RAM:
```sql
-- Connect as SYSDBA
sqlplus sys/romfastsoft@localhost:1521/ROA as sysdba
-- Check current settings
SHOW PARAMETER memory;
SHOW PARAMETER sga;
SHOW PARAMETER pga;
-- Configure memory (adjust based on available RAM)
ALTER SYSTEM SET MEMORY_TARGET = 8G SCOPE = SPFILE;
ALTER SYSTEM SET MEMORY_MAX_TARGET = 10G SCOPE = SPFILE;
-- Restart database for changes
SHUTDOWN IMMEDIATE;
STARTUP;
```
Recommended memory allocation:
| RAM Available | MEMORY_TARGET | MEMORY_MAX_TARGET |
|---------------|---------------|-------------------|
| 8 GB | 4 GB | 6 GB |
| 16 GB | 8 GB | 10 GB |
| 32 GB | 16 GB | 20 GB |
---
## Create ROA Tablespace
```sql
sqlplus sys/romfastsoft@localhost:1521/ROA as sysdba
-- Create tablespace
CREATE TABLESPACE ROA
DATAFILE 'C:\app\oracle\oradata\ROA\roa01.dbf'
SIZE 2G
AUTOEXTEND ON NEXT 512M
MAXSIZE UNLIMITED;
-- Verify
SELECT tablespace_name, file_name, bytes/1024/1024 as MB
FROM dba_data_files
WHERE tablespace_name = 'ROA';
```
---
## Listener Configuration
Check `listener.ora`:
```powershell
notepad C:\app\oracle\product\21c\dbhome_1\network\admin\listener.ora
```
Should contain:
```
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ROA)
(ORACLE_HOME = C:\app\oracle\product\21c\dbhome_1)
(SID_NAME = ROA)
)
)
```
Check `tnsnames.ora`:
```powershell
notepad C:\app\oracle\product\21c\dbhome_1\network\admin\tnsnames.ora
```
Should contain:
```
ROA =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ROA)
)
)
```
---
## Enterprise Manager Database Express
Access EM Express:
```
https://localhost:5500/em/
```
If not configured, enable it:
```sql
sqlplus sys/romfastsoft@localhost:1521/ROA as sysdba
EXEC DBMS_XDB_CONFIG.SETHTTPPORT(5500);
EXEC DBMS_XDB_CONFIG.SETHTTPSPORT(5501);
```
---
## Troubleshooting
### OracleServiceROA Not Starting
1. Check Oracle alert log:
```powershell
Get-Content C:\app\oracle\diag\rdbms\roa\ROA\trace\alert_ROA.log -Tail 100
```
2. Common issues:
- Insufficient memory
- Disk space
- Port 1521 already in use
### ORA-01034: ORACLE not available
Start the database manually:
```powershell
sqlplus / as sysdba
SQL> STARTUP;
```
### ORA-12514: TNS listener does not know of service
```powershell
# Register database with listener
sqlplus / as sysdba
SQL> ALTER SYSTEM REGISTER;
# Check listener
lsnrctl status
lsnrctl services
```
### Database Won't Shut Down
```sql
-- Force shutdown
SHUTDOWN ABORT;
-- Start clean
STARTUP;
```
---
## Backup Configuration (Recommended)
### Enable Archivelog Mode
```sql
sqlplus sys/romfastsoft@localhost:1521/ROA as sysdba
-- Check current mode
ARCHIVE LOG LIST;
-- If NOARCHIVELOG, enable:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
-- Verify
ARCHIVE LOG LIST;
```
### Configure RMAN
```powershell
rman target sys/romfastsoft@ROA
RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
RMAN> CONFIGURE BACKUP OPTIMIZATION ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'C:\backup\%F';
```
---
## Next Steps
After Oracle SE installation:
1. Copy `config.example.ps1` to `config.ps1`
2. Edit `config.ps1`:
- Set `$ORACLE_HOME = "C:\app\oracle\product\21c\dbhome_1"`
- Set `$SERVICE_NAME = "ROA"`
- Set `$DATAFILE_DIR = "C:\app\oracle\oradata\ROA"`
3. Run `01-setup-database.ps1`
See main `README.md` for complete workflow.
---
**Last Updated:** 2026-01-28
**Project:** ROMFASTSQL - Oracle SE Installation Guide

View File

@@ -0,0 +1,337 @@
# Installing Oracle 21c Express Edition on Windows
## Overview
Oracle 21c Express Edition (XE) is free to use with the following limitations:
- 2 CPU threads
- 2 GB RAM for database
- 12 GB user data
For ROA installations with up to 50 companies, XE is sufficient.
---
## Download
1. Go to Oracle XE Downloads:
https://www.oracle.com/database/technologies/xe-downloads.html
2. Download **OracleXE213_Win64.zip** (~1.5 GB)
- Requires Oracle account (free registration)
3. Verify download integrity (optional):
```powershell
Get-FileHash OracleXE213_Win64.zip -Algorithm SHA256
```
---
## System Requirements
| Requirement | Minimum | Recommended |
|-------------|---------|-------------|
| OS | Windows 10/11, Server 2016+ | Windows Server 2019+ |
| RAM | 4 GB | 8 GB |
| Disk | 15 GB | 50 GB |
| CPU | 2 cores | 4 cores |
---
## Installation
### Step 1: Extract ZIP
```powershell
Expand-Archive OracleXE213_Win64.zip -DestinationPath C:\OracleXE_Install
```
### Step 2: Run Installer
1. Open Command Prompt or PowerShell **as Administrator**
2. Navigate to extracted folder:
```powershell
cd C:\OracleXE_Install\Disk1
```
3. Run setup:
```powershell
.\setup.exe
```
### Step 3: Installation Wizard
1. **Welcome Screen** - Click Next
2. **License Agreement** - Accept and click Next
3. **Oracle Home Location**
- Default: `C:\app\oracle\product\21c\dbhomeXE`
- Keep default unless disk space is an issue
4. **Database Passwords**
- Enter password for SYS and SYSTEM: `romfastsoft`
- Confirm password
- **Important:** Remember this password!
5. **Summary** - Review and click Install
6. **Installation Progress** - Wait (~10-20 minutes)
7. **Finish** - Note the connection information:
- Multitenant container database: XE
- Pluggable database: XEPDB1
- EM Express URL: https://localhost:5500/em/
---
## Post-Installation Configuration
### Verify Services Running
Open Services (services.msc) and verify:
| Service | Status | Startup Type |
|---------|--------|--------------|
| OracleServiceXE | Running | Automatic |
| OracleOraDB21Home1TNSListener | Running | Automatic |
Or via PowerShell:
```powershell
Get-Service Oracle* | Format-Table Name, Status, StartType
```
### Test Connection
```powershell
# Set Oracle environment
$env:ORACLE_HOME = "C:\app\oracle\product\21c\dbhomeXE"
$env:PATH = "$env:ORACLE_HOME\bin;$env:PATH"
# Test connection to CDB
sqlplus system/romfastsoft@localhost:1521/XE
# Test connection to PDB (for applications)
sqlplus system/romfastsoft@localhost:1521/XEPDB1
```
Expected output:
```
Connected to:
Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
SQL>
```
### Configure for Old Client Compatibility
If using Instant Client 10/11 (ODBC), configure `sqlnet.ora`:
```powershell
# Edit sqlnet.ora
notepad C:\app\oracle\product\21c\dbhomeXE\network\admin\sqlnet.ora
```
Add these lines:
```
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
```
Reload listener:
```powershell
lsnrctl reload
```
---
## CDB/PDB Architecture
Oracle XE uses Container Database (CDB) architecture:
```
+---------------------------------------------+
| CDB: XE |
| +---------------------------------------+ |
| | CDB$ROOT - System, SYS objects | |
| +---------------------------------------+ |
| +---------------------------------------+ |
| | PDB$SEED - Template (read-only) | |
| +---------------------------------------+ |
| +---------------------------------------+ |
| | XEPDB1 - Application Data (ROA) | |
| +---------------------------------------+ |
+---------------------------------------------+
```
| Container | Purpose | Connect To |
|-----------|---------|------------|
| XE (CDB$ROOT) | Administration, SYS | Admin only |
| XEPDB1 | Application data | ROA applications |
> **Important:** Always connect to **XEPDB1** for ROA operations, not XE!
---
## Verify PDB Status
```sql
-- Connect as SYSDBA
sqlplus sys/romfastsoft@localhost:1521/XE as sysdba
-- Check PDB status
SELECT name, open_mode FROM v$pdbs;
-- Expected output:
-- NAME OPEN_MODE
-- --------- ----------
-- PDB$SEED READ ONLY
-- XEPDB1 READ WRITE
```
If XEPDB1 is MOUNTED (not READ WRITE):
```sql
ALTER PLUGGABLE DATABASE XEPDB1 OPEN;
ALTER PLUGGABLE DATABASE XEPDB1 SAVE STATE;
```
---
## Create DMPDIR Directory
```sql
-- Connect to PDB
sqlplus sys/romfastsoft@localhost:1521/XEPDB1 as sysdba
-- Create Windows directory
host mkdir C:\DMPDIR
-- Create Oracle DIRECTORY object
CREATE OR REPLACE DIRECTORY DMPDIR AS 'C:\DMPDIR';
GRANT READ, WRITE ON DIRECTORY DMPDIR TO PUBLIC;
-- Verify
SELECT directory_name, directory_path FROM dba_directories WHERE directory_name = 'DMPDIR';
```
---
## Configure Password Policy
Disable password expiration for application users:
```sql
-- Connect to PDB
sqlplus sys/romfastsoft@localhost:1521/XEPDB1 as sysdba
-- Modify DEFAULT profile
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_TIME UNLIMITED;
ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_MAX UNLIMITED;
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED;
-- Verify
SELECT resource_name, limit FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_type = 'PASSWORD';
```
---
## Enterprise Manager Express
Access EM Express web interface:
```
https://localhost:5500/em/
```
Login:
- Username: system
- Password: romfastsoft
- Container: XEPDB1 (or leave empty for CDB)
---
## Memory Configuration
Check current memory settings:
```sql
SHOW PARAMETER memory;
SHOW PARAMETER sga;
SHOW PARAMETER pga;
```
XE defaults (cannot exceed due to license):
- SGA: 2 GB max
- PGA: 2 GB max
For better performance within limits:
```sql
-- Automatic memory management
ALTER SYSTEM SET MEMORY_TARGET = 2G SCOPE = SPFILE;
ALTER SYSTEM SET MEMORY_MAX_TARGET = 2G SCOPE = SPFILE;
```
---
## Troubleshooting
### OracleServiceXE Not Starting
1. Check Windows Event Viewer for errors
2. Verify disk space (need 15+ GB free)
3. Check Oracle alert log:
```powershell
Get-Content C:\app\oracle\diag\rdbms\xe\XE\trace\alert_XE.log -Tail 50
```
### Cannot Connect to XEPDB1
```sql
-- Connect to CDB
sqlplus sys/romfastsoft@localhost:1521/XE as sysdba
-- Check PDB status
SELECT name, open_mode FROM v$pdbs;
-- Open if mounted
ALTER PLUGGABLE DATABASE XEPDB1 OPEN;
ALTER PLUGGABLE DATABASE XEPDB1 SAVE STATE;
```
### ORA-12514: TNS listener does not know of service
```powershell
# Check listener status
lsnrctl status
lsnrctl services
# Restart listener
lsnrctl stop
lsnrctl start
```
### Uninstall Oracle XE
If needed, run the universal installer in deinstall mode:
```powershell
C:\app\oracle\product\21c\dbhomeXE\deinstall\deinstall.bat
```
Or via Control Panel > Programs and Features.
---
## Next Steps
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`
See main `README.md` for complete workflow.
---
**Last Updated:** 2026-01-28
**Project:** ROMFASTSQL - Oracle XE Installation Guide

View File

@@ -0,0 +1,144 @@
# =============================================================================
# Oracle Data Pump Import Parameter File - Company Schema Template
# =============================================================================
#
# Purpose: Template for importing company schemas (FIRMANOUA, COMPANY1, etc.)
#
# Usage:
# 1. Copy this file to import-COMPANYNAME.par
# 2. Replace COMPANY_NAME with actual schema name
# 3. Run: impdp system/password@service parfile=import-COMPANYNAME.par
#
# Or create dynamically:
# $company = "FIRMA1"
# (Get-Content import-company.par) -replace 'COMPANY_NAME', $company |
# Set-Content "import-$company.par"
# impdp system/pass@service parfile="import-$company.par"
#
# Prerequisites:
# 1. DMPDIR directory exists
# 2. COMPANY_NAME.dmp file is in C:\DMPDIR
# 3. COMPANY_NAME user created with appropriate tablespace quota
#
# =============================================================================
# -----------------------------------------------------------------------------
# Source and Destination
# -----------------------------------------------------------------------------
# Oracle directory object containing DMP files
DIRECTORY=DMPDIR
# Source dump file name
# IMPORTANT: Replace COMPANY_NAME with actual company name
DUMPFILE=COMPANY_NAME.dmp
# Import log file (will be created in DMPDIR)
LOGFILE=import_COMPANY_NAME.log
# -----------------------------------------------------------------------------
# Schema Configuration
# -----------------------------------------------------------------------------
# Schema mapping (source:target)
# Use when source and target schema names are the same
REMAP_SCHEMA=COMPANY_NAME:COMPANY_NAME
# Alternative: If importing to different schema name
# REMAP_SCHEMA=OLD_COMPANY:NEW_COMPANY
# -----------------------------------------------------------------------------
# Import Behavior
# -----------------------------------------------------------------------------
# Action when table already exists:
# SKIP - Skip existing tables (preserves existing data) - USE FOR MIGRATION
# APPEND - Add rows to existing tables
# TRUNCATE - Delete existing rows, then import
# REPLACE - Drop and recreate tables - USE FOR FRESH INSTALL
TABLE_EXISTS_ACTION=SKIP
# Transform OID to avoid conflicts
TRANSFORM=OID:N
# -----------------------------------------------------------------------------
# Performance Settings
# -----------------------------------------------------------------------------
# Number of parallel worker processes
PARALLEL=2
# -----------------------------------------------------------------------------
# Tablespace Remapping
# -----------------------------------------------------------------------------
# Remap tablespace if source uses different tablespace
# Common scenario: source uses ROA tablespace, target uses USERS
# REMAP_TABLESPACE=ROA:USERS
# If source uses multiple tablespaces:
# REMAP_TABLESPACE=ROA:USERS,ROA2:USERS,SYSTEM:USERS
# -----------------------------------------------------------------------------
# Exclusions
# -----------------------------------------------------------------------------
# Exclude statistics (will be recalculated after import)
EXCLUDE=STATISTICS
# Exclude grants (will be recreated by setup scripts)
# EXCLUDE=GRANT
# Exclude specific objects
# EXCLUDE=TABLE:"='TEMP%'"
# EXCLUDE=INDEX:"='IDX_LOG%'"
# -----------------------------------------------------------------------------
# Data Filtering (Optional)
# -----------------------------------------------------------------------------
# Filter specific tables
# QUERY=TABLEDATA:"WHERE ROWNUM < 1000"
# Include only specific tables
# INCLUDE=TABLE:"IN ('TABLE1','TABLE2')"
# -----------------------------------------------------------------------------
# Advanced Options
# -----------------------------------------------------------------------------
# Skip errors and continue
# DATA_OPTIONS=SKIP_CONSTRAINT_ERRORS
# Disable logging during import (faster but no recovery)
# TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y
# =============================================================================
# Expected Objects in Company Schema:
#
# - Tables: gestiune, contabilitate, salarii (~200 tables)
# - Views: Various reports and lookups (~100 views)
# - Packages: Business logic packages (~50)
# - Procedures/Functions: Various (~200)
# - Triggers: Various (~100)
# - Indexes: Performance indexes (~500)
#
# Total: ~3000+ objects
# =============================================================================
# =============================================================================
# Post-Import Steps:
#
# 1. Gather statistics:
# EXEC DBMS_STATS.GATHER_SCHEMA_STATS('COMPANY_NAME');
#
# 2. Recompile invalid objects:
# EXEC UTL_RECOMP.RECOMP_SERIAL('COMPANY_NAME');
#
# 3. Create public synonym (if needed):
# CREATE PUBLIC SYNONYM table_name FOR COMPANY_NAME.table_name;
#
# 4. Grant privileges:
# GRANT SELECT ON COMPANY_NAME.table_name TO PUBLIC;
#
# =============================================================================

View File

@@ -0,0 +1,104 @@
# =============================================================================
# Oracle Data Pump Import Parameter File - CONTAFIN_ORACLE Schema
# =============================================================================
#
# Purpose: Import CONTAFIN_ORACLE schema (common schema with rights, updates)
#
# Usage:
# impdp system/password@service parfile=import-contafin.par
#
# Or with explicit password prompt:
# impdp system@service parfile=import-contafin.par
#
# Prerequisites:
# 1. DMPDIR directory exists: CREATE DIRECTORY DMPDIR AS 'C:\DMPDIR';
# 2. contafin_oracle.dmp file is in C:\DMPDIR
# 3. CONTAFIN_ORACLE user created (or will be created by import)
#
# =============================================================================
# -----------------------------------------------------------------------------
# Source and Destination
# -----------------------------------------------------------------------------
# Oracle directory object containing DMP files
DIRECTORY=DMPDIR
# Source dump file name
DUMPFILE=contafin_oracle.dmp
# Import log file (will be created in DMPDIR)
LOGFILE=import_contafin_oracle.log
# -----------------------------------------------------------------------------
# Schema Configuration
# -----------------------------------------------------------------------------
# Schema to import
SCHEMAS=CONTAFIN_ORACLE
# -----------------------------------------------------------------------------
# Import Behavior
# -----------------------------------------------------------------------------
# Action when table already exists:
# SKIP - Skip existing tables (preserves data)
# APPEND - Add rows to existing tables
# TRUNCATE - Delete existing rows, then import
# REPLACE - Drop and recreate tables
TABLE_EXISTS_ACTION=REPLACE
# Transform OID to avoid conflicts
# Required when importing between different databases
TRANSFORM=OID:N
# -----------------------------------------------------------------------------
# Performance Settings
# -----------------------------------------------------------------------------
# Number of parallel worker processes
# Adjust based on CPU cores available
PARALLEL=2
# -----------------------------------------------------------------------------
# Exclusions (Optional)
# -----------------------------------------------------------------------------
# Exclude specific object types if needed
# EXCLUDE=STATISTICS
# EXCLUDE=INDEX:"='IDX_TEMP%'"
# -----------------------------------------------------------------------------
# Remapping (Optional)
# -----------------------------------------------------------------------------
# Remap tablespace if source uses different tablespace name
# REMAP_TABLESPACE=SOURCE_TS:ROA
# Remap schema if importing to different schema name
# REMAP_SCHEMA=CONTAFIN_ORACLE:CONTAFIN_ORACLE
# -----------------------------------------------------------------------------
# Advanced Options
# -----------------------------------------------------------------------------
# Continue import even if some objects fail
# CONTENT=ALL
# Import metadata only (no data)
# CONTENT=METADATA_ONLY
# Import data only (no DDL)
# CONTENT=DATA_ONLY
# =============================================================================
# Expected Objects in CONTAFIN_ORACLE:
#
# - Tables: NOM_FIRME, NOM_USERI, NOM_DREPTURI, etc. (~50 tables)
# - Views: Various application views (~20 views)
# - Packages: PACK_MIGRARE, AUTH_PACK, etc. (~10 packages)
# - Procedures/Functions: Various utilities (~50)
# - Triggers: Various (~20)
#
# Total: ~300+ objects
# =============================================================================

View File

@@ -0,0 +1,477 @@
#Requires -Version 5.1
<#
.SYNOPSIS
Initial database setup for ROA Oracle.
.DESCRIPTION
Performs initial database configuration including:
- Validates Oracle installation
- Auto-detects CDB vs non-CDB configuration
- Configures DEFAULT_PROFILE (disables password expiry)
- Configures sqlnet.ora for Instant Client 10/11 compatibility
- Creates tablespace ROA
- Creates user CONTAFIN_ORACLE with required privileges
.PARAMETER OracleHome
Oracle home directory. If not specified, auto-detects from registry or environment.
.PARAMETER ServiceName
Database service name. Auto-detects: ROA for non-CDB, XEPDB1 for Oracle XE CDB.
.PARAMETER SystemPassword
SYSTEM user password. Default: romfastsoft
.PARAMETER ContafinPassword
CONTAFIN_ORACLE user password. Default: ROMFASTSOFT
.PARAMETER DatafileDir
Directory for tablespace datafiles. Auto-detects if not specified.
.PARAMETER TablespaceSize
Initial size of ROA tablespace in MB. Default: 1000
.PARAMETER SkipSqlnetConfig
Skip sqlnet.ora configuration.
.EXAMPLE
.\01-setup-database.ps1
.EXAMPLE
.\01-setup-database.ps1 -ServiceName "XEPDB1" -SystemPassword "mypassword"
.EXAMPLE
.\01-setup-database.ps1 -OracleHome "C:\app\oracle\product\21c\dbhomeXE" -DatafileDir "D:\oradata"
.NOTES
File Name : 01-setup-database.ps1
Prerequisite : Oracle Database installed, PowerShell 5.1+
Copyright 2024 : ROMFAST
#>
[CmdletBinding()]
param(
[Parameter(Mandatory = $false)]
[string]$OracleHome,
[Parameter(Mandatory = $false)]
[string]$ServiceName,
[Parameter(Mandatory = $false)]
[string]$SystemPassword = "romfastsoft",
[Parameter(Mandatory = $false)]
[string]$ContafinPassword = "ROMFASTSOFT",
[Parameter(Mandatory = $false)]
[string]$DatafileDir,
[Parameter(Mandatory = $false)]
[int]$TablespaceSize = 1000,
[Parameter(Mandatory = $false)]
[switch]$SkipSqlnetConfig
)
$ErrorActionPreference = 'Stop'
# Source library functions
. "$PSScriptRoot\lib\logging-functions.ps1"
. "$PSScriptRoot\lib\oracle-functions.ps1"
# Initialize logging
$logPath = Join-Path $PSScriptRoot "..\logs\01-setup-database_$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
Initialize-LogFile -LogPath $logPath -ScriptName "01-setup-database.ps1"
try {
Write-LogSection "ROA Database Initial Setup"
# Step 1: Validate Oracle installation
Write-Log "Detecting Oracle installation..."
$oraHome = Get-OracleHome -OracleHome $OracleHome
Write-LogSuccess "Oracle Home: $oraHome"
# Step 2: Auto-detect service name if not specified
if (-not $ServiceName) {
Write-Log "Auto-detecting service name..."
# First try to connect to XE to check CDB status
try {
$version = Get-OracleVersion -OracleHome $oraHome -ServiceName "XE" -Password $SystemPassword
if ($version.IsCDB) {
$ServiceName = "XEPDB1"
Write-Log "Detected CDB installation, using PDB: XEPDB1"
}
else {
$ServiceName = "XE"
Write-Log "Detected non-CDB installation, using service: XE"
}
}
catch {
# Try ROA as fallback
try {
$null = Test-OracleConnection -OracleHome $oraHome -ServiceName "ROA" -Password $SystemPassword
$ServiceName = "ROA"
Write-Log "Using existing service: ROA"
}
catch {
$ServiceName = "XEPDB1"
Write-Log "Defaulting to XEPDB1"
}
}
}
Write-LogSuccess "Service Name: $ServiceName"
# Step 3: Test connection
Write-Log "Testing database connection..."
if (-not (Test-OracleConnection -OracleHome $oraHome -ServiceName $ServiceName -Password $SystemPassword)) {
throw "Cannot connect to database. Please verify ServiceName and SystemPassword."
}
Write-LogSuccess "Database connection successful"
# Get version info
$versionInfo = Get-OracleVersion -OracleHome $oraHome -ServiceName $ServiceName -Password $SystemPassword
Write-Log "Oracle Version: $($versionInfo.Version)"
Write-Log "Oracle Edition: $($versionInfo.Edition)"
Write-Log "CDB Mode: $($versionInfo.IsCDB)"
# Check container info
$containerInfo = Test-PDB -OracleHome $oraHome -ServiceName $ServiceName -Password $SystemPassword
Write-Log "Container: $($containerInfo.ContainerName)"
if ($containerInfo.IsPDB) {
Write-Log "Connected to PDB (Pluggable Database)"
}
elseif ($containerInfo.IsNonCDB) {
Write-Log "Connected to non-CDB database"
}
# Step 4: Configure DEFAULT_PROFILE (no password expiry)
Write-LogSection "Configuring DEFAULT_PROFILE"
$profileSql = @"
SET ECHO OFF FEEDBACK ON VERIFY OFF
PROMPT Configuring DEFAULT_PROFILE - disabling password expiration...
ALTER PROFILE DEFAULT LIMIT
PASSWORD_LIFE_TIME UNLIMITED
PASSWORD_GRACE_TIME UNLIMITED
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS UNLIMITED
PASSWORD_LOCK_TIME UNLIMITED;
COMMIT;
SELECT 'PROFILE_CONFIGURED' FROM dual;
EXIT;
"@
$result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYS" -Password $SystemPassword -SqlCommand $profileSql -AsSysdba
if ($result -match "PROFILE_CONFIGURED") {
Write-LogSuccess "DEFAULT_PROFILE configured successfully"
}
else {
Write-LogWarning "Could not verify profile configuration"
Write-LogDebug $result
}
# Step 5: Configure sqlnet.ora for old client compatibility
if (-not $SkipSqlnetConfig) {
Write-LogSection "Configuring sqlnet.ora"
# Oracle 21c uses read-only Oracle Home - config goes to 'homes' directory
# Check for Oracle 21c homes directory structure first
$oraBase = Split-Path (Split-Path (Split-Path $oraHome -Parent) -Parent) -Parent
$homesDir = Join-Path $oraBase "product\21c\homes"
# Find the actual Oracle Base Home (where user configs go)
$networkAdmin = $null
if (Test-Path $homesDir) {
# Oracle 21c with read-only Oracle Home
$oraBaseHome = Get-ChildItem -Path $homesDir -Directory |
Where-Object { $_.Name -match "OraDB" } |
Select-Object -First 1
if ($oraBaseHome) {
$networkAdmin = Join-Path $oraBaseHome.FullName "network\admin"
Write-Log "Detected Oracle 21c read-only Home structure"
Write-Log "Using Oracle Base Home: $($oraBaseHome.FullName)"
}
}
# Fallback to traditional location
if (-not $networkAdmin -or -not (Test-Path (Split-Path $networkAdmin -Parent))) {
$networkAdmin = Join-Path $oraHome "network\admin"
Write-Log "Using traditional Oracle Home network/admin location"
}
$sqlnetOra = Join-Path $networkAdmin "sqlnet.ora"
if (-not (Test-Path -Path $networkAdmin)) {
New-Item -ItemType Directory -Path $networkAdmin -Force | Out-Null
}
# Backup existing sqlnet.ora
if (Test-Path -Path $sqlnetOra) {
$backupPath = "$sqlnetOra.bak_$(Get-Date -Format 'yyyyMMdd_HHmmss')"
Copy-Item -Path $sqlnetOra -Destination $backupPath -Force
Write-Log "Backed up existing sqlnet.ora to $backupPath"
}
# Create sqlnet.ora with compatibility settings
$sqlnetContent = @"
# sqlnet.ora - ROA Oracle Configuration
# Generated by 01-setup-database.ps1 on $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')
# Allow connections from old Oracle Instant Client 10g/11g (ODBC drivers)
# These clients don't support newer authentication methods
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
# Disable encryption requirement for old clients
SQLNET.ENCRYPTION_SERVER = ACCEPTED
SQLNET.CRYPTO_CHECKSUM_SERVER = ACCEPTED
# Connection timeout settings
SQLNET.INBOUND_CONNECT_TIMEOUT = 60
SQLNET.RECV_TIMEOUT = 30
SQLNET.SEND_TIMEOUT = 30
# TNS Names directory
NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)
"@
Set-Content -Path $sqlnetOra -Value $sqlnetContent -Encoding ASCII
Write-LogSuccess "sqlnet.ora configured at $sqlnetOra"
Write-Log "Old client compatibility enabled (SQLNET.ALLOWED_LOGON_VERSION=8)"
# Restart listener to apply changes
Write-Log "Restarting listener to apply sqlnet.ora changes..."
$lsnrctl = Join-Path $oraHome "bin\lsnrctl.exe"
if (Test-Path $lsnrctl) {
try {
& $lsnrctl stop 2>&1 | Out-Null
Start-Sleep -Seconds 3
$lsnrOutput = & $lsnrctl start 2>&1
Write-LogSuccess "Listener restarted successfully"
# Wait for services to register
Write-Log "Waiting for database services to register with listener..."
Start-Sleep -Seconds 10
}
catch {
Write-LogWarning "Could not restart listener: $_"
Write-Log "Please restart listener manually: lsnrctl stop && lsnrctl start"
}
}
}
else {
Write-Log "Skipping sqlnet.ora configuration as requested"
}
# Step 6: Get datafile path
if (-not $DatafileDir) {
Write-Log "Auto-detecting datafile path..."
$DatafileDir = Get-DatafilePath -OracleHome $oraHome -ServiceName $ServiceName -Password $SystemPassword
}
Write-LogSuccess "Datafile directory: $DatafileDir"
# Step 7: Create tablespace ROA
Write-LogSection "Creating Tablespace ROA"
# Check if tablespace already exists
$checkTsSql = @"
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT 'TS_EXISTS' FROM dba_tablespaces WHERE tablespace_name = 'ROA';
EXIT;
"@
$tsResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $checkTsSql -Silent
if ($tsResult -match "TS_EXISTS") {
Write-LogWarning "Tablespace ROA already exists, skipping creation"
}
else {
$datafilePath = Join-Path $DatafileDir "TS_ROA.DBF"
$createTsSql = @"
SET ECHO OFF FEEDBACK ON VERIFY OFF
PROMPT Creating tablespace ROA...
CREATE SMALLFILE TABLESPACE "ROA"
DATAFILE '$datafilePath' SIZE ${TablespaceSize}M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
LOGGING
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
COMMIT;
SELECT 'TS_CREATED' FROM dual;
EXIT;
"@
$result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $createTsSql
if ($result -match "TS_CREATED") {
Write-LogSuccess "Tablespace ROA created successfully"
Write-Log "Datafile: $datafilePath"
}
else {
Write-LogError "Failed to create tablespace ROA"
Write-LogDebug $result
throw "Tablespace creation failed"
}
}
# Step 8: Create user CONTAFIN_ORACLE
Write-LogSection "Creating User CONTAFIN_ORACLE"
# Check if user already exists
if (Test-OracleUser -OracleHome $oraHome -ServiceName $ServiceName `
-Password $SystemPassword -SchemaName "CONTAFIN_ORACLE") {
Write-LogWarning "User CONTAFIN_ORACLE already exists"
# Update password
$updatePwdSql = @"
SET ECHO OFF FEEDBACK ON VERIFY OFF
ALTER USER CONTAFIN_ORACLE IDENTIFIED BY "$ContafinPassword";
COMMIT;
SELECT 'PWD_UPDATED' FROM dual;
EXIT;
"@
$result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $updatePwdSql -Silent
if ($result -match "PWD_UPDATED") {
Write-Log "Password updated for CONTAFIN_ORACLE"
}
}
else {
$createUserSql = @"
SET ECHO OFF FEEDBACK ON VERIFY OFF
PROMPT Creating user CONTAFIN_ORACLE...
CREATE USER CONTAFIN_ORACLE
IDENTIFIED BY "$ContafinPassword"
DEFAULT TABLESPACE ROA
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT;
PROMPT Granting role privileges...
GRANT CONNECT TO CONTAFIN_ORACLE;
GRANT RESOURCE TO CONTAFIN_ORACLE;
PROMPT Granting system privileges...
GRANT CREATE ANY CONTEXT TO CONTAFIN_ORACLE;
GRANT CREATE SESSION TO CONTAFIN_ORACLE;
GRANT CREATE VIEW TO CONTAFIN_ORACLE;
GRANT DELETE ANY TABLE TO CONTAFIN_ORACLE;
GRANT DROP ANY CONTEXT 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;
GRANT CREATE PUBLIC SYNONYM TO CONTAFIN_ORACLE;
GRANT DROP PUBLIC SYNONYM TO CONTAFIN_ORACLE;
COMMIT;
SELECT 'USER_CREATED' FROM dual;
EXIT;
"@
$result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $createUserSql
if ($result -match "USER_CREATED") {
Write-LogSuccess "User CONTAFIN_ORACLE created successfully"
}
else {
Write-LogError "Failed to create user CONTAFIN_ORACLE"
Write-LogDebug $result
throw "User creation failed"
}
}
# Verify user privileges
$verifyUserSql = @"
SET PAGESIZE 100 FEEDBACK OFF VERIFY OFF HEADING ON ECHO OFF LINESIZE 200
SELECT privilege FROM dba_sys_privs WHERE grantee = 'CONTAFIN_ORACLE' ORDER BY privilege;
EXIT;
"@
$privileges = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $verifyUserSql -Silent
Write-Log "CONTAFIN_ORACLE privileges verified"
# Step 9: Create DMPDIR directory for Data Pump
Write-LogSection "Creating Data Pump Directory"
$dmpDir = "C:\DMPDIR"
New-OracleDirectory -OracleHome $oraHome -ServiceName $ServiceName `
-Password $SystemPassword -DirectoryName "DMPDIR" -DirectoryPath $dmpDir
Write-LogSuccess "Data Pump directory DMPDIR created: $dmpDir"
# Step 10: Reset passwords with 10G verifier (required for old client auth)
# After sqlnet.ora is configured, passwords must be reset to generate 10G hash
if (-not $SkipSqlnetConfig) {
Write-LogSection "Resetting Passwords for Old Client Compatibility"
Write-Log "Resetting passwords to generate 10G password verifiers..."
$resetPwdSql = @"
SET ECHO OFF FEEDBACK ON VERIFY OFF
-- Reset CONTAFIN_ORACLE password to generate 10G verifier
ALTER USER CONTAFIN_ORACLE IDENTIFIED BY "$ContafinPassword";
-- Verify password versions
SELECT USERNAME, PASSWORD_VERSIONS FROM DBA_USERS WHERE USERNAME = 'CONTAFIN_ORACLE';
SELECT 'PWD_RESET_DONE' FROM DUAL;
EXIT;
"@
$result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $resetPwdSql
if ($result -match "PWD_RESET_DONE") {
Write-LogSuccess "Password reset completed - 10G verifier now available"
if ($result -match "10G") {
Write-Log "Verified: Password has 10G verifier for old client compatibility"
}
}
else {
Write-LogWarning "Could not verify password reset"
}
}
# Summary
Write-LogSection "Setup Complete"
Write-LogSuccess "Database initial setup completed successfully!"
Write-Log ""
Write-Log "Summary:"
Write-Log " Oracle Home: $oraHome"
Write-Log " Service Name: $ServiceName"
Write-Log " Oracle Version: $($versionInfo.Version)"
Write-Log " Container: $($containerInfo.ContainerName)"
Write-Log " Tablespace ROA: $DatafileDir\TS_ROA.DBF"
Write-Log " User: CONTAFIN_ORACLE"
Write-Log " Data Pump Dir: DMPDIR -> $dmpDir"
if (-not $SkipSqlnetConfig) {
Write-Log " Old Client Auth: Enabled (sqlnet.ora + 10G verifier)"
}
Write-Log ""
Write-Log "Next steps:"
Write-Log " 1. Run 02-create-sys-objects.ps1 to install SYS objects"
Write-Log " 2. Run 03-import-contafin.ps1 to import CONTAFIN_ORACLE schema"
Close-LogFile -Success $true
exit 0
}
catch {
Write-LogError "Setup failed: $_"
Write-LogError $_.ScriptStackTrace
Close-LogFile -Success $false
exit 1
}

View File

@@ -0,0 +1,432 @@
#Requires -Version 5.1
<#
.SYNOPSIS
Install SYS objects for ROA Oracle.
.DESCRIPTION
Executes SQL scripts to create required SYS-owned objects including:
- AUTH_PACK package
- AUTH_DETALII, AUTH_SERII tables
- NEWSCHEMA, NEWSCHEMAPOST procedures
- NEWSCHEMAPROGRESS function
- PACK_UPDATE, PACK_UTILS packages
- Public synonyms and grants
.PARAMETER OracleHome
Oracle home directory. If not specified, auto-detects.
.PARAMETER ServiceName
Database service name. Default: XEPDB1
.PARAMETER SystemPassword
SYSTEM/SYS user password. Default: romfastsoft
.PARAMETER SqlScriptsDir
Directory containing SYS SQL scripts. Default: ..\sql
.EXAMPLE
.\02-create-sys-objects.ps1
.EXAMPLE
.\02-create-sys-objects.ps1 -ServiceName "ROA" -SystemPassword "mypassword"
.NOTES
File Name : 02-create-sys-objects.ps1
Prerequisite : Run 01-setup-database.ps1 first
Copyright 2024 : ROMFAST
#>
[CmdletBinding()]
param(
[Parameter(Mandatory = $false)]
[string]$OracleHome,
[Parameter(Mandatory = $false)]
[string]$ServiceName = "XEPDB1",
[Parameter(Mandatory = $false)]
[string]$SystemPassword = "romfastsoft",
[Parameter(Mandatory = $false)]
[string]$SqlScriptsDir
)
$ErrorActionPreference = 'Stop'
# Source library functions
. "$PSScriptRoot\lib\logging-functions.ps1"
. "$PSScriptRoot\lib\oracle-functions.ps1"
# Initialize logging
$logPath = Join-Path $PSScriptRoot "..\logs\02-create-sys-objects_$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
Initialize-LogFile -LogPath $logPath -ScriptName "02-create-sys-objects.ps1"
try {
Write-LogSection "Installing SYS Objects"
# Validate Oracle installation
$oraHome = Get-OracleHome -OracleHome $OracleHome
Write-LogSuccess "Oracle Home: $oraHome"
# Test connection
Write-Log "Testing database connection..."
if (-not (Test-OracleConnection -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYS" -Password $SystemPassword -AsSysdba)) {
throw "Cannot connect to database as SYS. Please verify ServiceName and SystemPassword."
}
Write-LogSuccess "Database connection successful"
# Determine SQL scripts directory
if (-not $SqlScriptsDir) {
$SqlScriptsDir = Join-Path $PSScriptRoot "..\sql"
}
$sysObjectsScript = Join-Path $SqlScriptsDir "sys-objects.sql"
if (-not (Test-Path -Path $sysObjectsScript)) {
Write-LogWarning "sys-objects.sql not found at $sysObjectsScript"
Write-Log "Creating sys-objects.sql from embedded SQL..."
# Create the sql directory if it doesn't exist
if (-not (Test-Path -Path $SqlScriptsDir)) {
New-Item -ItemType Directory -Path $SqlScriptsDir -Force | Out-Null
}
# Embedded SYS objects SQL - minimal set for ROA
$sysObjectsSql = @"
-- sys-objects.sql
-- SYS objects required for ROA Oracle
-- Run as SYS with SYSDBA privilege
SET ECHO ON FEEDBACK ON VERIFY OFF SERVEROUTPUT ON
PROMPT
PROMPT =============================================
PROMPT Creating SYS objects for ROA
PROMPT =============================================
PROMPT
-- Create DMPDIR if not exists
PROMPT Creating directory DMPDIR...
CREATE OR REPLACE DIRECTORY DMPDIR AS 'C:\DMPDIR';
GRANT READ, WRITE ON DIRECTORY DMPDIR TO PUBLIC;
-- AUTH_DETALII table
PROMPT Creating table AUTH_DETALII...
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE SYS.AUTH_DETALII CASCADE CONSTRAINTS';
EXCEPTION WHEN OTHERS THEN NULL;
END;
/
CREATE TABLE SYS.AUTH_DETALII (
ID_DETALIU NUMBER NOT NULL,
ID_PROGRAM NUMBER NOT NULL,
CAMP_DETALIU VARCHAR2(100),
VAL_DETALIU VARCHAR2(500),
CONSTRAINT PK_AUTH_DETALII PRIMARY KEY (ID_DETALIU)
);
GRANT SELECT, INSERT, UPDATE, DELETE ON SYS.AUTH_DETALII TO PUBLIC;
CREATE PUBLIC SYNONYM AUTH_DETALII FOR SYS.AUTH_DETALII;
-- AUTH_SERII table
PROMPT Creating table AUTH_SERII...
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE SYS.AUTH_SERII CASCADE CONSTRAINTS';
EXCEPTION WHEN OTHERS THEN NULL;
END;
/
CREATE TABLE SYS.AUTH_SERII (
ID_PROGRAM NUMBER NOT NULL,
SERIE VARCHAR2(50),
NR_UTIL NUMBER,
DATA_VAL DATE,
CONSTRAINT PK_AUTH_SERII PRIMARY KEY (ID_PROGRAM)
);
GRANT SELECT, INSERT, UPDATE, DELETE ON SYS.AUTH_SERII TO PUBLIC;
CREATE PUBLIC SYNONYM AUTH_SERII FOR SYS.AUTH_SERII;
-- AUTH_PACK package specification
PROMPT Creating package AUTH_PACK...
CREATE OR REPLACE PACKAGE SYS.AUTH_PACK AS
FUNCTION selecteaza_serie(p_id_program NUMBER) RETURN VARCHAR2;
FUNCTION selecteaza_nr_util(p_id_program NUMBER) RETURN NUMBER;
FUNCTION selecteaza_data_val(p_id_program NUMBER) RETURN DATE;
PROCEDURE actualizeaza_serie(p_id_program NUMBER, p_serie VARCHAR2, p_nr_util NUMBER, p_data_val DATE);
END AUTH_PACK;
/
-- AUTH_PACK package body
CREATE OR REPLACE PACKAGE BODY SYS.AUTH_PACK AS
FUNCTION selecteaza_serie(p_id_program NUMBER) RETURN VARCHAR2 IS
v_serie VARCHAR2(50);
BEGIN
SELECT serie INTO v_serie FROM SYS.AUTH_SERII WHERE id_program = p_id_program;
RETURN v_serie;
EXCEPTION
WHEN NO_DATA_FOUND THEN RETURN NULL;
END;
FUNCTION selecteaza_nr_util(p_id_program NUMBER) RETURN NUMBER IS
v_nr_util NUMBER;
BEGIN
SELECT nr_util INTO v_nr_util FROM SYS.AUTH_SERII WHERE id_program = p_id_program;
RETURN v_nr_util;
EXCEPTION
WHEN NO_DATA_FOUND THEN RETURN NULL;
END;
FUNCTION selecteaza_data_val(p_id_program NUMBER) RETURN DATE IS
v_data_val DATE;
BEGIN
SELECT data_val INTO v_data_val FROM SYS.AUTH_SERII WHERE id_program = p_id_program;
RETURN v_data_val;
EXCEPTION
WHEN NO_DATA_FOUND THEN RETURN NULL;
END;
PROCEDURE actualizeaza_serie(p_id_program NUMBER, p_serie VARCHAR2, p_nr_util NUMBER, p_data_val DATE) IS
BEGIN
MERGE INTO SYS.AUTH_SERII t
USING (SELECT p_id_program AS id_program FROM dual) s
ON (t.id_program = s.id_program)
WHEN MATCHED THEN
UPDATE SET serie = p_serie, nr_util = p_nr_util, data_val = p_data_val
WHEN NOT MATCHED THEN
INSERT (id_program, serie, nr_util, data_val)
VALUES (p_id_program, p_serie, p_nr_util, p_data_val);
COMMIT;
END;
END AUTH_PACK;
/
GRANT EXECUTE ON SYS.AUTH_PACK TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM AUTH_PACK FOR SYS.AUTH_PACK;
-- VAUTH_SERII view
PROMPT Creating view VAUTH_SERII...
CREATE OR REPLACE VIEW SYS.VAUTH_SERII 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;
GRANT SELECT ON SYS.VAUTH_SERII TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM VAUTH_SERII FOR SYS.VAUTH_SERII;
-- PACK_UPDATE package (minimal version)
PROMPT Creating package PACK_UPDATE...
CREATE OR REPLACE PACKAGE SYS.PACK_UPDATE AS
FUNCTION get_version RETURN VARCHAR2;
PROCEDURE execute_sql(p_sql VARCHAR2);
END PACK_UPDATE;
/
CREATE OR REPLACE PACKAGE BODY SYS.PACK_UPDATE AS
FUNCTION get_version RETURN VARCHAR2 IS
BEGIN
RETURN '1.0.0';
END;
PROCEDURE execute_sql(p_sql VARCHAR2) IS
BEGIN
EXECUTE IMMEDIATE p_sql;
EXCEPTION
WHEN OTHERS THEN
RAISE;
END;
END PACK_UPDATE;
/
GRANT EXECUTE ON SYS.PACK_UPDATE TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM PACK_UPDATE FOR SYS.PACK_UPDATE;
-- PACK_UTILS package (minimal version)
PROMPT Creating package PACK_UTILS...
CREATE OR REPLACE PACKAGE SYS.PACK_UTILS AS
FUNCTION get_db_version RETURN VARCHAR2;
FUNCTION get_instance_name RETURN VARCHAR2;
END PACK_UTILS;
/
CREATE OR REPLACE PACKAGE BODY SYS.PACK_UTILS AS
FUNCTION get_db_version RETURN VARCHAR2 IS
v_version VARCHAR2(100);
BEGIN
SELECT version_full INTO v_version FROM v`$instance;
RETURN v_version;
EXCEPTION
WHEN OTHERS THEN RETURN NULL;
END;
FUNCTION get_instance_name RETURN VARCHAR2 IS
v_instance VARCHAR2(100);
BEGIN
SELECT instance_name INTO v_instance FROM v`$instance;
RETURN v_instance;
EXCEPTION
WHEN OTHERS THEN RETURN NULL;
END;
END PACK_UTILS;
/
GRANT EXECUTE ON SYS.PACK_UTILS TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM PACK_UTILS FOR SYS.PACK_UTILS;
-- Grant UTL packages to PUBLIC
PROMPT Granting UTL packages...
GRANT EXECUTE ON UTL_FILE TO PUBLIC;
GRANT EXECUTE ON DBMS_LOCK TO PUBLIC;
-- Grant UTL packages to CONTAFIN_ORACLE specifically
GRANT EXECUTE ON UTL_INADDR TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_TCP TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_SMTP TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_HTTP TO CONTAFIN_ORACLE;
COMMIT;
PROMPT
PROMPT =============================================
PROMPT SYS objects created successfully
PROMPT =============================================
PROMPT
SELECT 'SYS_OBJECTS_COMPLETE' FROM dual;
EXIT;
"@
Set-Content -Path $sysObjectsScript -Value $sysObjectsSql -Encoding ASCII
Write-Log "Created sys-objects.sql"
}
# Execute SYS objects script
Write-LogSection "Executing sys-objects.sql"
$result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYS" -Password $SystemPassword -SqlFile $sysObjectsScript -AsSysdba
if ($result -match "SYS_OBJECTS_COMPLETE") {
Write-LogSuccess "SYS objects created successfully"
}
else {
Write-LogWarning "Script completed but could not verify success"
Write-LogDebug $result
}
# Verify created objects
Write-LogSection "Verifying SYS Objects"
$verifySql = @"
SET PAGESIZE 100 FEEDBACK OFF VERIFY OFF HEADING ON ECHO OFF LINESIZE 200
PROMPT
PROMPT === SYS Objects Status ===
PROMPT
SELECT object_name, object_type, status
FROM dba_objects
WHERE owner = 'SYS'
AND object_name IN ('AUTH_PACK', 'AUTH_DETALII', 'AUTH_SERII', 'VAUTH_SERII',
'PACK_UPDATE', 'PACK_UTILS', 'NEWSCHEMA', 'NEWSCHEMAPOST', 'NEWSCHEMAPROGRESS')
ORDER BY object_type, object_name;
PROMPT
PROMPT === Public Synonyms ===
PROMPT
SELECT synonym_name, table_owner, table_name
FROM dba_synonyms
WHERE owner = 'PUBLIC'
AND table_name IN ('AUTH_PACK', 'AUTH_DETALII', 'AUTH_SERII', 'VAUTH_SERII',
'PACK_UPDATE', 'PACK_UTILS', 'NEWSCHEMA', 'NEWSCHEMAPOST', 'NEWSCHEMAPROGRESS')
ORDER BY synonym_name;
EXIT;
"@
$verifyResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYS" -Password $SystemPassword -SqlCommand $verifySql -AsSysdba
Write-Host $verifyResult
# Count invalid objects
$invalidSql = @"
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT 'INVALID_COUNT:' || COUNT(*)
FROM dba_objects
WHERE owner = 'SYS'
AND object_name IN ('AUTH_PACK', 'AUTH_DETALII', 'AUTH_SERII', 'VAUTH_SERII',
'PACK_UPDATE', 'PACK_UTILS', 'NEWSCHEMA', 'NEWSCHEMAPOST', 'NEWSCHEMAPROGRESS')
AND status = 'INVALID';
EXIT;
"@
$invalidResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYS" -Password $SystemPassword -SqlCommand $invalidSql -AsSysdba -Silent
$invalidCount = 0
if ($invalidResult -match "INVALID_COUNT:(\d+)") {
$invalidCount = [int]$Matches[1]
}
if ($invalidCount -gt 0) {
Write-LogWarning "$invalidCount invalid SYS objects found"
Write-Log "Attempting to recompile invalid objects..."
$recompileSql = @"
SET SERVEROUTPUT ON
BEGIN
DBMS_UTILITY.COMPILE_SCHEMA('SYS', FALSE);
END;
/
EXIT;
"@
Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYS" -Password $SystemPassword -SqlCommand $recompileSql -AsSysdba -Silent
}
else {
Write-LogSuccess "All SYS objects are valid"
}
# Summary
Write-LogSection "Setup Complete"
Write-LogSuccess "SYS objects installation completed!"
Write-Log ""
Write-Log "Objects created:"
Write-Log " - AUTH_PACK package"
Write-Log " - AUTH_DETALII table"
Write-Log " - AUTH_SERII table"
Write-Log " - VAUTH_SERII view"
Write-Log " - PACK_UPDATE package"
Write-Log " - PACK_UTILS package"
Write-Log " - Public synonyms and grants"
Write-Log ""
Write-Log "Next steps:"
Write-Log " 1. Run 03-import-contafin.ps1 to import CONTAFIN_ORACLE schema"
Close-LogFile -Success $true
exit 0
}
catch {
Write-LogError "Setup failed: $_"
Write-LogError $_.ScriptStackTrace
Close-LogFile -Success $false
exit 1
}

View File

@@ -0,0 +1,312 @@
#Requires -Version 5.1
<#
.SYNOPSIS
Import CONTAFIN_ORACLE schema from Data Pump dump file.
.DESCRIPTION
Imports the CONTAFIN_ORACLE schema using Oracle Data Pump (impdp).
- Creates DMPDIR directory if not exists
- Runs impdp with optimal parameters
- Verifies import (object count, invalid objects)
.PARAMETER DumpFile
Path to the CONTAFIN_ORACLE DMP file. Required.
.PARAMETER OracleHome
Oracle home directory. If not specified, auto-detects.
.PARAMETER ServiceName
Database service name. Default: XEPDB1
.PARAMETER SystemPassword
SYSTEM user password. Default: romfastsoft
.PARAMETER DmpDir
Oracle directory path for Data Pump. Default: C:\DMPDIR
.PARAMETER TableExistsAction
What to do if table exists: SKIP, APPEND, TRUNCATE, REPLACE. Default: REPLACE
.PARAMETER Parallel
Number of parallel workers for import. Default: 2
.EXAMPLE
.\03-import-contafin.ps1 -DumpFile "C:\dumps\CONTAFIN_ORACLE.dmp"
.EXAMPLE
.\03-import-contafin.ps1 -DumpFile "D:\backups\contafin.dmp" -ServiceName "ROA" -SystemPassword "mypass"
.NOTES
File Name : 03-import-contafin.ps1
Prerequisite : Run 01-setup-database.ps1 and 02-create-sys-objects.ps1 first
Copyright 2024 : ROMFAST
#>
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[ValidateScript({ Test-Path $_ })]
[string]$DumpFile,
[Parameter(Mandatory = $false)]
[string]$OracleHome,
[Parameter(Mandatory = $false)]
[string]$ServiceName = "XEPDB1",
[Parameter(Mandatory = $false)]
[string]$SystemPassword = "romfastsoft",
[Parameter(Mandatory = $false)]
[string]$DmpDir = "C:\DMPDIR",
[Parameter(Mandatory = $false)]
[ValidateSet('SKIP', 'APPEND', 'TRUNCATE', 'REPLACE')]
[string]$TableExistsAction = "REPLACE",
[Parameter(Mandatory = $false)]
[int]$Parallel = 2
)
$ErrorActionPreference = 'Stop'
# Source library functions
. "$PSScriptRoot\lib\logging-functions.ps1"
. "$PSScriptRoot\lib\oracle-functions.ps1"
# Initialize logging
$logPath = Join-Path $PSScriptRoot "..\logs\03-import-contafin_$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
Initialize-LogFile -LogPath $logPath -ScriptName "03-import-contafin.ps1"
try {
Write-LogSection "Importing CONTAFIN_ORACLE Schema"
# Validate Oracle installation
$oraHome = Get-OracleHome -OracleHome $OracleHome
Write-LogSuccess "Oracle Home: $oraHome"
# Test connection
Write-Log "Testing database connection..."
if (-not (Test-OracleConnection -OracleHome $oraHome -ServiceName $ServiceName `
-Password $SystemPassword)) {
throw "Cannot connect to database. Please verify ServiceName and SystemPassword."
}
Write-LogSuccess "Database connection successful"
# Verify CONTAFIN_ORACLE user exists
Write-Log "Verifying CONTAFIN_ORACLE user exists..."
if (-not (Test-OracleUser -OracleHome $oraHome -ServiceName $ServiceName `
-Password $SystemPassword -SchemaName "CONTAFIN_ORACLE")) {
throw "User CONTAFIN_ORACLE does not exist. Run 01-setup-database.ps1 first."
}
Write-LogSuccess "User CONTAFIN_ORACLE exists"
# Create/verify DMPDIR
Write-LogSection "Configuring Data Pump Directory"
if (-not (Test-Path -Path $DmpDir)) {
New-Item -ItemType Directory -Path $DmpDir -Force | Out-Null
Write-Log "Created directory: $DmpDir"
}
New-OracleDirectory -OracleHome $oraHome -ServiceName $ServiceName `
-Password $SystemPassword -DirectoryName "DMPDIR" -DirectoryPath $DmpDir
# Copy dump file to DMPDIR if not already there
$dumpFileName = Split-Path -Path $DumpFile -Leaf
$targetDumpPath = Join-Path $DmpDir $dumpFileName
if ($DumpFile -ne $targetDumpPath) {
Write-Log "Copying dump file to DMPDIR..."
Copy-Item -Path $DumpFile -Destination $targetDumpPath -Force
Write-LogSuccess "Dump file copied to: $targetDumpPath"
}
else {
Write-Log "Dump file already in DMPDIR: $targetDumpPath"
}
# Check dump file size
$dumpFileInfo = Get-Item $targetDumpPath
$dumpSizeMB = [math]::Round($dumpFileInfo.Length / 1MB, 2)
Write-Log "Dump file size: $dumpSizeMB MB"
# Get current object count before import
Write-Log "Getting current object count for CONTAFIN_ORACLE..."
$beforeCounts = Get-SchemaObjectCount -OracleHome $oraHome -ServiceName $ServiceName `
-Password $SystemPassword -SchemaName "CONTAFIN_ORACLE"
$beforeTotal = if ($beforeCounts['TOTAL']) { $beforeCounts['TOTAL'] } else { 0 }
Write-Log "Objects before import: $beforeTotal"
# Run import
Write-LogSection "Running Data Pump Import"
$impdpPath = Join-Path $oraHome "bin\impdp.exe"
if (-not (Test-Path -Path $impdpPath)) {
throw "impdp.exe not found at: $impdpPath"
}
$importLogFile = "CONTAFIN_ORACLE_import_$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
# Build impdp command
$connString = "SYSTEM/`"$SystemPassword`"@$ServiceName"
$impdpParams = @(
"`"$connString`"",
"directory=DMPDIR",
"dumpfile=$dumpFileName",
"logfile=$importLogFile",
"schemas=CONTAFIN_ORACLE",
"table_exists_action=$TableExistsAction"
)
if ($Parallel -gt 1) {
$impdpParams += "parallel=$Parallel"
}
$arguments = $impdpParams -join " "
Write-Log "Executing impdp..."
Write-Log "Parameters: directory=DMPDIR dumpfile=$dumpFileName schemas=CONTAFIN_ORACLE table_exists_action=$TableExistsAction"
# Set Oracle environment
$env:ORACLE_HOME = $oraHome
$env:PATH = "$oraHome\bin;$env:PATH"
$env:NLS_LANG = "AMERICAN_AMERICA.AL32UTF8"
$startTime = Get-Date
# Execute impdp
$process = Start-Process -FilePath $impdpPath -ArgumentList $arguments -Wait -NoNewWindow -PassThru
$duration = (Get-Date) - $startTime
Write-Log "Import completed in $([math]::Round($duration.TotalMinutes, 2)) minutes"
# Check import log
$importLogPath = Join-Path $DmpDir $importLogFile
if (Test-Path -Path $importLogPath) {
Write-Log "Import log: $importLogPath"
# Read and analyze log for errors
$logContent = Get-Content -Path $importLogPath -Raw
if ($logContent -match "ORA-\d{5}:") {
Write-LogWarning "Import completed with Oracle errors. Check log for details."
}
if ($logContent -match "successfully loaded/unloaded") {
Write-LogSuccess "Objects successfully loaded"
}
# Count errors and warnings in log
$errorCount = ([regex]::Matches($logContent, "ORA-\d{5}:")).Count
$warningCount = ([regex]::Matches($logContent, "ORA-39\d{3}:")).Count
Write-Log "Errors in log: $errorCount"
Write-Log "Warnings in log: $warningCount"
}
# Verify import
Write-LogSection "Verifying Import"
# Get object counts after import
$afterCounts = Get-SchemaObjectCount -OracleHome $oraHome -ServiceName $ServiceName `
-Password $SystemPassword -SchemaName "CONTAFIN_ORACLE"
$afterTotal = if ($afterCounts['TOTAL']) { $afterCounts['TOTAL'] } else { 0 }
$afterInvalid = if ($afterCounts['INVALID']) { $afterCounts['INVALID'] } else { 0 }
Write-Log "Objects after import: $afterTotal"
Write-Log "Objects imported: $($afterTotal - $beforeTotal)"
# Display object counts by type
Write-Log ""
Write-Log "Object counts by type:"
foreach ($key in $afterCounts.Keys | Sort-Object) {
if ($key -ne 'TOTAL' -and $key -ne 'INVALID') {
Write-Log " $($key): $($afterCounts[$key])"
}
}
if ($afterInvalid -gt 0) {
Write-LogWarning "Invalid objects: $afterInvalid"
# List invalid objects
$invalidSql = @"
SET PAGESIZE 100 FEEDBACK OFF VERIFY OFF HEADING ON ECHO OFF LINESIZE 200
SELECT object_name, object_type
FROM dba_objects
WHERE owner = 'CONTAFIN_ORACLE'
AND status = 'INVALID'
ORDER BY object_type, object_name;
EXIT;
"@
$invalidList = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $invalidSql -Silent
Write-Log "Invalid objects:"
Write-Host $invalidList
# Attempt to recompile
Write-Log "Attempting to recompile invalid objects..."
$recompileSql = @"
SET SERVEROUTPUT ON
BEGIN
DBMS_UTILITY.COMPILE_SCHEMA('CONTAFIN_ORACLE', FALSE);
END;
/
EXIT;
"@
Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $recompileSql -Silent
# Recheck invalid count
$recheckCounts = Get-SchemaObjectCount -OracleHome $oraHome -ServiceName $ServiceName `
-Password $SystemPassword -SchemaName "CONTAFIN_ORACLE"
$recheckInvalid = if ($recheckCounts['INVALID']) { $recheckCounts['INVALID'] } else { 0 }
if ($recheckInvalid -lt $afterInvalid) {
Write-LogSuccess "Recompilation fixed $($afterInvalid - $recheckInvalid) objects"
}
if ($recheckInvalid -gt 0) {
Write-LogWarning "Still $recheckInvalid invalid objects remaining"
}
}
else {
Write-LogSuccess "No invalid objects"
}
# Summary
Write-LogSection "Import Complete"
if ($process.ExitCode -eq 0) {
Write-LogSuccess "CONTAFIN_ORACLE schema imported successfully!"
}
else {
Write-LogWarning "Import completed with warnings (exit code: $($process.ExitCode))"
}
Write-Log ""
Write-Log "Summary:"
Write-Log " Dump file: $dumpFileName ($dumpSizeMB MB)"
Write-Log " Service: $ServiceName"
Write-Log " Duration: $([math]::Round($duration.TotalMinutes, 2)) minutes"
Write-Log " Objects: $afterTotal"
Write-Log " Import log: $importLogPath"
Write-Log ""
Write-Log "Next steps:"
Write-Log " 1. Run 04-create-synonyms-grants.ps1 to create public synonyms"
Write-Log " 2. Run 05-import-companies.ps1 to import company schemas"
Close-LogFile -Success ($process.ExitCode -eq 0)
exit $process.ExitCode
}
catch {
Write-LogError "Import failed: $_"
Write-LogError $_.ScriptStackTrace
Close-LogFile -Success $false
exit 1
}

View File

@@ -0,0 +1,501 @@
#Requires -Version 5.1
<#
.SYNOPSIS
Create public synonyms and grants for ROA Oracle.
.DESCRIPTION
Creates public synonyms for CONTAFIN_ORACLE objects and configures:
- Public synonyms for tables, views, packages, types
- Public grants (SELECT, EXECUTE, REFERENCES)
- SESIUNE context
- Network ACL for CONTAFIN_ORACLE
.PARAMETER OracleHome
Oracle home directory. If not specified, auto-detects.
.PARAMETER ServiceName
Database service name. Default: XEPDB1
.PARAMETER SystemPassword
SYSTEM user password. Default: romfastsoft
.PARAMETER SqlScriptsDir
Directory containing SQL scripts. Default: ..\sql
.EXAMPLE
.\04-create-synonyms-grants.ps1
.EXAMPLE
.\04-create-synonyms-grants.ps1 -ServiceName "ROA" -SystemPassword "mypassword"
.NOTES
File Name : 04-create-synonyms-grants.ps1
Prerequisite : Run 03-import-contafin.ps1 first
Copyright 2024 : ROMFAST
#>
[CmdletBinding()]
param(
[Parameter(Mandatory = $false)]
[string]$OracleHome,
[Parameter(Mandatory = $false)]
[string]$ServiceName = "XEPDB1",
[Parameter(Mandatory = $false)]
[string]$SystemPassword = "romfastsoft",
[Parameter(Mandatory = $false)]
[string]$SqlScriptsDir
)
$ErrorActionPreference = 'Stop'
# Source library functions
. "$PSScriptRoot\lib\logging-functions.ps1"
. "$PSScriptRoot\lib\oracle-functions.ps1"
# Initialize logging
$logPath = Join-Path $PSScriptRoot "..\logs\04-create-synonyms-grants_$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
Initialize-LogFile -LogPath $logPath -ScriptName "04-create-synonyms-grants.ps1"
try {
Write-LogSection "Creating Public Synonyms and Grants"
# Validate Oracle installation
$oraHome = Get-OracleHome -OracleHome $OracleHome
Write-LogSuccess "Oracle Home: $oraHome"
# Test connection
Write-Log "Testing database connection..."
if (-not (Test-OracleConnection -OracleHome $oraHome -ServiceName $ServiceName `
-Password $SystemPassword)) {
throw "Cannot connect to database. Please verify ServiceName and SystemPassword."
}
Write-LogSuccess "Database connection successful"
# Verify CONTAFIN_ORACLE exists and has objects
Write-Log "Verifying CONTAFIN_ORACLE schema..."
$counts = Get-SchemaObjectCount -OracleHome $oraHome -ServiceName $ServiceName `
-Password $SystemPassword -SchemaName "CONTAFIN_ORACLE"
$totalObjects = if ($counts['TOTAL']) { $counts['TOTAL'] } else { 0 }
if ($totalObjects -eq 0) {
throw "CONTAFIN_ORACLE schema has no objects. Run 03-import-contafin.ps1 first."
}
Write-LogSuccess "CONTAFIN_ORACLE has $totalObjects objects"
# Create SESIUNE context
Write-LogSection "Creating SESIUNE Context"
$contextSql = @"
SET ECHO OFF FEEDBACK ON VERIFY OFF
-- Drop existing context if exists
BEGIN
EXECUTE IMMEDIATE 'DROP CONTEXT SESIUNE';
EXCEPTION
WHEN OTHERS THEN NULL;
END;
/
-- Create context
CREATE CONTEXT SESIUNE USING CONTAFIN_ORACLE.SET_VARIABILE;
SELECT 'CONTEXT_CREATED' FROM dual;
EXIT;
"@
$result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $contextSql
if ($result -match "CONTEXT_CREATED") {
Write-LogSuccess "Context SESIUNE created"
}
else {
Write-LogWarning "Could not verify context creation"
}
# Create public synonyms SQL
Write-LogSection "Creating Public Synonyms"
$synonymsSql = @"
SET ECHO OFF FEEDBACK ON VERIFY OFF SERVEROUTPUT ON
SPOOL synonyms_grants.log
PROMPT
PROMPT =============================================
PROMPT Creating Public Synonyms for CONTAFIN_ORACLE
PROMPT =============================================
PROMPT
-- Core synonyms with grants
PROMPT Creating SYN_DEF_GRUP...
CREATE OR REPLACE PUBLIC SYNONYM SYN_DEF_GRUP FOR CONTAFIN_ORACLE.DEF_GRUP;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.DEF_GRUP TO PUBLIC;
PROMPT Creating SYN_DEF_PROGRAME...
CREATE OR REPLACE PUBLIC SYNONYM SYN_DEF_PROGRAME FOR CONTAFIN_ORACLE.DEF_PROGRAME;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.DEF_PROGRAME TO PUBLIC;
PROMPT Creating SYN_VDEF_PROGRAME...
CREATE OR REPLACE PUBLIC SYNONYM SYN_VDEF_PROGRAME FOR CONTAFIN_ORACLE.VDEF_PROGRAME;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.VDEF_PROGRAME TO PUBLIC;
PROMPT Creating SYN_LUNILEAN...
CREATE OR REPLACE PUBLIC SYNONYM SYN_LUNILEAN FOR CONTAFIN_ORACLE.LUNILEAN;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.LUNILEAN TO PUBLIC;
PROMPT Creating SYN_NOM_FIRME...
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_FIRME FOR CONTAFIN_ORACLE.NOM_FIRME;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_FIRME TO PUBLIC;
PROMPT Creating SYN_NOM_PROGRAME...
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_PROGRAME FOR CONTAFIN_ORACLE.NOM_PROGRAME;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_PROGRAME TO PUBLIC;
PROMPT Creating SYN_PACK_DREPTURI...
CREATE OR REPLACE PUBLIC SYNONYM SYN_PACK_DREPTURI FOR CONTAFIN_ORACLE.PACK_DREPTURI;
GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_DREPTURI TO PUBLIC;
PROMPT Creating SYN_UTILIZATORI...
CREATE OR REPLACE PUBLIC SYNONYM SYN_UTILIZATORI FOR CONTAFIN_ORACLE.UTILIZATORI;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.UTILIZATORI TO PUBLIC;
PROMPT Creating syn_vdef_util_programe...
CREATE OR REPLACE PUBLIC SYNONYM SYN_VDEF_UTIL_PROGRAME FOR CONTAFIN_ORACLE.VDEF_UTIL_PROGRAME;
GRANT SELECT ON CONTAFIN_ORACLE.VDEF_UTIL_PROGRAME TO PUBLIC;
PROMPT Creating syn_vdef_util_firme...
CREATE OR REPLACE PUBLIC SYNONYM SYN_VDEF_UTIL_FIRME FOR CONTAFIN_ORACLE.VDEF_UTIL_FIRME;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.VDEF_UTIL_FIRME TO PUBLIC;
PROMPT Creating SYN_VDEF_UTIL_OBIECTE...
CREATE OR REPLACE PUBLIC SYNONYM SYN_VDEF_UTIL_OBIECTE FOR CONTAFIN_ORACLE.VDEF_UTIL_OBIECTE;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.VDEF_UTIL_OBIECTE TO PUBLIC;
PROMPT Creating SYN_VUTILIZATORI...
CREATE OR REPLACE PUBLIC SYNONYM SYN_VUTILIZATORI FOR CONTAFIN_ORACLE.VUTILIZATORI;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.VUTILIZATORI TO PUBLIC;
PROMPT Creating SYN_VDEF_UTIL_GRUP...
CREATE OR REPLACE PUBLIC SYNONYM SYN_VDEF_UTIL_GRUP FOR CONTAFIN_ORACLE.VDEF_UTIL_GRUP;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.VDEF_UTIL_GRUP TO PUBLIC;
PROMPT Creating SYN_DEF_GRUP_DREPT...
CREATE OR REPLACE PUBLIC SYNONYM SYN_DEF_GRUP_DREPT FOR CONTAFIN_ORACLE.DEF_GRUP_DREPT;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.DEF_GRUP_DREPT TO PUBLIC;
PROMPT Creating SYN_OPTIUNI_PROGRAME...
CREATE OR REPLACE PUBLIC SYNONYM SYN_OPTIUNI_PROGRAME FOR CONTAFIN_ORACLE.OPTIUNI_PROGRAME;
GRANT SELECT ON CONTAFIN_ORACLE.OPTIUNI_PROGRAME TO PUBLIC;
PROMPT Creating SYN_HELPCONT...
CREATE OR REPLACE PUBLIC SYNONYM SYN_HELPCONT FOR CONTAFIN_ORACLE.HELPCONT;
GRANT SELECT ON CONTAFIN_ORACLE.HELPCONT TO PUBLIC;
PROMPT Creating SYN_V_NOM_FIRME...
CREATE OR REPLACE PUBLIC SYNONYM SYN_V_NOM_FIRME FOR CONTAFIN_ORACLE.V_NOM_FIRME;
GRANT SELECT ON CONTAFIN_ORACLE.V_NOM_FIRME TO PUBLIC;
-- Nomenclators
PROMPT Creating nomenclator synonyms...
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_FORME_JURIDICE FOR CONTAFIN_ORACLE.NOM_FORME_JURIDICE;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_FORME_JURIDICE TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_FORME_ORGANIZARE FOR CONTAFIN_ORACLE.NOM_FORME_ORGANIZARE;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_FORME_ORGANIZARE TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_TIP_SOCIETATE FOR CONTAFIN_ORACLE.NOM_TIP_SOCIETATE;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_TIP_SOCIETATE TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_FORME_PROPRIETATE FOR CONTAFIN_ORACLE.NOM_FORME_PROPRIETATE;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_FORME_PROPRIETATE TO PUBLIC;
-- String aggregation
PROMPT Creating stringAgg synonym...
CREATE OR REPLACE PUBLIC SYNONYM STRINGAGG FOR CONTAFIN_ORACLE.STRINGAGG;
GRANT EXECUTE ON CONTAFIN_ORACLE.STRINGAGG TO PUBLIC;
-- Types
PROMPT Creating type synonyms...
BEGIN
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.STRINGAGGTYPE TO PUBLIC';
EXCEPTION WHEN OTHERS THEN NULL;
END;
/
CREATE OR REPLACE PUBLIC SYNONYM CHAR_ROW FOR CONTAFIN_ORACLE.CHAR_ROW;
CREATE OR REPLACE PUBLIC SYNONYM CHAR_TAB FOR CONTAFIN_ORACLE.CHAR_TAB;
CREATE OR REPLACE PUBLIC SYNONYM NUM_ROW FOR CONTAFIN_ORACLE.NUM_ROW;
CREATE OR REPLACE PUBLIC SYNONYM NUM_TAB FOR CONTAFIN_ORACLE.NUM_TAB;
BEGIN
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.NUM_ROW TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.NUM_TAB TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.CHAR_ROW TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.CHAR_TAB TO PUBLIC';
EXCEPTION WHEN OTHERS THEN NULL;
END;
/
CREATE OR REPLACE PUBLIC SYNONYM UW_SEL_ROW FOR CONTAFIN_ORACLE.UW_SEL_ROW;
CREATE OR REPLACE PUBLIC SYNONYM UW_SEL_TAB FOR CONTAFIN_ORACLE.UW_SEL_TAB;
BEGIN
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.UW_SEL_ROW TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.UW_SEL_TAB TO PUBLIC';
EXCEPTION WHEN OTHERS THEN NULL;
END;
/
-- Functions
PROMPT Creating function synonyms...
CREATE OR REPLACE PUBLIC SYNONYM VALOARETAG FOR CONTAFIN_ORACLE.VALOARETAG;
CREATE OR REPLACE PUBLIC SYNONYM GETWORDCOUNT FOR CONTAFIN_ORACLE.GETWORDCOUNT;
CREATE OR REPLACE PUBLIC SYNONYM GETWORDNUM FOR CONTAFIN_ORACLE.GETWORDNUM;
CREATE OR REPLACE PUBLIC SYNONYM CHARC2COLLECTION FOR CONTAFIN_ORACLE.CHARC2COLLECTION;
CREATE OR REPLACE PUBLIC SYNONYM CHARN2COLLECTION FOR CONTAFIN_ORACLE.CHARN2COLLECTION;
BEGIN
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.VALOARETAG TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.GETWORDCOUNT TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.GETWORDNUM TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.CHARC2COLLECTION TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.CHARN2COLLECTION TO PUBLIC';
EXCEPTION WHEN OTHERS THEN NULL;
END;
/
-- VAUTH_SERII synonym for CONTAFIN_ORACLE
PROMPT Creating VDEF_PROGRAME_SERII synonym...
BEGIN
EXECUTE IMMEDIATE 'DROP SYNONYM CONTAFIN_ORACLE.VDEF_PROGRAME_SERII';
EXCEPTION WHEN OTHERS THEN NULL;
END;
/
CREATE SYNONYM CONTAFIN_ORACLE.VDEF_PROGRAME_SERII FOR SYS.VAUTH_SERII;
GRANT SELECT ON CONTAFIN_ORACLE.VDEF_PROGRAME_SERII TO CONTAFIN_ORACLE;
-- Currency and location synonyms
PROMPT Creating currency/location synonyms...
CREATE OR REPLACE PUBLIC SYNONYM SYN_VNOM_VALUTE_ISO FOR CONTAFIN_ORACLE.VNOM_VALUTE_ISO;
GRANT SELECT ON CONTAFIN_ORACLE.VNOM_VALUTE_ISO TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_CURS_ACTUALIZARI FOR CONTAFIN_ORACLE.CURS_ACTUALIZARI;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.CURS_ACTUALIZARI TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_VALUTE_ISO FOR CONTAFIN_ORACLE.NOM_VALUTE_ISO;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_VALUTE_ISO TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_CURS_COTATII FOR CONTAFIN_ORACLE.CURS_COTATII;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.CURS_COTATII TO PUBLIC;
-- Location synonyms
PROMPT Creating location synonyms...
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_JUDETE FOR CONTAFIN_ORACLE.NOM_JUDETE;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_JUDETE TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_LOCALITATI FOR CONTAFIN_ORACLE.NOM_LOCALITATI;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_LOCALITATI TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_VNOM_JUDETE FOR CONTAFIN_ORACLE.VNOM_JUDETE;
GRANT SELECT ON CONTAFIN_ORACLE.VNOM_JUDETE TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_VNOM_LOCALITATI FOR CONTAFIN_ORACLE.VNOM_LOCALITATI;
GRANT SELECT ON CONTAFIN_ORACLE.VNOM_LOCALITATI TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_VNOM_TARI FOR CONTAFIN_ORACLE.VNOM_TARI;
GRANT SELECT ON CONTAFIN_ORACLE.VNOM_TARI TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_CETATENII FOR CONTAFIN_ORACLE.NOM_CETATENII;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_CETATENII TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_TARI FOR CONTAFIN_ORACLE.NOM_TARI;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_TARI TO PUBLIC;
-- Packages
PROMPT Creating package synonyms...
CREATE OR REPLACE PUBLIC SYNONYM SYN_PACK_DEF_CO FOR CONTAFIN_ORACLE.PACK_DEF_CO;
GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_DEF_CO TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM PACK_UTILS FOR CONTAFIN_ORACLE.PACK_UTILS;
GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_UTILS TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM PACK_UTILS_FILE FOR CONTAFIN_ORACLE.PACK_UTILS_FILE;
GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_UTILS_FILE TO PUBLIC;
CREATE OR REPLACE PUBLIC SYNONYM PACK_ROARTVAI FOR CONTAFIN_ORACLE.PACK_ROARTVAI;
GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_ROARTVAI TO PUBLIC;
-- More types and synonyms
PROMPT Creating additional type synonyms...
CREATE OR REPLACE PUBLIC SYNONYM CONTRACT_M FOR CONTAFIN_ORACLE.CONTRACT_M;
CREATE OR REPLACE PUBLIC SYNONYM SAL_CONTRACT_M FOR CONTAFIN_ORACLE.SAL_CONTRACT_M;
CREATE OR REPLACE PUBLIC SYNONYM SAL_RED FOR CONTAFIN_ORACLE.SAL_RED;
CREATE OR REPLACE PUBLIC SYNONYM SAL_CAMPURI_RED FOR CONTAFIN_ORACLE.SAL_CAMPURI_RED;
CREATE OR REPLACE PUBLIC SYNONYM TABSTERS FOR CONTAFIN_ORACLE.TABSTERS;
CREATE OR REPLACE PUBLIC SYNONYM SAL_TABELESTERS FOR CONTAFIN_ORACLE.SAL_TABELESTERS;
CREATE OR REPLACE PUBLIC SYNONYM FF_SUME FOR CONTAFIN_ORACLE.FF_SUME;
CREATE OR REPLACE PUBLIC SYNONYM FF_PERSINTRET FOR CONTAFIN_ORACLE.FF_PERSINTRET;
CREATE OR REPLACE PUBLIC SYNONYM VANZARI_DETALII_TAB FOR CONTAFIN_ORACLE.VANZARI_DETALII_TAB;
CREATE OR REPLACE PUBLIC SYNONYM PIVOT_TABLE FOR CONTAFIN_ORACLE.PIVOT_TABLE;
CREATE OR REPLACE PUBLIC SYNONYM PIVOT_ROW FOR CONTAFIN_ORACLE.PIVOT_ROW;
BEGIN
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.CONTRACT_M TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.SAL_CONTRACT_M TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.SAL_RED TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.SAL_CAMPURI_RED TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.TABSTERS TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.SAL_TABELESTERS TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.FF_SUME TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.FF_PERSINTRET TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.VANZARI_DETALII_TAB TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.PIVOT_TABLE TO PUBLIC';
EXECUTE IMMEDIATE 'GRANT EXECUTE ON CONTAFIN_ORACLE.PIVOT_ROW TO PUBLIC';
EXCEPTION WHEN OTHERS THEN NULL;
END;
/
-- SERVER_INFO
PROMPT Creating SERVER_INFO synonym...
CREATE OR REPLACE PUBLIC SYNONYM SERVER_INFO FOR CONTAFIN_ORACLE.SERVER_INFO;
GRANT SELECT, UPDATE ON CONTAFIN_ORACLE.SERVER_INFO TO PUBLIC;
-- CAEN codes
PROMPT Creating SYN_NOM_CODURI_CAEN...
CREATE OR REPLACE PUBLIC SYNONYM SYN_NOM_CODURI_CAEN FOR CONTAFIN_ORACLE.NOM_CODURI_CAEN;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_CODURI_CAEN TO PUBLIC;
-- Directory grants
PROMPT Granting directory access...
GRANT ALL ON DIRECTORY DMPDIR TO PUBLIC;
GRANT EXECUTE ON UTL_FILE TO PUBLIC;
GRANT EXECUTE ON DBMS_LOCK TO PUBLIC;
COMMIT;
SPOOL OFF
SELECT 'SYNONYMS_COMPLETE' FROM dual;
EXIT;
"@
$result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $synonymsSql
if ($result -match "SYNONYMS_COMPLETE") {
Write-LogSuccess "Public synonyms created successfully"
}
else {
Write-LogWarning "Could not verify synonym creation"
Write-LogDebug $result
}
# Configure Network ACL
Write-LogSection "Configuring Network ACL"
$aclSql = @"
SET ECHO OFF FEEDBACK ON VERIFY OFF SERVEROUTPUT ON
PROMPT Configuring Network ACL for CONTAFIN_ORACLE...
-- Drop existing ACL
BEGIN
DBMS_NETWORK_ACL_ADMIN.DROP_ACL(acl => 'roaupdate.xml');
EXCEPTION
WHEN OTHERS THEN NULL;
END;
/
-- Create new ACL
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(
acl => 'roaupdate.xml',
description => 'Permissions to connect and resolve for ROA',
principal => 'CONTAFIN_ORACLE',
is_grant => TRUE,
privilege => 'connect'
);
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
acl => 'roaupdate.xml',
principal => 'CONTAFIN_ORACLE',
is_grant => TRUE,
privilege => 'resolve'
);
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
acl => 'roaupdate.xml',
host => '*'
);
END;
/
COMMIT;
-- Grant UTL packages to CONTAFIN_ORACLE
GRANT EXECUTE ON UTL_INADDR TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_TCP TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_SMTP TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_HTTP TO CONTAFIN_ORACLE;
SELECT 'ACL_CONFIGURED' FROM dual;
EXIT;
"@
$aclResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYS" -Password $SystemPassword -SqlCommand $aclSql -AsSysdba
if ($aclResult -match "ACL_CONFIGURED") {
Write-LogSuccess "Network ACL configured"
}
else {
Write-LogWarning "Could not verify ACL configuration"
}
# Count synonyms created
Write-LogSection "Verifying Synonyms"
$countSql = @"
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT 'SYNONYM_COUNT:' || COUNT(*)
FROM dba_synonyms
WHERE owner = 'PUBLIC'
AND table_owner = 'CONTAFIN_ORACLE';
EXIT;
"@
$countResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $countSql -Silent
$synonymCount = 0
if ($countResult -match "SYNONYM_COUNT:(\d+)") {
$synonymCount = [int]$Matches[1]
}
Write-Log "Public synonyms for CONTAFIN_ORACLE: $synonymCount"
# Summary
Write-LogSection "Setup Complete"
Write-LogSuccess "Public synonyms and grants configured!"
Write-Log ""
Write-Log "Summary:"
Write-Log " Public synonyms created: $synonymCount"
Write-Log " SESIUNE context: Created"
Write-Log " Network ACL: Configured (roaupdate.xml)"
Write-Log " UTL packages granted: UTL_INADDR, UTL_TCP, UTL_SMTP, UTL_HTTP"
Write-Log ""
Write-Log "Next steps:"
Write-Log " 1. Run 05-import-companies.ps1 to import company schemas"
Close-LogFile -Success $true
exit 0
}
catch {
Write-LogError "Setup failed: $_"
Write-LogError $_.ScriptStackTrace
Close-LogFile -Success $false
exit 1
}

View File

@@ -0,0 +1,424 @@
#Requires -Version 5.1
<#
.SYNOPSIS
Batch import company schemas from Data Pump dump files.
.DESCRIPTION
Imports company schemas from dump files. CRITICAL: Reads passwords from
CONTAFIN_ORACLE.NOM_FIRME table to ensure correct authentication.
For each company:
1. Queries NOM_FIRME for schema name and password
2. Finds matching DMP file in DumpDirectory
3. Creates user with password from NOM_FIRME
4. Runs impdp to import schema
5. Logs progress
.PARAMETER DumpDirectory
Directory containing company DMP files. Required.
.PARAMETER OracleHome
Oracle home directory. If not specified, auto-detects.
.PARAMETER ServiceName
Database service name. Default: XEPDB1
.PARAMETER SystemPassword
SYSTEM user password. Default: romfastsoft
.PARAMETER ParallelJobs
Number of parallel import jobs. Default: 2
.PARAMETER Companies
Optional array of specific company names to import. If not specified, imports all.
.PARAMETER DryRun
Show what would be imported without actually importing.
.EXAMPLE
.\05-import-companies.ps1 -DumpDirectory "C:\dumps\companies"
.EXAMPLE
.\05-import-companies.ps1 -DumpDirectory "D:\backups" -Companies "FIRMA1","FIRMA2"
.EXAMPLE
.\05-import-companies.ps1 -DumpDirectory "C:\dumps" -DryRun
.NOTES
File Name : 05-import-companies.ps1
Prerequisite : Run 04-create-synonyms-grants.ps1 first
Copyright 2024 : ROMFAST
#>
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[ValidateScript({ Test-Path $_ -PathType Container })]
[string]$DumpDirectory,
[Parameter(Mandatory = $false)]
[string]$OracleHome,
[Parameter(Mandatory = $false)]
[string]$ServiceName = "XEPDB1",
[Parameter(Mandatory = $false)]
[string]$SystemPassword = "romfastsoft",
[Parameter(Mandatory = $false)]
[int]$ParallelJobs = 2,
[Parameter(Mandatory = $false)]
[string[]]$Companies,
[Parameter(Mandatory = $false)]
[switch]$DryRun
)
$ErrorActionPreference = 'Stop'
# Source library functions
. "$PSScriptRoot\lib\logging-functions.ps1"
. "$PSScriptRoot\lib\oracle-functions.ps1"
# Initialize logging
$logPath = Join-Path $PSScriptRoot "..\logs\05-import-companies_$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
Initialize-LogFile -LogPath $logPath -ScriptName "05-import-companies.ps1"
try {
Write-LogSection "Batch Import Company Schemas"
if ($DryRun) {
Write-LogWarning "DRY RUN MODE - No changes will be made"
}
# Validate Oracle installation
$oraHome = Get-OracleHome -OracleHome $OracleHome
Write-LogSuccess "Oracle Home: $oraHome"
# Test connection
Write-Log "Testing database connection..."
if (-not (Test-OracleConnection -OracleHome $oraHome -ServiceName $ServiceName `
-Password $SystemPassword)) {
throw "Cannot connect to database. Please verify ServiceName and SystemPassword."
}
Write-LogSuccess "Database connection successful"
# Get company list from NOM_FIRME
Write-LogSection "Reading Company List from NOM_FIRME"
$companySql = @"
SET PAGESIZE 10000 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF LINESIZE 500
SELECT schema || '|' || parola
FROM CONTAFIN_ORACLE.NOM_FIRME
WHERE sters = 0
AND schema IS NOT NULL
ORDER BY schema;
EXIT;
"@
$companyResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $companySql -Silent
# Parse company data
$companyData = @{}
foreach ($line in $companyResult -split "`n") {
$line = $line.Trim()
if ($line -match "^([A-Z0-9_]+)\|(.*)$") {
$schema = $Matches[1]
$password = $Matches[2]
if (-not $password) { $password = "ROMFASTSOFT" }
$companyData[$schema] = $password
}
}
Write-Log "Found $($companyData.Count) companies in NOM_FIRME"
if ($companyData.Count -eq 0) {
Write-LogWarning "No companies found in NOM_FIRME"
Close-LogFile -Success $true
exit 0
}
# Filter companies if specified
if ($Companies) {
$filteredData = @{}
foreach ($company in $Companies) {
$companyUpper = $company.ToUpper()
if ($companyData.ContainsKey($companyUpper)) {
$filteredData[$companyUpper] = $companyData[$companyUpper]
}
else {
Write-LogWarning "Company $companyUpper not found in NOM_FIRME"
}
}
$companyData = $filteredData
Write-Log "Filtered to $($companyData.Count) companies"
}
# Find matching dump files
Write-LogSection "Scanning Dump Files"
$dumpFiles = Get-ChildItem -Path $DumpDirectory -Filter "*.dmp" -File
Write-Log "Found $($dumpFiles.Count) DMP files in $DumpDirectory"
# Match companies with dump files
$importList = @()
$notFoundList = @()
foreach ($schema in $companyData.Keys) {
# Try to find matching dump file (case-insensitive)
$matchingFile = $dumpFiles | Where-Object {
$_.BaseName -ieq $schema -or
$_.BaseName -imatch "^$schema[_\.]" -or
$_.BaseName -imatch "^${schema}$"
} | Select-Object -First 1
if ($matchingFile) {
$importList += [PSCustomObject]@{
Schema = $schema
Password = $companyData[$schema]
DumpFile = $matchingFile.FullName
DumpSize = [math]::Round($matchingFile.Length / 1MB, 2)
}
}
else {
$notFoundList += $schema
}
}
Write-Log "Companies to import: $($importList.Count)"
if ($notFoundList.Count -gt 0) {
Write-LogWarning "Companies without matching dump file: $($notFoundList.Count)"
foreach ($schema in $notFoundList) {
Write-Log " - $schema (no DMP file found)"
}
}
if ($importList.Count -eq 0) {
Write-LogWarning "No companies to import"
Close-LogFile -Success $true
exit 0
}
# Display import plan
Write-LogSection "Import Plan"
$totalSize = ($importList | Measure-Object -Property DumpSize -Sum).Sum
Write-Log "Total data to import: $totalSize MB"
Write-Log ""
Write-Log "Companies to import:"
foreach ($item in $importList) {
Write-Log " - $($item.Schema): $($item.DumpFile) ($($item.DumpSize) MB)"
}
if ($DryRun) {
Write-LogSection "Dry Run Complete"
Write-Log "Would import $($importList.Count) company schemas"
Close-LogFile -Success $true
exit 0
}
# Ensure DMPDIR exists
$dmpDir = "C:\DMPDIR"
if (-not (Test-Path -Path $dmpDir)) {
New-Item -ItemType Directory -Path $dmpDir -Force | Out-Null
}
# Process each company
Write-LogSection "Importing Companies"
$successCount = 0
$failCount = 0
$startTime = Get-Date
foreach ($item in $importList) {
Write-LogSection "Importing $($item.Schema)"
try {
# Check if user already exists
$userExists = Test-OracleUser -OracleHome $oraHome -ServiceName $ServiceName `
-Password $SystemPassword -SchemaName $item.Schema
if ($userExists) {
Write-Log "User $($item.Schema) already exists"
# Get current object count
$beforeCounts = Get-SchemaObjectCount -OracleHome $oraHome -ServiceName $ServiceName `
-Password $SystemPassword -SchemaName $item.Schema
$beforeTotal = if ($beforeCounts['TOTAL']) { $beforeCounts['TOTAL'] } else { 0 }
Write-Log "Existing objects: $beforeTotal"
}
else {
# Create user
Write-Log "Creating user $($item.Schema)..."
$createUserSql = @"
SET ECHO OFF FEEDBACK ON VERIFY OFF
CREATE USER $($item.Schema)
IDENTIFIED BY "$($item.Password)"
DEFAULT TABLESPACE ROA
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT;
GRANT CONNECT TO $($item.Schema);
GRANT RESOURCE TO $($item.Schema);
GRANT CREATE MATERIALIZED VIEW TO $($item.Schema);
GRANT CREATE PROCEDURE TO $($item.Schema);
GRANT CREATE SEQUENCE TO $($item.Schema);
GRANT CREATE TABLE TO $($item.Schema);
GRANT CREATE TRIGGER TO $($item.Schema);
GRANT CREATE VIEW TO $($item.Schema);
GRANT DEBUG CONNECT SESSION TO $($item.Schema);
GRANT SELECT ANY TABLE TO $($item.Schema);
GRANT CREATE TYPE TO $($item.Schema);
GRANT UNLIMITED TABLESPACE TO $($item.Schema);
COMMIT;
SELECT 'USER_CREATED' FROM dual;
EXIT;
"@
$createResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $createUserSql -Silent
if ($createResult -match "USER_CREATED") {
Write-LogSuccess "User $($item.Schema) created"
}
else {
throw "Failed to create user $($item.Schema)"
}
}
# Copy dump file to DMPDIR if not already there
$dumpFileName = Split-Path -Path $item.DumpFile -Leaf
$targetDumpPath = Join-Path $dmpDir $dumpFileName
if ($item.DumpFile -ne $targetDumpPath) {
Write-Log "Copying dump file to DMPDIR..."
Copy-Item -Path $item.DumpFile -Destination $targetDumpPath -Force
}
# Run import
Write-Log "Running impdp for $($item.Schema)..."
$impdpPath = Join-Path $oraHome "bin\impdp.exe"
$importLogFile = "$($item.Schema)_import_$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
$connString = "SYSTEM/`"$SystemPassword`"@$ServiceName"
# Check if dump has different schema name (remapping needed)
$remapParam = ""
$dumpBaseName = [System.IO.Path]::GetFileNameWithoutExtension($dumpFileName).ToUpper()
if ($dumpBaseName -ne $item.Schema) {
$remapParam = "remap_schema=$dumpBaseName`:$($item.Schema)"
Write-Log "Schema remap: $dumpBaseName -> $($item.Schema)"
}
$impdpParams = @(
"`"$connString`"",
"directory=DMPDIR",
"dumpfile=$dumpFileName",
"logfile=$importLogFile",
"schemas=$($item.Schema)",
"table_exists_action=REPLACE"
)
if ($remapParam) {
$impdpParams += $remapParam
}
$arguments = $impdpParams -join " "
# Set Oracle environment
$env:ORACLE_HOME = $oraHome
$env:PATH = "$oraHome\bin;$env:PATH"
$env:NLS_LANG = "AMERICAN_AMERICA.AL32UTF8"
$importStart = Get-Date
$process = Start-Process -FilePath $impdpPath -ArgumentList $arguments -Wait -NoNewWindow -PassThru
$importDuration = (Get-Date) - $importStart
Write-Log "Import completed in $([math]::Round($importDuration.TotalMinutes, 2)) minutes"
# Verify import
$afterCounts = Get-SchemaObjectCount -OracleHome $oraHome -ServiceName $ServiceName `
-Password $SystemPassword -SchemaName $item.Schema
$afterTotal = if ($afterCounts['TOTAL']) { $afterCounts['TOTAL'] } else { 0 }
$afterInvalid = if ($afterCounts['INVALID']) { $afterCounts['INVALID'] } else { 0 }
Write-Log "Objects after import: $afterTotal"
if ($afterInvalid -gt 0) {
Write-LogWarning "Invalid objects: $afterInvalid"
# Recompile
$recompileSql = @"
BEGIN
DBMS_UTILITY.COMPILE_SCHEMA('$($item.Schema)', FALSE);
END;
/
EXIT;
"@
Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $recompileSql -Silent
}
if ($process.ExitCode -eq 0) {
Write-LogSuccess "$($item.Schema) imported successfully ($afterTotal objects)"
$successCount++
}
else {
Write-LogWarning "$($item.Schema) import completed with warnings"
$successCount++
}
# Clean up copied dump file
if ($item.DumpFile -ne $targetDumpPath -and (Test-Path -Path $targetDumpPath)) {
Remove-Item -Path $targetDumpPath -Force -ErrorAction SilentlyContinue
}
}
catch {
Write-LogError "Failed to import $($item.Schema): $_"
$failCount++
}
}
$totalDuration = (Get-Date) - $startTime
# Summary
Write-LogSection "Import Complete"
Write-LogSuccess "Company import batch completed!"
Write-Log ""
Write-Log "Summary:"
Write-Log " Total companies: $($importList.Count)"
Write-Log " Successful: $successCount"
Write-Log " Failed: $failCount"
Write-Log " Total duration: $([math]::Round($totalDuration.TotalMinutes, 2)) minutes"
Write-Log ""
if ($notFoundList.Count -gt 0) {
Write-Log "Companies skipped (no dump file):"
foreach ($schema in $notFoundList) {
Write-Log " - $schema"
}
}
Write-Log ""
Write-Log "Next steps:"
Write-Log " 1. Run 07-verify-installation.ps1 to verify all schemas"
Close-LogFile -Success ($failCount -eq 0)
exit $(if ($failCount -eq 0) { 0 } else { 1 })
}
catch {
Write-LogError "Import failed: $_"
Write-LogError $_.ScriptStackTrace
Close-LogFile -Success $false
exit 1
}

View File

@@ -0,0 +1,327 @@
#Requires -Version 5.1
<#
.SYNOPSIS
Add a new company schema to ROA Oracle.
.DESCRIPTION
Creates a new company user/schema with either:
- Import from a template DMP file
- Empty schema with basic structures
.PARAMETER CompanyName
Schema name for the new company. Required. Must be uppercase alphanumeric.
.PARAMETER Password
Password for the new company schema. Default: ROMFASTSOFT
.PARAMETER OracleHome
Oracle home directory. If not specified, auto-detects.
.PARAMETER ServiceName
Database service name. Default: XEPDB1
.PARAMETER SystemPassword
SYSTEM user password. Default: romfastsoft
.PARAMETER TemplateDump
Optional path to a template DMP file to import.
.PARAMETER TemplateSchema
Schema name in the template DMP file if different from target (for remap).
.PARAMETER Force
Drop and recreate if user already exists.
.EXAMPLE
.\06-add-company.ps1 -CompanyName "NEWCOMPANY"
.EXAMPLE
.\06-add-company.ps1 -CompanyName "FIRMA2024" -Password "SecurePass123"
.EXAMPLE
.\06-add-company.ps1 -CompanyName "NEWFIRMA" -TemplateDump "C:\dumps\FIRMANOUA.dmp" -TemplateSchema "FIRMANOUA"
.NOTES
File Name : 06-add-company.ps1
Prerequisite : Run 04-create-synonyms-grants.ps1 first
Copyright 2024 : ROMFAST
#>
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[ValidatePattern('^[A-Z0-9_]+$')]
[string]$CompanyName,
[Parameter(Mandatory = $false)]
[string]$Password = "ROMFASTSOFT",
[Parameter(Mandatory = $false)]
[string]$OracleHome,
[Parameter(Mandatory = $false)]
[string]$ServiceName = "XEPDB1",
[Parameter(Mandatory = $false)]
[string]$SystemPassword = "romfastsoft",
[Parameter(Mandatory = $false)]
[ValidateScript({ Test-Path $_ })]
[string]$TemplateDump,
[Parameter(Mandatory = $false)]
[string]$TemplateSchema,
[Parameter(Mandatory = $false)]
[switch]$Force
)
$ErrorActionPreference = 'Stop'
# Ensure company name is uppercase
$CompanyName = $CompanyName.ToUpper()
# Source library functions
. "$PSScriptRoot\lib\logging-functions.ps1"
. "$PSScriptRoot\lib\oracle-functions.ps1"
# Initialize logging
$logPath = Join-Path $PSScriptRoot "..\logs\06-add-company_${CompanyName}_$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
Initialize-LogFile -LogPath $logPath -ScriptName "06-add-company.ps1"
try {
Write-LogSection "Adding New Company: $CompanyName"
# Validate Oracle installation
$oraHome = Get-OracleHome -OracleHome $OracleHome
Write-LogSuccess "Oracle Home: $oraHome"
# Test connection
Write-Log "Testing database connection..."
if (-not (Test-OracleConnection -OracleHome $oraHome -ServiceName $ServiceName `
-Password $SystemPassword)) {
throw "Cannot connect to database. Please verify ServiceName and SystemPassword."
}
Write-LogSuccess "Database connection successful"
# Check if user already exists
Write-Log "Checking if user $CompanyName exists..."
$userExists = Test-OracleUser -OracleHome $oraHome -ServiceName $ServiceName `
-Password $SystemPassword -SchemaName $CompanyName
if ($userExists) {
if ($Force) {
Write-LogWarning "User $CompanyName exists. Dropping due to -Force flag..."
$dropSql = @"
SET ECHO OFF FEEDBACK ON VERIFY OFF
DROP USER $CompanyName CASCADE;
SELECT 'USER_DROPPED' FROM dual;
EXIT;
"@
$dropResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $dropSql
if ($dropResult -match "USER_DROPPED") {
Write-Log "User $CompanyName dropped"
}
else {
throw "Failed to drop user $CompanyName"
}
}
else {
throw "User $CompanyName already exists. Use -Force to drop and recreate."
}
}
# Create user
Write-LogSection "Creating User $CompanyName"
$createUserSql = @"
SET ECHO OFF FEEDBACK ON VERIFY OFF
PROMPT Creating user $CompanyName...
CREATE USER $CompanyName
IDENTIFIED BY "$Password"
DEFAULT TABLESPACE ROA
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT;
PROMPT Granting role privileges...
GRANT CONNECT TO $CompanyName;
GRANT RESOURCE TO $CompanyName;
PROMPT Granting system privileges...
GRANT CREATE MATERIALIZED VIEW TO $CompanyName;
GRANT CREATE PROCEDURE TO $CompanyName;
GRANT CREATE SEQUENCE TO $CompanyName;
GRANT CREATE TABLE TO $CompanyName;
GRANT CREATE TRIGGER TO $CompanyName;
GRANT CREATE VIEW TO $CompanyName;
GRANT DEBUG CONNECT SESSION TO $CompanyName;
GRANT SELECT ANY TABLE TO $CompanyName;
GRANT CREATE TYPE TO $CompanyName;
GRANT UNLIMITED TABLESPACE TO $CompanyName;
COMMIT;
SELECT 'USER_CREATED' FROM dual;
EXIT;
"@
$createResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $createUserSql
if ($createResult -match "USER_CREATED") {
Write-LogSuccess "User $CompanyName created successfully"
}
else {
Write-LogError "Failed to create user"
Write-LogDebug $createResult
throw "User creation failed"
}
# Import from template if specified
if ($TemplateDump) {
Write-LogSection "Importing from Template"
Write-Log "Template dump: $TemplateDump"
# Determine template schema for remapping
if (-not $TemplateSchema) {
$TemplateSchema = [System.IO.Path]::GetFileNameWithoutExtension($TemplateDump).ToUpper()
Write-Log "Assuming template schema: $TemplateSchema"
}
# Setup DMPDIR
$dmpDir = "C:\DMPDIR"
if (-not (Test-Path -Path $dmpDir)) {
New-Item -ItemType Directory -Path $dmpDir -Force | Out-Null
}
New-OracleDirectory -OracleHome $oraHome -ServiceName $ServiceName `
-Password $SystemPassword -DirectoryName "DMPDIR" -DirectoryPath $dmpDir
# Copy dump to DMPDIR
$dumpFileName = Split-Path -Path $TemplateDump -Leaf
$targetDumpPath = Join-Path $dmpDir $dumpFileName
if ($TemplateDump -ne $targetDumpPath) {
Write-Log "Copying dump file to DMPDIR..."
Copy-Item -Path $TemplateDump -Destination $targetDumpPath -Force
}
# Run import with remap
Write-Log "Running impdp..."
$impdpPath = Join-Path $oraHome "bin\impdp.exe"
$importLogFile = "${CompanyName}_import_$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
$connString = "SYSTEM/`"$SystemPassword`"@$ServiceName"
$impdpParams = @(
"`"$connString`"",
"directory=DMPDIR",
"dumpfile=$dumpFileName",
"logfile=$importLogFile",
"remap_schema=$TemplateSchema`:$CompanyName",
"table_exists_action=REPLACE"
)
$arguments = $impdpParams -join " "
# Set Oracle environment
$env:ORACLE_HOME = $oraHome
$env:PATH = "$oraHome\bin;$env:PATH"
$env:NLS_LANG = "AMERICAN_AMERICA.AL32UTF8"
$importStart = Get-Date
$process = Start-Process -FilePath $impdpPath -ArgumentList $arguments -Wait -NoNewWindow -PassThru
$importDuration = (Get-Date) - $importStart
Write-Log "Import completed in $([math]::Round($importDuration.TotalMinutes, 2)) minutes"
if ($process.ExitCode -eq 0) {
Write-LogSuccess "Template imported successfully"
}
else {
Write-LogWarning "Import completed with warnings (exit code: $($process.ExitCode))"
}
# Clean up copied dump file
if ($TemplateDump -ne $targetDumpPath -and (Test-Path -Path $targetDumpPath)) {
Remove-Item -Path $targetDumpPath -Force -ErrorAction SilentlyContinue
}
}
# Get final object count
Write-LogSection "Verifying Schema"
$counts = Get-SchemaObjectCount -OracleHome $oraHome -ServiceName $ServiceName `
-Password $SystemPassword -SchemaName $CompanyName
$totalObjects = if ($counts['TOTAL']) { $counts['TOTAL'] } else { 0 }
$invalidObjects = if ($counts['INVALID']) { $counts['INVALID'] } else { 0 }
Write-Log "Total objects: $totalObjects"
if ($invalidObjects -gt 0) {
Write-LogWarning "Invalid objects: $invalidObjects"
# Recompile
Write-Log "Recompiling invalid objects..."
$recompileSql = @"
BEGIN
DBMS_UTILITY.COMPILE_SCHEMA('$CompanyName', FALSE);
END;
/
EXIT;
"@
Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $recompileSql -Silent
# Recheck
$recheckCounts = Get-SchemaObjectCount -OracleHome $oraHome -ServiceName $ServiceName `
-Password $SystemPassword -SchemaName $CompanyName
$recheckInvalid = if ($recheckCounts['INVALID']) { $recheckCounts['INVALID'] } else { 0 }
if ($recheckInvalid -lt $invalidObjects) {
Write-LogSuccess "Recompilation fixed $($invalidObjects - $recheckInvalid) objects"
}
}
# Test connection with new user
Write-Log "Testing connection as $CompanyName..."
if (Test-OracleConnection -OracleHome $oraHome -ServiceName $ServiceName `
-Username $CompanyName -Password $Password) {
Write-LogSuccess "Connection test successful"
}
else {
Write-LogWarning "Could not connect as $CompanyName"
}
# Summary
Write-LogSection "Company Added"
Write-LogSuccess "Company $CompanyName added successfully!"
Write-Log ""
Write-Log "Summary:"
Write-Log " Schema name: $CompanyName"
Write-Log " Service: $ServiceName"
Write-Log " Objects: $totalObjects"
if ($TemplateDump) {
Write-Log " Template: $TemplateDump"
}
Write-Log ""
Write-Log "Connection string:"
Write-Log " $CompanyName/$Password@$ServiceName"
Close-LogFile -Success $true
exit 0
}
catch {
Write-LogError "Failed to add company: $_"
Write-LogError $_.ScriptStackTrace
Close-LogFile -Success $false
exit 1
}

View File

@@ -0,0 +1,515 @@
#Requires -Version 5.1
<#
.SYNOPSIS
Verify ROA Oracle installation.
.DESCRIPTION
Performs comprehensive verification of the ROA Oracle installation:
- Database info (version, CDB/non-CDB, service name)
- Tablespace ROA status
- User CONTAFIN_ORACLE status and object count
- SYS custom objects status
- Public synonyms count
- Invalid objects count
- Company schemas list with object counts
.PARAMETER OracleHome
Oracle home directory. If not specified, auto-detects.
.PARAMETER ServiceName
Database service name. Default: XEPDB1
.PARAMETER SystemPassword
SYSTEM user password. Default: romfastsoft
.PARAMETER Detailed
Show detailed object counts per schema.
.PARAMETER OutputFile
Optional path to save verification report.
.EXAMPLE
.\07-verify-installation.ps1
.EXAMPLE
.\07-verify-installation.ps1 -Detailed -OutputFile "C:\reports\verification.txt"
.EXAMPLE
.\07-verify-installation.ps1 -ServiceName "ROA" -SystemPassword "mypassword"
.NOTES
File Name : 07-verify-installation.ps1
Prerequisite : ROA Oracle installation completed
Copyright 2024 : ROMFAST
#>
[CmdletBinding()]
param(
[Parameter(Mandatory = $false)]
[string]$OracleHome,
[Parameter(Mandatory = $false)]
[string]$ServiceName = "XEPDB1",
[Parameter(Mandatory = $false)]
[string]$SystemPassword = "romfastsoft",
[Parameter(Mandatory = $false)]
[switch]$Detailed,
[Parameter(Mandatory = $false)]
[string]$OutputFile
)
$ErrorActionPreference = 'Stop'
# Source library functions
. "$PSScriptRoot\lib\logging-functions.ps1"
. "$PSScriptRoot\lib\oracle-functions.ps1"
# Initialize logging
$logPath = Join-Path $PSScriptRoot "..\logs\07-verify-installation_$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
Initialize-LogFile -LogPath $logPath -ScriptName "07-verify-installation.ps1"
# Initialize report
$report = [System.Text.StringBuilder]::new()
function Add-ReportLine {
param([string]$Line)
[void]$report.AppendLine($Line)
Write-Host $Line
}
function Add-ReportSection {
param([string]$Title)
Add-ReportLine ""
Add-ReportLine ("=" * 60)
Add-ReportLine " $Title"
Add-ReportLine ("=" * 60)
Add-ReportLine ""
}
try {
Add-ReportSection "ROA Oracle Installation Verification Report"
Add-ReportLine "Generated: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')"
Add-ReportLine "Computer: $env:COMPUTERNAME"
# Validate Oracle installation
$oraHome = Get-OracleHome -OracleHome $OracleHome
Write-LogSuccess "Oracle Home: $oraHome"
# Test connection
Write-Log "Testing database connection..."
if (-not (Test-OracleConnection -OracleHome $oraHome -ServiceName $ServiceName `
-Password $SystemPassword)) {
throw "Cannot connect to database. Please verify ServiceName and SystemPassword."
}
Write-LogSuccess "Database connection successful"
# Database Information
Add-ReportSection "Database Information"
$dbInfoSql = @"
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF LINESIZE 500
SELECT 'VERSION:' || version_full FROM v`$instance;
SELECT 'EDITION:' || edition FROM v`$instance;
SELECT 'INSTANCE:' || instance_name FROM v`$instance;
SELECT 'HOST:' || host_name FROM v`$instance;
SELECT 'STARTUP:' || TO_CHAR(startup_time, 'YYYY-MM-DD HH24:MI:SS') FROM v`$instance;
SELECT 'STATUS:' || status FROM v`$instance;
SELECT 'CDB:' || CDB FROM v`$database;
SELECT 'DBNAME:' || name FROM v`$database;
SELECT 'OPEN_MODE:' || open_mode FROM v`$database;
EXIT;
"@
$dbInfo = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $dbInfoSql -Silent
$dbData = @{}
foreach ($line in $dbInfo -split "`n") {
if ($line -match "^([A-Z_]+):(.*)$") {
$dbData[$Matches[1]] = $Matches[2].Trim()
}
}
Add-ReportLine "Oracle Version: $($dbData['VERSION'])"
Add-ReportLine "Edition: $($dbData['EDITION'])"
Add-ReportLine "Instance Name: $($dbData['INSTANCE'])"
Add-ReportLine "Host Name: $($dbData['HOST'])"
Add-ReportLine "Database Name: $($dbData['DBNAME'])"
Add-ReportLine "CDB Mode: $($dbData['CDB'])"
Add-ReportLine "Open Mode: $($dbData['OPEN_MODE'])"
Add-ReportLine "Instance Status: $($dbData['STATUS'])"
Add-ReportLine "Startup Time: $($dbData['STARTUP'])"
Add-ReportLine "Service Name: $ServiceName"
Add-ReportLine "Oracle Home: $oraHome"
# Container Information
$containerInfo = Test-PDB -OracleHome $oraHome -ServiceName $ServiceName -Password $SystemPassword
Add-ReportLine "Container: $($containerInfo.ContainerName)"
Add-ReportLine "Container ID: $($containerInfo.ConId)"
# Tablespace ROA Status
Add-ReportSection "Tablespace ROA Status"
$tsSql = @"
SET PAGESIZE 100 FEEDBACK OFF VERIFY OFF HEADING ON ECHO OFF LINESIZE 200
COLUMN tablespace_name FORMAT A20
COLUMN status FORMAT A10
COLUMN contents FORMAT A10
COLUMN allocation_type FORMAT A10
SELECT tablespace_name, status, contents, allocation_type
FROM dba_tablespaces
WHERE tablespace_name = 'ROA';
COLUMN file_name FORMAT A60
COLUMN size_mb FORMAT 999,999.99
COLUMN maxsize_mb FORMAT 999,999.99
COLUMN autoextensible FORMAT A5
SELECT file_name,
ROUND(bytes/1024/1024, 2) AS size_mb,
ROUND(maxbytes/1024/1024, 2) AS maxsize_mb,
autoextensible
FROM dba_data_files
WHERE tablespace_name = 'ROA';
EXIT;
"@
$tsResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $tsSql -Silent
Add-ReportLine $tsResult
# Check if ROA tablespace exists
if ($tsResult -notmatch "ROA") {
Add-ReportLine ""
Add-ReportLine "[WARNING] Tablespace ROA not found!"
}
# CONTAFIN_ORACLE Status
Add-ReportSection "CONTAFIN_ORACLE Schema Status"
$coExistsSql = @"
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT 'USER_EXISTS' FROM dba_users WHERE username = 'CONTAFIN_ORACLE';
EXIT;
"@
$coExists = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $coExistsSql -Silent
if ($coExists -match "USER_EXISTS") {
Add-ReportLine "Status: EXISTS"
$coCounts = Get-SchemaObjectCount -OracleHome $oraHome -ServiceName $ServiceName `
-Password $SystemPassword -SchemaName "CONTAFIN_ORACLE"
$coTotal = if ($coCounts['TOTAL']) { $coCounts['TOTAL'] } else { 0 }
$coInvalid = if ($coCounts['INVALID']) { $coCounts['INVALID'] } else { 0 }
Add-ReportLine "Total Objects: $coTotal"
Add-ReportLine "Invalid Objects: $coInvalid"
if ($Detailed) {
Add-ReportLine ""
Add-ReportLine "Object counts by type:"
foreach ($key in $coCounts.Keys | Sort-Object) {
if ($key -ne 'TOTAL' -and $key -ne 'INVALID') {
Add-ReportLine " $($key.PadRight(25)) $($coCounts[$key])"
}
}
}
}
else {
Add-ReportLine "Status: NOT FOUND"
Add-ReportLine "[WARNING] CONTAFIN_ORACLE user does not exist!"
}
# SYS Custom Objects
Add-ReportSection "SYS Custom Objects"
$sysObjSql = @"
SET PAGESIZE 100 FEEDBACK OFF VERIFY OFF HEADING ON ECHO OFF LINESIZE 200
COLUMN object_name FORMAT A30
COLUMN object_type FORMAT A15
COLUMN status FORMAT A10
SELECT object_name, object_type, status
FROM dba_objects
WHERE owner = 'SYS'
AND object_name IN (
'AUTH_PACK', 'AUTH_DETALII', 'AUTH_SERII', 'VAUTH_SERII',
'PACK_UPDATE', 'PACK_UTILS', 'NEWSCHEMA', 'NEWSCHEMAPOST',
'NEWSCHEMAPROGRESS', 'DMPDIR'
)
ORDER BY object_type, object_name;
EXIT;
"@
$sysResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYS" -Password $SystemPassword -SqlCommand $sysObjSql -AsSysdba -Silent
Add-ReportLine $sysResult
# Public Synonyms Count
Add-ReportSection "Public Synonyms"
$synSql = @"
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT 'TOTAL_SYNONYMS:' || COUNT(*) FROM dba_synonyms WHERE owner = 'PUBLIC';
SELECT 'CO_SYNONYMS:' || COUNT(*) FROM dba_synonyms WHERE owner = 'PUBLIC' AND table_owner = 'CONTAFIN_ORACLE';
SELECT 'SYS_SYNONYMS:' || COUNT(*) FROM dba_synonyms WHERE owner = 'PUBLIC' AND table_owner = 'SYS' AND table_name LIKE 'AUTH%';
EXIT;
"@
$synResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $synSql -Silent
$synData = @{}
foreach ($line in $synResult -split "`n") {
if ($line -match "^([A-Z_]+):(\d+)$") {
$synData[$Matches[1]] = [int]$Matches[2]
}
}
Add-ReportLine "Total public synonyms: $($synData['TOTAL_SYNONYMS'])"
Add-ReportLine "CONTAFIN_ORACLE synonyms: $($synData['CO_SYNONYMS'])"
Add-ReportLine "SYS AUTH synonyms: $($synData['SYS_SYNONYMS'])"
# All Invalid Objects
Add-ReportSection "Invalid Objects Summary"
$invalidSql = @"
SET PAGESIZE 100 FEEDBACK OFF VERIFY OFF HEADING ON ECHO OFF LINESIZE 200
COLUMN owner FORMAT A20
COLUMN invalid_count FORMAT 999,999
SELECT owner, COUNT(*) AS invalid_count
FROM dba_objects
WHERE status = 'INVALID'
AND owner NOT IN ('SYS', 'SYSTEM', 'OUTLN', 'DBSNMP', 'XDB', 'ORDSYS',
'ORDDATA', 'MDSYS', 'CTXSYS', 'WMSYS', 'APEX_PUBLIC_USER')
GROUP BY owner
ORDER BY invalid_count DESC;
EXIT;
"@
$invalidResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $invalidSql -Silent
if ($invalidResult.Trim() -eq "" -or $invalidResult -match "no rows selected") {
Add-ReportLine "No invalid objects found in application schemas."
}
else {
Add-ReportLine $invalidResult
}
# Company Schemas
Add-ReportSection "Company Schemas"
# Get company list from NOM_FIRME
$companySql = @"
SET PAGESIZE 1000 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF LINESIZE 200
SELECT schema FROM CONTAFIN_ORACLE.NOM_FIRME WHERE sters = 0 AND schema IS NOT NULL ORDER BY schema;
EXIT;
"@
$companyList = @()
try {
$companyResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $companySql -Silent
foreach ($line in $companyResult -split "`n") {
$schema = $line.Trim()
if ($schema -match "^[A-Z0-9_]+$") {
$companyList += $schema
}
}
}
catch {
Add-ReportLine "[WARNING] Could not query NOM_FIRME table"
}
Add-ReportLine "Companies registered in NOM_FIRME: $($companyList.Count)"
Add-ReportLine ""
if ($companyList.Count -gt 0) {
# Check which schemas exist
$existingSql = @"
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF LINESIZE 200
SELECT username FROM dba_users WHERE username NOT IN (
'SYS', 'SYSTEM', 'OUTLN', 'DBSNMP', 'XDB', 'ORDSYS', 'ORDDATA', 'MDSYS',
'CTXSYS', 'WMSYS', 'APEX_PUBLIC_USER', 'CONTAFIN_ORACLE', 'ANONYMOUS',
'APEX_040200', 'APEX_050000', 'APPQOSSYS', 'AUDSYS', 'DIP', 'DVF', 'DVSYS',
'FLOWS_FILES', 'GGSYS', 'GSMADMIN_INTERNAL', 'GSMCATUSER', 'GSMUSER',
'LBACSYS', 'MDDATA', 'OJVMSYS', 'OLAPSYS', 'ORACLE_OCM', 'REMOTE_SCHEDULER_AGENT',
'SI_INFORMTN_SCHEMA', 'SPATIAL_CSW_ADMIN_USR', 'SPATIAL_WFS_ADMIN_USR',
'SYSBACKUP', 'SYSDG', 'SYSKM', 'SYSRAC', 'XS`$NULL'
) ORDER BY username;
EXIT;
"@
$existingResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $existingSql -Silent
$existingSchemas = @()
foreach ($line in $existingResult -split "`n") {
$schema = $line.Trim()
if ($schema -match "^[A-Z0-9_]+$") {
$existingSchemas += $schema
}
}
Add-ReportLine "Existing company schemas: $($existingSchemas.Count)"
Add-ReportLine ""
# Show details
Add-ReportLine ("Schema".PadRight(25) + "Status".PadRight(12) + "Objects".PadRight(10) + "Invalid")
Add-ReportLine ("-" * 60)
foreach ($schema in $companyList) {
$status = if ($existingSchemas -contains $schema) { "EXISTS" } else { "MISSING" }
if ($status -eq "EXISTS") {
$counts = Get-SchemaObjectCount -OracleHome $oraHome -ServiceName $ServiceName `
-Password $SystemPassword -SchemaName $schema
$total = if ($counts['TOTAL']) { $counts['TOTAL'] } else { 0 }
$invalid = if ($counts['INVALID']) { $counts['INVALID'] } else { 0 }
Add-ReportLine ("$schema".PadRight(25) + "$status".PadRight(12) + "$total".PadRight(10) + "$invalid")
}
else {
Add-ReportLine ("$schema".PadRight(25) + "$status".PadRight(12) + "-".PadRight(10) + "-")
}
}
# Check for orphan schemas (exist in DB but not in NOM_FIRME)
$orphanSchemas = $existingSchemas | Where-Object { $companyList -notcontains $_ }
if ($orphanSchemas.Count -gt 0) {
Add-ReportLine ""
Add-ReportLine "Orphan schemas (not in NOM_FIRME):"
foreach ($schema in $orphanSchemas) {
$counts = Get-SchemaObjectCount -OracleHome $oraHome -ServiceName $ServiceName `
-Password $SystemPassword -SchemaName $schema
$total = if ($counts['TOTAL']) { $counts['TOTAL'] } else { 0 }
Add-ReportLine " - $schema ($total objects)"
}
}
}
# Network ACL Status
Add-ReportSection "Network ACL Status"
$aclSql = @"
SET PAGESIZE 100 FEEDBACK OFF VERIFY OFF HEADING ON ECHO OFF LINESIZE 200
COLUMN acl FORMAT A30
COLUMN principal FORMAT A20
COLUMN privilege FORMAT A15
COLUMN is_grant FORMAT A8
SELECT acl, principal, privilege, is_grant
FROM dba_network_acl_privileges
WHERE principal = 'CONTAFIN_ORACLE';
EXIT;
"@
$aclResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYS" -Password $SystemPassword -SqlCommand $aclSql -AsSysdba -Silent
if ($aclResult.Trim() -eq "" -or $aclResult -match "no rows selected") {
Add-ReportLine "No ACL configured for CONTAFIN_ORACLE"
}
else {
Add-ReportLine $aclResult
}
# Context Status
Add-ReportSection "Context Status"
$ctxSql = @"
SET PAGESIZE 100 FEEDBACK OFF VERIFY OFF HEADING ON ECHO OFF LINESIZE 200
COLUMN namespace FORMAT A20
COLUMN schema FORMAT A25
COLUMN package FORMAT A25
SELECT namespace, schema, package
FROM dba_context
WHERE namespace = 'SESIUNE';
EXIT;
"@
$ctxResult = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $SystemPassword -SqlCommand $ctxSql -Silent
if ($ctxResult.Trim() -eq "" -or $ctxResult -match "no rows selected") {
Add-ReportLine "SESIUNE context not found"
}
else {
Add-ReportLine $ctxResult
}
# Final Summary
Add-ReportSection "Verification Summary"
$issues = @()
# Check for issues
if ($tsResult -notmatch "ROA") {
$issues += "Tablespace ROA not found"
}
if ($coExists -notmatch "USER_EXISTS") {
$issues += "CONTAFIN_ORACLE user not found"
}
elseif ($coCounts -and $coCounts['INVALID'] -gt 0) {
$issues += "CONTAFIN_ORACLE has $($coCounts['INVALID']) invalid objects"
}
if ($synData['CO_SYNONYMS'] -eq 0) {
$issues += "No public synonyms for CONTAFIN_ORACLE"
}
$missingCompanies = $companyList | Where-Object { $existingSchemas -notcontains $_ }
if ($missingCompanies.Count -gt 0) {
$issues += "$($missingCompanies.Count) company schemas are missing"
}
if ($issues.Count -eq 0) {
Add-ReportLine "[OK] All checks passed!"
Add-ReportLine ""
Add-ReportLine "The ROA Oracle installation appears to be complete and functional."
}
else {
Add-ReportLine "[WARNING] Issues found:"
Add-ReportLine ""
foreach ($issue in $issues) {
Add-ReportLine " - $issue"
}
}
Add-ReportLine ""
Add-ReportLine ("=" * 60)
Add-ReportLine " End of Verification Report"
Add-ReportLine ("=" * 60)
# Save report if requested
if ($OutputFile) {
Set-Content -Path $OutputFile -Value $report.ToString() -Encoding UTF8
Write-LogSuccess "Report saved to: $OutputFile"
}
Close-LogFile -Success ($issues.Count -eq 0)
exit $(if ($issues.Count -eq 0) { 0 } else { 1 })
}
catch {
Write-LogError "Verification failed: $_"
Write-LogError $_.ScriptStackTrace
Close-LogFile -Success $false
exit 1
}

View File

@@ -0,0 +1,300 @@
#Requires -Version 5.1
<#
.SYNOPSIS
Logging utility functions for ROA Oracle setup scripts.
.DESCRIPTION
Provides standardized logging functions with timestamps, colors, and file output.
All log messages are written to both console and optional log file.
.NOTES
File Name : logging-functions.ps1
Prerequisite : PowerShell 5.1 or higher
Copyright 2024 : ROMFAST
#>
# Script-level variables for logging
$script:LogFile = $null
$script:LogLevel = 'Info'
<#
.SYNOPSIS
Initialize the log file with a header.
.DESCRIPTION
Creates or clears a log file and writes a header with timestamp and script info.
.PARAMETER LogPath
Path to the log file.
.PARAMETER ScriptName
Name of the calling script for the header.
.EXAMPLE
Initialize-LogFile -LogPath "C:\logs\setup.log" -ScriptName "01-setup-database.ps1"
#>
function Initialize-LogFile {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[string]$LogPath,
[Parameter(Mandatory = $false)]
[string]$ScriptName = "ROA Setup"
)
$script:LogFile = $LogPath
# Create directory if it doesn't exist
$logDir = Split-Path -Path $LogPath -Parent
if ($logDir -and -not (Test-Path -Path $logDir)) {
New-Item -ItemType Directory -Path $logDir -Force | Out-Null
}
# Write header
$header = @"
================================================================================
ROA Oracle Setup Log
Script: $ScriptName
Started: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')
Computer: $env:COMPUTERNAME
User: $env:USERNAME
================================================================================
"@
Set-Content -Path $LogPath -Value $header -Encoding UTF8
}
<#
.SYNOPSIS
Write a log message with timestamp.
.DESCRIPTION
Writes a timestamped message to console and log file. Supports different
message types (Info, Warning, Error, Success, Debug).
.PARAMETER Message
The message to log.
.PARAMETER Level
The log level: Info, Warning, Error, Success, Debug.
.PARAMETER NoConsole
If specified, only writes to log file.
.EXAMPLE
Write-Log "Starting database setup" -Level Info
#>
function Write-Log {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true, Position = 0)]
[string]$Message,
[Parameter(Mandatory = $false)]
[ValidateSet('Info', 'Warning', 'Error', 'Success', 'Debug')]
[string]$Level = 'Info',
[Parameter(Mandatory = $false)]
[switch]$NoConsole
)
$timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss'
$logMessage = "[$timestamp] [$Level] $Message"
# Write to log file if initialized
if ($script:LogFile) {
Add-Content -Path $script:LogFile -Value $logMessage -Encoding UTF8
}
# Write to console with appropriate color
if (-not $NoConsole) {
$color = switch ($Level) {
'Info' { 'White' }
'Warning' { 'Yellow' }
'Error' { 'Red' }
'Success' { 'Green' }
'Debug' { 'Cyan' }
default { 'White' }
}
$prefix = switch ($Level) {
'Info' { '[INFO] ' }
'Warning' { '[WARN] ' }
'Error' { '[ERROR] ' }
'Success' { '[OK] ' }
'Debug' { '[DEBUG] ' }
default { '[INFO] ' }
}
Write-Host "$prefix$Message" -ForegroundColor $color
}
}
<#
.SYNOPSIS
Write an error message in red.
.DESCRIPTION
Convenience function for logging error messages.
.PARAMETER Message
The error message to log.
.EXAMPLE
Write-LogError "Failed to connect to database"
#>
function Write-LogError {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true, Position = 0)]
[string]$Message
)
Write-Log -Message $Message -Level Error
}
<#
.SYNOPSIS
Write a success message in green.
.DESCRIPTION
Convenience function for logging success messages.
.PARAMETER Message
The success message to log.
.EXAMPLE
Write-LogSuccess "Database created successfully"
#>
function Write-LogSuccess {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true, Position = 0)]
[string]$Message
)
Write-Log -Message $Message -Level Success
}
<#
.SYNOPSIS
Write a warning message in yellow.
.DESCRIPTION
Convenience function for logging warning messages.
.PARAMETER Message
The warning message to log.
.EXAMPLE
Write-LogWarning "User already exists, skipping creation"
#>
function Write-LogWarning {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true, Position = 0)]
[string]$Message
)
Write-Log -Message $Message -Level Warning
}
<#
.SYNOPSIS
Write a debug message in cyan.
.DESCRIPTION
Convenience function for logging debug messages.
.PARAMETER Message
The debug message to log.
.EXAMPLE
Write-LogDebug "SQL command: SELECT * FROM dual"
#>
function Write-LogDebug {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true, Position = 0)]
[string]$Message
)
Write-Log -Message $Message -Level Debug
}
<#
.SYNOPSIS
Write a section header to the log.
.DESCRIPTION
Writes a formatted section header for visual separation in logs.
.PARAMETER Title
The section title.
.EXAMPLE
Write-LogSection "Creating Tablespace ROA"
#>
function Write-LogSection {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true, Position = 0)]
[string]$Title
)
$separator = "=" * 60
$message = @"
$separator
$Title
$separator
"@
if ($script:LogFile) {
Add-Content -Path $script:LogFile -Value $message -Encoding UTF8
}
Write-Host ""
Write-Host $separator -ForegroundColor Cyan
Write-Host " $Title" -ForegroundColor Cyan
Write-Host $separator -ForegroundColor Cyan
}
<#
.SYNOPSIS
Close the log file with a footer.
.DESCRIPTION
Writes a closing footer to the log file with completion status.
.PARAMETER Success
Indicates if the script completed successfully.
.EXAMPLE
Close-LogFile -Success $true
#>
function Close-LogFile {
[CmdletBinding()]
param(
[Parameter(Mandatory = $false)]
[bool]$Success = $true
)
if ($script:LogFile) {
$status = if ($Success) { "COMPLETED SUCCESSFULLY" } else { "COMPLETED WITH ERRORS" }
$footer = @"
================================================================================
$status
Finished: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')
================================================================================
"@
Add-Content -Path $script:LogFile -Value $footer -Encoding UTF8
}
}
# Note: Functions are available when dot-sourced (. .\logging-functions.ps1)
# Do NOT use Export-ModuleMember - it only works inside .psm1 modules

View File

@@ -0,0 +1,952 @@
#Requires -Version 5.1
<#
.SYNOPSIS
Oracle connectivity and operations functions for ROA setup scripts.
.DESCRIPTION
Provides functions for Oracle database connectivity, SQL*Plus execution,
version detection, and Data Pump operations.
.NOTES
File Name : oracle-functions.ps1
Prerequisite : PowerShell 5.1 or higher, Oracle Client installed
Copyright 2024 : ROMFAST
#>
# Source logging functions
. "$PSScriptRoot\logging-functions.ps1"
<#
.SYNOPSIS
Find Oracle Home directory.
.DESCRIPTION
Auto-detects Oracle Home from registry, environment variable, or common paths.
.PARAMETER OracleHome
Optional explicit Oracle Home path. If not specified, auto-detects.
.OUTPUTS
String. The Oracle Home path.
.EXAMPLE
$oracleHome = Get-OracleHome
#>
function Get-OracleHome {
[CmdletBinding()]
param(
[Parameter(Mandatory = $false)]
[string]$OracleHome
)
# If explicitly provided, validate and return
if ($OracleHome) {
if (Test-Path -Path "$OracleHome\bin\sqlplus.exe") {
return $OracleHome
}
throw "Invalid Oracle Home: sqlplus.exe not found at $OracleHome\bin\sqlplus.exe"
}
# Try ORACLE_HOME environment variable
if ($env:ORACLE_HOME -and (Test-Path -Path "$env:ORACLE_HOME\bin\sqlplus.exe")) {
return $env:ORACLE_HOME
}
# Try registry for Oracle XE
$regPaths = @(
'HKLM:\SOFTWARE\Oracle\KEY_OraDB21Home1',
'HKLM:\SOFTWARE\Oracle\KEY_OraDB18Home1',
'HKLM:\SOFTWARE\Oracle\KEY_XE',
'HKLM:\SOFTWARE\Wow6432Node\Oracle\KEY_OraDB21Home1',
'HKLM:\SOFTWARE\Wow6432Node\Oracle\KEY_OraDB18Home1'
)
foreach ($regPath in $regPaths) {
if (Test-Path -Path $regPath) {
$oraHome = (Get-ItemProperty -Path $regPath -ErrorAction SilentlyContinue).ORACLE_HOME
if ($oraHome -and (Test-Path -Path "$oraHome\bin\sqlplus.exe")) {
return $oraHome
}
}
}
# Try common installation paths (including user-specific paths)
$currentUser = $env:USERNAME
$commonPaths = @(
"C:\app\$currentUser\product\21c\dbhomeXE",
"C:\app\$currentUser\product\21c\dbhome_1",
"C:\app\$currentUser\product\18c\dbhomeXE",
'C:\app\oracle\product\21c\dbhomeXE',
'C:\app\oracle\product\21c\dbhome_1',
'C:\app\oracle\product\18c\dbhomeXE',
'C:\app\romfast\product\21c\dbhomeXE',
'C:\app\romfast\product\21c\dbhome_1',
'C:\oraclexe\app\oracle\product\11.2.0\server',
"D:\app\$currentUser\product\21c\dbhomeXE",
'D:\app\oracle\product\21c\dbhomeXE',
'D:\app\oracle\product\18c\dbhomeXE'
)
foreach ($path in $commonPaths) {
if (Test-Path -Path "$path\bin\sqlplus.exe") {
return $path
}
}
throw "Oracle Home not found. Please specify -OracleHome parameter or set ORACLE_HOME environment variable."
}
<#
.SYNOPSIS
Get Oracle version information.
.DESCRIPTION
Detects Oracle version (XE vs SE), edition, and whether it's a Container Database (CDB).
.PARAMETER OracleHome
Oracle Home directory.
.PARAMETER ServiceName
Database service name.
.PARAMETER Username
Username for connection (default: SYSTEM).
.PARAMETER Password
Password for connection.
.OUTPUTS
PSCustomObject with Version, Edition, IsCDB, IsXE properties.
.EXAMPLE
$version = Get-OracleVersion -ServiceName "XE" -Password "oracle"
#>
function Get-OracleVersion {
[CmdletBinding()]
param(
[Parameter(Mandatory = $false)]
[string]$OracleHome,
[Parameter(Mandatory = $true)]
[string]$ServiceName,
[Parameter(Mandatory = $false)]
[string]$Username = "SYSTEM",
[Parameter(Mandatory = $true)]
[string]$Password
)
$oraHome = Get-OracleHome -OracleHome $OracleHome
$sql = @"
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT 'VERSION:' || version_full FROM v`$instance;
SELECT 'EDITION:' || edition FROM v`$instance;
SELECT 'CDB:' || CDB FROM v`$database;
EXIT;
"@
$result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username $Username -Password $Password -SqlCommand $sql -Silent
$versionInfo = [PSCustomObject]@{
Version = ""
Edition = ""
IsCDB = $false
IsXE = $false
FullInfo = $result
}
foreach ($line in $result -split "`n") {
if ($line -match "^VERSION:(.+)$") {
$versionInfo.Version = $Matches[1].Trim()
}
elseif ($line -match "^EDITION:(.+)$") {
$versionInfo.Edition = $Matches[1].Trim()
$versionInfo.IsXE = $versionInfo.Edition -match "XE|Express"
}
elseif ($line -match "^CDB:(.+)$") {
$versionInfo.IsCDB = $Matches[1].Trim() -eq "YES"
}
}
return $versionInfo
}
<#
.SYNOPSIS
Get the default service name based on Oracle configuration.
.DESCRIPTION
Auto-detects the appropriate service name. Returns XEPDB1 for Oracle XE CDB,
or ROA for traditional non-CDB installations.
.PARAMETER OracleHome
Oracle Home directory.
.PARAMETER SystemPassword
SYSTEM user password.
.OUTPUTS
String. The service name.
.EXAMPLE
$serviceName = Get-ServiceName -SystemPassword "oracle"
#>
function Get-ServiceName {
[CmdletBinding()]
param(
[Parameter(Mandatory = $false)]
[string]$OracleHome,
[Parameter(Mandatory = $true)]
[string]$SystemPassword
)
$oraHome = Get-OracleHome -OracleHome $OracleHome
# First try to connect to XE and check if it's CDB
try {
$version = Get-OracleVersion -OracleHome $oraHome -ServiceName "XE" `
-Password $SystemPassword -ErrorAction Stop
if ($version.IsCDB) {
# For CDB, use XEPDB1 (the default pluggable database)
return "XEPDB1"
}
else {
return "XE"
}
}
catch {
# Try ROA as service name
try {
$null = Test-OracleConnection -OracleHome $oraHome -ServiceName "ROA" `
-Username "SYSTEM" -Password $SystemPassword -ErrorAction Stop
return "ROA"
}
catch {
# Default to XEPDB1 for modern XE installations
return "XEPDB1"
}
}
}
<#
.SYNOPSIS
Test Oracle database connection.
.DESCRIPTION
Attempts to connect to Oracle and verifies the connection is successful.
.PARAMETER OracleHome
Oracle Home directory.
.PARAMETER ServiceName
Database service name.
.PARAMETER Username
Username for connection.
.PARAMETER Password
Password for connection.
.OUTPUTS
Boolean. True if connection successful.
.EXAMPLE
if (Test-OracleConnection -ServiceName "XEPDB1" -Username "SYSTEM" -Password "oracle") {
Write-Host "Connected!"
}
#>
function Test-OracleConnection {
[CmdletBinding()]
param(
[Parameter(Mandatory = $false)]
[string]$OracleHome,
[Parameter(Mandatory = $true)]
[string]$ServiceName,
[Parameter(Mandatory = $false)]
[string]$Username = "SYSTEM",
[Parameter(Mandatory = $true)]
[string]$Password,
[Parameter(Mandatory = $false)]
[switch]$AsSysdba
)
$oraHome = Get-OracleHome -OracleHome $OracleHome
$sql = "SELECT 'CONNECTED' FROM dual; EXIT;"
try {
$result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username $Username -Password $Password -SqlCommand $sql -AsSysdba:$AsSysdba -Silent
return $result -match "CONNECTED"
}
catch {
return $false
}
}
<#
.SYNOPSIS
Test if connected to a PDB or non-CDB.
.DESCRIPTION
Checks the current container type to determine if connected to a PDB,
the CDB root, or a non-CDB database.
.PARAMETER OracleHome
Oracle Home directory.
.PARAMETER ServiceName
Database service name.
.PARAMETER Username
Username for connection.
.PARAMETER Password
Password for connection.
.OUTPUTS
PSCustomObject with ContainerName, IsPDB, IsCDBRoot, IsNonCDB properties.
.EXAMPLE
$containerInfo = Test-PDB -ServiceName "XEPDB1" -Password "oracle"
#>
function Test-PDB {
[CmdletBinding()]
param(
[Parameter(Mandatory = $false)]
[string]$OracleHome,
[Parameter(Mandatory = $true)]
[string]$ServiceName,
[Parameter(Mandatory = $false)]
[string]$Username = "SYSTEM",
[Parameter(Mandatory = $true)]
[string]$Password
)
$oraHome = Get-OracleHome -OracleHome $OracleHome
$sql = @"
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT 'CONTAINER:' || SYS_CONTEXT('USERENV', 'CON_NAME') FROM dual;
SELECT 'CON_ID:' || SYS_CONTEXT('USERENV', 'CON_ID') FROM dual;
EXIT;
"@
$result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username $Username -Password $Password -SqlCommand $sql -Silent
$containerInfo = [PSCustomObject]@{
ContainerName = ""
ConId = 0
IsPDB = $false
IsCDBRoot = $false
IsNonCDB = $false
}
foreach ($line in $result -split "`n") {
if ($line -match "^CONTAINER:(.+)$") {
$containerInfo.ContainerName = $Matches[1].Trim()
}
elseif ($line -match "^CON_ID:(.+)$") {
$containerInfo.ConId = [int]$Matches[1].Trim()
}
}
if ($containerInfo.ConId -eq 0) {
$containerInfo.IsNonCDB = $true
}
elseif ($containerInfo.ConId -eq 1) {
$containerInfo.IsCDBRoot = $true
}
else {
$containerInfo.IsPDB = $true
}
return $containerInfo
}
<#
.SYNOPSIS
Execute SQL via SQL*Plus.
.DESCRIPTION
Runs a SQL command or file using SQL*Plus and returns the output.
.PARAMETER OracleHome
Oracle Home directory.
.PARAMETER ServiceName
Database service name.
.PARAMETER Username
Username for connection.
.PARAMETER Password
Password for connection.
.PARAMETER SqlCommand
SQL command(s) to execute.
.PARAMETER SqlFile
Path to SQL file to execute.
.PARAMETER AsSysdba
Connect as SYSDBA.
.PARAMETER Silent
Suppress console output.
.OUTPUTS
String. The SQL*Plus output.
.EXAMPLE
Invoke-SqlPlus -ServiceName "XEPDB1" -Username "SYSTEM" -Password "oracle" -SqlCommand "SELECT * FROM dual;"
.EXAMPLE
Invoke-SqlPlus -ServiceName "XEPDB1" -Username "SYS" -Password "oracle" -SqlFile "C:\scripts\setup.sql" -AsSysdba
#>
function Invoke-SqlPlus {
[CmdletBinding()]
param(
[Parameter(Mandatory = $false)]
[string]$OracleHome,
[Parameter(Mandatory = $true)]
[string]$ServiceName,
[Parameter(Mandatory = $false)]
[string]$Username = "SYSTEM",
[Parameter(Mandatory = $true)]
[string]$Password,
[Parameter(Mandatory = $false)]
[string]$SqlCommand,
[Parameter(Mandatory = $false)]
[string]$SqlFile,
[Parameter(Mandatory = $false)]
[switch]$AsSysdba,
[Parameter(Mandatory = $false)]
[switch]$Silent
)
$oraHome = Get-OracleHome -OracleHome $OracleHome
$sqlplus = Join-Path $oraHome "bin\sqlplus.exe"
if (-not (Test-Path -Path $sqlplus)) {
throw "SQL*Plus not found at: $sqlplus"
}
# Build connection string
$sysdba = if ($AsSysdba) { " as sysdba" } else { "" }
$connString = "$Username/`"$Password`"@$ServiceName$sysdba"
$tempFile = $null
try {
if ($SqlFile) {
# Execute SQL file
if (-not (Test-Path -Path $SqlFile)) {
throw "SQL file not found: $SqlFile"
}
$arguments = "-S `"$connString`" @`"$SqlFile`""
}
else {
# Create temp file for SQL command
$tempFile = [System.IO.Path]::GetTempFileName()
$tempFile = [System.IO.Path]::ChangeExtension($tempFile, ".sql")
Set-Content -Path $tempFile -Value $SqlCommand -Encoding ASCII
$arguments = "-S `"$connString`" @`"$tempFile`""
}
# Set Oracle environment
$env:ORACLE_HOME = $oraHome
$env:PATH = "$oraHome\bin;$env:PATH"
$env:NLS_LANG = "AMERICAN_AMERICA.AL32UTF8"
# Execute SQL*Plus
$processInfo = New-Object System.Diagnostics.ProcessStartInfo
$processInfo.FileName = $sqlplus
$processInfo.Arguments = "-S `"$connString`""
$processInfo.RedirectStandardInput = $true
$processInfo.RedirectStandardOutput = $true
$processInfo.RedirectStandardError = $true
$processInfo.UseShellExecute = $false
$processInfo.CreateNoWindow = $true
$process = New-Object System.Diagnostics.Process
$process.StartInfo = $processInfo
$process.Start() | Out-Null
# Send SQL
if ($SqlFile) {
$process.StandardInput.WriteLine("@`"$SqlFile`"")
}
else {
$process.StandardInput.WriteLine($SqlCommand)
}
$process.StandardInput.Close()
$output = $process.StandardOutput.ReadToEnd()
$errorOutput = $process.StandardError.ReadToEnd()
$process.WaitForExit()
if ($errorOutput) {
$output += "`n$errorOutput"
}
# Check for Oracle errors
if ($output -match "ORA-\d{5}:|SP2-\d{4}:") {
if (-not $Silent) {
Write-LogWarning "SQL*Plus returned errors:"
Write-Host $output -ForegroundColor Yellow
}
}
return $output
}
finally {
if ($tempFile -and (Test-Path -Path $tempFile)) {
Remove-Item -Path $tempFile -Force -ErrorAction SilentlyContinue
}
}
}
<#
.SYNOPSIS
Create Oracle directory object for Data Pump.
.DESCRIPTION
Creates a directory object in Oracle for Data Pump operations if it doesn't exist.
.PARAMETER OracleHome
Oracle Home directory.
.PARAMETER ServiceName
Database service name.
.PARAMETER Password
SYS or SYSTEM password.
.PARAMETER DirectoryName
Oracle directory object name (default: DMPDIR).
.PARAMETER DirectoryPath
File system path for the directory (default: C:\DMPDIR).
.EXAMPLE
New-OracleDirectory -ServiceName "XEPDB1" -Password "oracle" -DirectoryPath "D:\Dumps"
#>
function New-OracleDirectory {
[CmdletBinding()]
param(
[Parameter(Mandatory = $false)]
[string]$OracleHome,
[Parameter(Mandatory = $true)]
[string]$ServiceName,
[Parameter(Mandatory = $true)]
[string]$Password,
[Parameter(Mandatory = $false)]
[string]$DirectoryName = "DMPDIR",
[Parameter(Mandatory = $false)]
[string]$DirectoryPath = "C:\DMPDIR"
)
# Create physical directory if it doesn't exist
if (-not (Test-Path -Path $DirectoryPath)) {
New-Item -ItemType Directory -Path $DirectoryPath -Force | Out-Null
Write-Log "Created directory: $DirectoryPath"
}
$sql = @"
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
CREATE OR REPLACE DIRECTORY $DirectoryName AS '$DirectoryPath';
GRANT READ, WRITE ON DIRECTORY $DirectoryName TO PUBLIC;
COMMIT;
SELECT 'DIRECTORY_CREATED' FROM dual;
EXIT;
"@
$result = Invoke-SqlPlus -OracleHome $OracleHome -ServiceName $ServiceName `
-Username "SYS" -Password $Password -SqlCommand $sql -AsSysdba -Silent
if ($result -match "DIRECTORY_CREATED") {
Write-Log "Oracle directory $DirectoryName created pointing to $DirectoryPath"
return $true
}
else {
Write-LogWarning "Could not verify directory creation"
return $false
}
}
<#
.SYNOPSIS
Get the default datafile path based on Oracle installation.
.DESCRIPTION
Determines the appropriate datafile location based on Oracle Home and version.
.PARAMETER OracleHome
Oracle Home directory.
.PARAMETER ServiceName
Database service name.
.PARAMETER Password
SYSTEM password.
.OUTPUTS
String. The datafile directory path.
.EXAMPLE
$datafilePath = Get-DatafilePath -ServiceName "XEPDB1" -Password "oracle"
#>
function Get-DatafilePath {
[CmdletBinding()]
param(
[Parameter(Mandatory = $false)]
[string]$OracleHome,
[Parameter(Mandatory = $true)]
[string]$ServiceName,
[Parameter(Mandatory = $true)]
[string]$Password
)
$oraHome = Get-OracleHome -OracleHome $OracleHome
# Query Oracle for default datafile location
$sql = @"
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF LINESIZE 500
SELECT 'DATAFILE_PATH:' || SUBSTR(file_name, 1, INSTR(file_name, '\', -1))
FROM dba_data_files
WHERE tablespace_name = 'SYSTEM'
AND ROWNUM = 1;
EXIT;
"@
$result = Invoke-SqlPlus -OracleHome $oraHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $Password -SqlCommand $sql -Silent
foreach ($line in $result -split "`n") {
if ($line -match "^DATAFILE_PATH:(.+)$") {
$path = $Matches[1].Trim()
# Remove trailing backslash if present
return $path.TrimEnd('\')
}
}
# Fallback to common paths based on Oracle Home
$version = Get-OracleVersion -OracleHome $oraHome -ServiceName $ServiceName -Password $Password
if ($version.IsXE) {
if ($version.Version -match "^21") {
return "C:\app\oracle\oradata\XE\XEPDB1"
}
elseif ($version.Version -match "^18") {
return "C:\app\oracle\oradata\XE"
}
}
# Default fallback
return "C:\app\oracle\oradata"
}
<#
.SYNOPSIS
Execute Data Pump import.
.DESCRIPTION
Runs impdp with specified parameters.
.PARAMETER OracleHome
Oracle Home directory.
.PARAMETER ServiceName
Database service name.
.PARAMETER Username
Username for connection (default: SYSTEM).
.PARAMETER Password
Password for connection.
.PARAMETER DumpFile
Name of the dump file (in DMPDIR).
.PARAMETER LogFile
Name of the log file.
.PARAMETER Schemas
Schema(s) to import.
.PARAMETER RemapSchema
Remap schema mapping (e.g., "OLD_SCHEMA:NEW_SCHEMA").
.PARAMETER DirectoryName
Oracle directory object name (default: DMPDIR).
.PARAMETER TableExists
Table exists action: SKIP, APPEND, TRUNCATE, REPLACE (default: REPLACE).
.PARAMETER AdditionalParams
Additional impdp parameters.
.OUTPUTS
PSCustomObject with Success, LogContent, ErrorMessage properties.
.EXAMPLE
Invoke-DataPumpImport -ServiceName "XEPDB1" -Password "oracle" -DumpFile "CONTAFIN_ORACLE.dmp" -Schemas "CONTAFIN_ORACLE"
#>
function Invoke-DataPumpImport {
[CmdletBinding()]
param(
[Parameter(Mandatory = $false)]
[string]$OracleHome,
[Parameter(Mandatory = $true)]
[string]$ServiceName,
[Parameter(Mandatory = $false)]
[string]$Username = "SYSTEM",
[Parameter(Mandatory = $true)]
[string]$Password,
[Parameter(Mandatory = $true)]
[string]$DumpFile,
[Parameter(Mandatory = $false)]
[string]$LogFile,
[Parameter(Mandatory = $false)]
[string[]]$Schemas,
[Parameter(Mandatory = $false)]
[string]$RemapSchema,
[Parameter(Mandatory = $false)]
[string]$DirectoryName = "DMPDIR",
[Parameter(Mandatory = $false)]
[ValidateSet('SKIP', 'APPEND', 'TRUNCATE', 'REPLACE')]
[string]$TableExists = "REPLACE",
[Parameter(Mandatory = $false)]
[string]$AdditionalParams
)
$oraHome = Get-OracleHome -OracleHome $OracleHome
$impdp = Join-Path $oraHome "bin\impdp.exe"
if (-not (Test-Path -Path $impdp)) {
throw "impdp not found at: $impdp"
}
# Build impdp command
if (-not $LogFile) {
$LogFile = [System.IO.Path]::GetFileNameWithoutExtension($DumpFile) + "_import.log"
}
$connString = "$Username/`"$Password`"@$ServiceName"
$params = @(
"`"$connString`"",
"directory=$DirectoryName",
"dumpfile=$DumpFile",
"logfile=$LogFile",
"table_exists_action=$TableExists"
)
if ($Schemas) {
$params += "schemas=$($Schemas -join ',')"
}
if ($RemapSchema) {
$params += "remap_schema=$RemapSchema"
}
if ($AdditionalParams) {
$params += $AdditionalParams
}
$arguments = $params -join " "
Write-Log "Executing: impdp $($params -join ' ' -replace $Password, '****')"
# Set Oracle environment
$env:ORACLE_HOME = $oraHome
$env:PATH = "$oraHome\bin;$env:PATH"
$env:NLS_LANG = "AMERICAN_AMERICA.AL32UTF8"
# Execute impdp
$process = Start-Process -FilePath $impdp -ArgumentList $arguments -Wait -NoNewWindow -PassThru `
-RedirectStandardOutput "$env:TEMP\impdp_out.txt" -RedirectStandardError "$env:TEMP\impdp_err.txt"
$stdout = Get-Content -Path "$env:TEMP\impdp_out.txt" -Raw -ErrorAction SilentlyContinue
$stderr = Get-Content -Path "$env:TEMP\impdp_err.txt" -Raw -ErrorAction SilentlyContinue
$result = [PSCustomObject]@{
Success = $process.ExitCode -eq 0
ExitCode = $process.ExitCode
Output = $stdout
ErrorOutput = $stderr
LogFile = $LogFile
}
# Clean up temp files
Remove-Item -Path "$env:TEMP\impdp_out.txt" -Force -ErrorAction SilentlyContinue
Remove-Item -Path "$env:TEMP\impdp_err.txt" -Force -ErrorAction SilentlyContinue
return $result
}
<#
.SYNOPSIS
Check if a user/schema exists in the database.
.DESCRIPTION
Queries DBA_USERS to check if a user exists.
.PARAMETER OracleHome
Oracle Home directory.
.PARAMETER ServiceName
Database service name.
.PARAMETER Password
SYSTEM password.
.PARAMETER SchemaName
Name of the schema/user to check.
.OUTPUTS
Boolean. True if user exists.
.EXAMPLE
if (Test-OracleUser -ServiceName "XEPDB1" -Password "oracle" -SchemaName "CONTAFIN_ORACLE") {
Write-Host "User exists"
}
#>
function Test-OracleUser {
[CmdletBinding()]
param(
[Parameter(Mandatory = $false)]
[string]$OracleHome,
[Parameter(Mandatory = $true)]
[string]$ServiceName,
[Parameter(Mandatory = $true)]
[string]$Password,
[Parameter(Mandatory = $true)]
[string]$SchemaName
)
$sql = @"
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT 'USER_EXISTS' FROM dba_users WHERE username = UPPER('$SchemaName');
EXIT;
"@
$result = Invoke-SqlPlus -OracleHome $OracleHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $Password -SqlCommand $sql -Silent
return $result -match "USER_EXISTS"
}
<#
.SYNOPSIS
Get object count for a schema.
.DESCRIPTION
Counts objects in a schema grouped by type.
.PARAMETER OracleHome
Oracle Home directory.
.PARAMETER ServiceName
Database service name.
.PARAMETER Password
SYSTEM password.
.PARAMETER SchemaName
Name of the schema.
.OUTPUTS
Hashtable with object types and counts.
.EXAMPLE
$counts = Get-SchemaObjectCount -ServiceName "XEPDB1" -Password "oracle" -SchemaName "CONTAFIN_ORACLE"
#>
function Get-SchemaObjectCount {
[CmdletBinding()]
param(
[Parameter(Mandatory = $false)]
[string]$OracleHome,
[Parameter(Mandatory = $true)]
[string]$ServiceName,
[Parameter(Mandatory = $true)]
[string]$Password,
[Parameter(Mandatory = $true)]
[string]$SchemaName
)
$sql = @"
SET PAGESIZE 1000 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF LINESIZE 200
SELECT object_type || ':' || COUNT(*)
FROM dba_objects
WHERE owner = UPPER('$SchemaName')
GROUP BY object_type
ORDER BY object_type;
SELECT 'TOTAL:' || COUNT(*) FROM dba_objects WHERE owner = UPPER('$SchemaName');
SELECT 'INVALID:' || COUNT(*) FROM dba_objects WHERE owner = UPPER('$SchemaName') AND status = 'INVALID';
EXIT;
"@
$result = Invoke-SqlPlus -OracleHome $OracleHome -ServiceName $ServiceName `
-Username "SYSTEM" -Password $Password -SqlCommand $sql -Silent
$counts = @{}
foreach ($line in $result -split "`n") {
if ($line -match "^([A-Z_ ]+):(\d+)$") {
$counts[$Matches[1].Trim()] = [int]$Matches[2]
}
}
return $counts
}
# Note: Functions are available when dot-sourced (. .\oracle-functions.ps1)
# Do NOT use Export-ModuleMember - it only works inside .psm1 modules

View File

@@ -0,0 +1,99 @@
-- ============================================================================
-- PASSWORD PROFILE CONFIGURATION
-- ============================================================================
-- Configures DEFAULT profile for no password expiration
-- CRITICAL for ROA application compatibility
--
-- This script disables all password restrictions to prevent:
-- - Password expiration issues during long-running installations
-- - Account lockouts from failed login attempts
-- - Password reuse restrictions
--
-- WARNING: This reduces security. For production environments, consider
-- creating a custom profile with appropriate settings.
--
-- Usage:
-- @configure-profile.sql
--
-- Connect as: SYSDBA
-- ============================================================================
SET ECHO OFF
SET FEEDBACK ON
SET SERVEROUTPUT ON
WHENEVER SQLERROR CONTINUE
PROMPT
PROMPT ========================================
PROMPT Configuring Password Profile
PROMPT ========================================
PROMPT
-- Show current profile settings
PROMPT Current DEFAULT profile settings:
SELECT resource_name, limit
FROM dba_profiles
WHERE profile = 'DEFAULT'
AND resource_type = 'PASSWORD'
ORDER BY resource_name;
PROMPT
PROMPT Modifying DEFAULT profile for ROA compatibility...
PROMPT
-- Disable password expiration
ALTER PROFILE DEFAULT LIMIT
PASSWORD_LIFE_TIME UNLIMITED
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
PASSWORD_VERIFY_FUNCTION NULL
PASSWORD_LOCK_TIME UNLIMITED
PASSWORD_GRACE_TIME UNLIMITED
FAILED_LOGIN_ATTEMPTS UNLIMITED;
PROMPT
PROMPT ========================================
PROMPT Profile Configuration Complete
PROMPT ========================================
PROMPT
-- Verify new settings
PROMPT New DEFAULT profile settings:
SELECT resource_name, limit
FROM dba_profiles
WHERE profile = 'DEFAULT'
AND resource_type = 'PASSWORD'
ORDER BY resource_name;
PROMPT
PROMPT WARNING: Password restrictions have been disabled.
PROMPT For production environments, consider creating a custom
PROMPT profile with appropriate security settings.
PROMPT
-- Unlock any locked accounts (optional)
PROMPT
PROMPT Unlocking ROA-related accounts if locked...
DECLARE
v_sql VARCHAR2(200);
BEGIN
FOR rec IN (SELECT username FROM dba_users
WHERE account_status LIKE '%LOCKED%'
AND username IN ('CONTAFIN_ORACLE', 'SYSTEM')) LOOP
v_sql := 'ALTER USER ' || rec.username || ' ACCOUNT UNLOCK';
EXECUTE IMMEDIATE v_sql;
DBMS_OUTPUT.PUT_LINE('Unlocked user: ' || rec.username);
END LOOP;
END;
/
-- Reset expired passwords (optional - requires manual password)
PROMPT
PROMPT If any accounts show EXPIRED status, reset their passwords:
SELECT username, account_status
FROM dba_users
WHERE username IN ('CONTAFIN_ORACLE', 'SYSTEM', 'SYS')
OR username LIKE 'FIRMA%'
OR username LIKE 'TEST%';
PROMPT

View File

@@ -0,0 +1,88 @@
-- ============================================================================
-- ROA TABLESPACE CREATION
-- ============================================================================
-- Creates ROA tablespace with 1GB initial size, autoextend enabled
-- Works for both non-CDB (Oracle SE) and PDB (Oracle XE in XEPDB1)
--
-- Usage:
-- @create-tablespace.sql "D:\Oracle\oradata\ORCL"
-- @create-tablespace.sql "D:\Oracle\oradata\XE\XEPDB1"
--
-- Parameters:
-- &1 - Datafile directory path (e.g., D:\Oracle\oradata\ORCL)
--
-- Connect as: SYSDBA
-- ============================================================================
SET ECHO OFF
SET FEEDBACK ON
SET SERVEROUTPUT ON
WHENEVER SQLERROR CONTINUE
PROMPT
PROMPT ========================================
PROMPT Creating ROA Tablespace
PROMPT ========================================
PROMPT
-- Define datafile path
DEFINE datafile_dir = "&1"
PROMPT Datafile directory: &datafile_dir
-- Check if tablespace already exists
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM dba_tablespaces
WHERE tablespace_name = 'ROA';
IF v_count > 0 THEN
DBMS_OUTPUT.PUT_LINE('WARNING: Tablespace ROA already exists. Skipping creation.');
ELSE
DBMS_OUTPUT.PUT_LINE('Creating tablespace ROA...');
END IF;
END;
/
-- Create tablespace if it doesn't exist
DECLARE
v_count NUMBER;
v_sql VARCHAR2(1000);
BEGIN
SELECT COUNT(*) INTO v_count
FROM dba_tablespaces
WHERE tablespace_name = 'ROA';
IF v_count = 0 THEN
v_sql := 'CREATE SMALLFILE TABLESPACE "ROA" ' ||
'DATAFILE ''&datafile_dir\ROA.DBF'' ' ||
'SIZE 1000M ' ||
'AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED ' ||
'LOGGING ' ||
'EXTENT MANAGEMENT LOCAL ' ||
'SEGMENT SPACE MANAGEMENT AUTO';
EXECUTE IMMEDIATE v_sql;
DBMS_OUTPUT.PUT_LINE('Tablespace ROA created successfully.');
END IF;
END;
/
PROMPT
PROMPT Verifying tablespace creation:
SELECT tablespace_name, status, contents, extent_management, segment_space_management
FROM dba_tablespaces
WHERE tablespace_name = 'ROA';
PROMPT
PROMPT Datafile information:
SELECT file_name, bytes/1024/1024 AS size_mb, autoextensible, maxbytes/1024/1024 AS max_mb
FROM dba_data_files
WHERE tablespace_name = 'ROA';
PROMPT
PROMPT ========================================
PROMPT ROA Tablespace Creation Complete
PROMPT ========================================
PROMPT

View File

@@ -0,0 +1,131 @@
-- ============================================================================
-- COMPANY SCHEMA USER CREATION (Template)
-- ============================================================================
-- Creates a company schema user for ROA application
-- Each company in ROA has its own schema with identical structure
--
-- Usage:
-- @create-user-company.sql "SCHEMA_NAME" "Password123"
--
-- Parameters:
-- &1 - Schema/User name (e.g., FIRMA1, TESTFIRMA, ROMCONSTRUCT)
-- &2 - Password for the schema user
--
-- Privileges granted:
-- - CONNECT, RESOURCE roles
-- - CREATE SESSION, TABLE, VIEW, SEQUENCE, PROCEDURE, TRIGGER, TYPE, SYNONYM
-- - CREATE MATERIALIZED VIEW, DATABASE LINK, JOB
-- - DEBUG CONNECT SESSION
-- - SELECT ANY TABLE (for cross-schema queries)
-- - UNLIMITED TABLESPACE
--
-- Connect as: SYSDBA or SYSTEM
-- ============================================================================
SET ECHO OFF
SET FEEDBACK ON
SET SERVEROUTPUT ON
WHENEVER SQLERROR CONTINUE
PROMPT
PROMPT ========================================
PROMPT Creating Company Schema User
PROMPT ========================================
PROMPT
-- Define parameters
DEFINE schema_name = "&1"
DEFINE schema_password = "&2"
PROMPT Schema name: &schema_name
-- Check if user already exists
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM dba_users
WHERE username = UPPER('&schema_name');
IF v_count > 0 THEN
DBMS_OUTPUT.PUT_LINE('WARNING: User &schema_name already exists.');
DBMS_OUTPUT.PUT_LINE('Use DROP USER &schema_name CASCADE to remove if needed.');
ELSE
DBMS_OUTPUT.PUT_LINE('User &schema_name does not exist. Proceeding with creation.');
END IF;
END;
/
-- Create user
PROMPT Creating user &schema_name...
CREATE USER &schema_name
IDENTIFIED BY "&schema_password"
DEFAULT TABLESPACE ROA
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED ON ROA;
-- Grant roles
PROMPT Granting roles...
GRANT CONNECT TO &schema_name;
GRANT RESOURCE TO &schema_name;
-- Grant session and object creation privileges
PROMPT Granting system privileges...
GRANT CREATE SESSION TO &schema_name;
GRANT CREATE TABLE TO &schema_name;
GRANT CREATE VIEW TO &schema_name;
GRANT CREATE SEQUENCE TO &schema_name;
GRANT CREATE PROCEDURE TO &schema_name;
GRANT CREATE TRIGGER TO &schema_name;
GRANT CREATE TYPE TO &schema_name;
GRANT CREATE SYNONYM TO &schema_name;
GRANT CREATE MATERIALIZED VIEW TO &schema_name;
GRANT CREATE DATABASE LINK TO &schema_name;
GRANT CREATE JOB TO &schema_name;
-- Grant debug capability
GRANT DEBUG CONNECT SESSION TO &schema_name;
-- Grant select any table for cross-schema reporting
GRANT SELECT ANY TABLE TO &schema_name;
-- Grant unlimited tablespace
GRANT UNLIMITED TABLESPACE TO &schema_name;
PROMPT
PROMPT ========================================
PROMPT Verifying User Creation
PROMPT ========================================
PROMPT
-- Verify user creation
SELECT username, default_tablespace, temporary_tablespace, account_status
FROM dba_users
WHERE username = UPPER('&schema_name');
-- Verify roles
PROMPT
PROMPT Granted roles:
SELECT granted_role
FROM dba_role_privs
WHERE grantee = UPPER('&schema_name');
-- Verify tablespace quota
PROMPT
PROMPT Tablespace quotas:
SELECT tablespace_name,
CASE WHEN max_bytes = -1 THEN 'UNLIMITED'
ELSE TO_CHAR(max_bytes/1024/1024) || ' MB'
END AS quota
FROM dba_ts_quotas
WHERE username = UPPER('&schema_name');
PROMPT
PROMPT ========================================
PROMPT Company Schema &schema_name Created
PROMPT ========================================
PROMPT
PROMPT Next steps:
PROMPT 1. Import schema data from FIRMANOUA.dmp or existing backup
PROMPT 2. Run schema update scripts via PACK_UPDATE
PROMPT

View File

@@ -0,0 +1,131 @@
-- ============================================================================
-- CONTAFIN_ORACLE USER CREATION
-- ============================================================================
-- Creates CONTAFIN_ORACLE user with DBA-like privileges
-- This is the main administrative user for the ROA application
--
-- Usage:
-- @create-user-contafin.sql "YourSecurePassword"
--
-- Parameters:
-- &1 - Password for CONTAFIN_ORACLE user
--
-- Privileges granted:
-- - CONNECT, RESOURCE roles
-- - CREATE ANY CONTEXT, DROP ANY CONTEXT
-- - EXECUTE ANY PROCEDURE
-- - SELECT ANY TABLE/DICTIONARY/SEQUENCE
-- - INSERT/UPDATE/DELETE ANY TABLE
-- - UNLIMITED TABLESPACE
-- - CREATE/DROP PUBLIC SYNONYM
-- - CREATE VIEW, CREATE SESSION
--
-- Connect as: SYSDBA or SYSTEM
-- ============================================================================
SET ECHO OFF
SET FEEDBACK ON
SET SERVEROUTPUT ON
WHENEVER SQLERROR CONTINUE
PROMPT
PROMPT ========================================
PROMPT Creating CONTAFIN_ORACLE User
PROMPT ========================================
PROMPT
-- Define password
DEFINE co_password = "&1"
-- Drop user if exists (optional, comment out if you want to preserve data)
PROMPT Checking for existing CONTAFIN_ORACLE user...
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM dba_users
WHERE username = 'CONTAFIN_ORACLE';
IF v_count > 0 THEN
DBMS_OUTPUT.PUT_LINE('WARNING: User CONTAFIN_ORACLE already exists.');
DBMS_OUTPUT.PUT_LINE('Use DROP USER CONTAFIN_ORACLE CASCADE to remove if needed.');
ELSE
DBMS_OUTPUT.PUT_LINE('User CONTAFIN_ORACLE does not exist. Proceeding with creation.');
END IF;
END;
/
-- Create user
PROMPT Creating user CONTAFIN_ORACLE...
CREATE USER CONTAFIN_ORACLE
IDENTIFIED BY "&co_password"
DEFAULT TABLESPACE ROA
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT;
-- Grant roles
PROMPT Granting roles...
GRANT CONNECT TO CONTAFIN_ORACLE;
GRANT RESOURCE TO CONTAFIN_ORACLE;
-- Grant system privileges
PROMPT Granting system privileges...
GRANT CREATE ANY CONTEXT TO CONTAFIN_ORACLE;
GRANT DROP ANY CONTEXT TO CONTAFIN_ORACLE;
GRANT CREATE SESSION TO CONTAFIN_ORACLE;
GRANT CREATE VIEW TO CONTAFIN_ORACLE;
GRANT CREATE TABLE TO CONTAFIN_ORACLE;
GRANT CREATE SEQUENCE TO CONTAFIN_ORACLE;
GRANT CREATE PROCEDURE TO CONTAFIN_ORACLE;
GRANT CREATE TRIGGER TO CONTAFIN_ORACLE;
GRANT CREATE TYPE TO CONTAFIN_ORACLE;
GRANT CREATE SYNONYM TO CONTAFIN_ORACLE;
GRANT CREATE MATERIALIZED VIEW TO CONTAFIN_ORACLE;
GRANT CREATE DATABASE LINK TO CONTAFIN_ORACLE;
GRANT CREATE JOB TO CONTAFIN_ORACLE;
-- Grant ANY privileges for application management
GRANT EXECUTE ANY PROCEDURE 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 INSERT ANY TABLE TO CONTAFIN_ORACLE;
GRANT UPDATE ANY TABLE TO CONTAFIN_ORACLE;
GRANT DELETE ANY TABLE TO CONTAFIN_ORACLE;
-- Grant tablespace and synonym privileges
GRANT UNLIMITED TABLESPACE TO CONTAFIN_ORACLE;
GRANT CREATE PUBLIC SYNONYM TO CONTAFIN_ORACLE;
GRANT DROP PUBLIC SYNONYM TO CONTAFIN_ORACLE;
PROMPT
PROMPT ========================================
PROMPT Verifying User Creation
PROMPT ========================================
PROMPT
-- Verify user creation
SELECT username, default_tablespace, temporary_tablespace, account_status, profile
FROM dba_users
WHERE username = 'CONTAFIN_ORACLE';
-- Verify roles
PROMPT
PROMPT Granted roles:
SELECT granted_role, admin_option, default_role
FROM dba_role_privs
WHERE grantee = 'CONTAFIN_ORACLE';
-- Verify system privileges
PROMPT
PROMPT Granted system privileges:
SELECT privilege, admin_option
FROM dba_sys_privs
WHERE grantee = 'CONTAFIN_ORACLE'
ORDER BY privilege;
PROMPT
PROMPT ========================================
PROMPT CONTAFIN_ORACLE User Creation Complete
PROMPT ========================================
PROMPT

View File

@@ -0,0 +1,393 @@
-- ============================================================================
-- PUBLIC GRANTS FOR ROA APPLICATION
-- ============================================================================
-- Grants necessary permissions on CONTAFIN_ORACLE objects to PUBLIC
-- and configures network ACLs for CONTAFIN_ORACLE
--
-- Usage:
-- @grants-public.sql
--
-- Connect as: SYSTEM or SYS as SYSDBA
-- Must run AFTER:
-- 1. CONTAFIN_ORACLE schema objects are imported
-- 2. synonyms-public.sql has been executed
-- ============================================================================
SET ECHO OFF
SET FEEDBACK ON
SET SERVEROUTPUT ON
WHENEVER SQLERROR CONTINUE
PROMPT
PROMPT ========================================
PROMPT Granting Permissions to PUBLIC
PROMPT ========================================
PROMPT
-- ============================================================================
-- SECTION 1: GRANTS ON CORE USER/PROGRAM TABLES
-- ============================================================================
PROMPT [1/9] Granting SELECT/REFERENCES on core tables...
-- DEF_GRUP
GRANT SELECT ON SYN_DEF_GRUP TO PUBLIC;
GRANT REFERENCES ON SYN_DEF_GRUP TO PUBLIC;
-- DEF_PROGRAME
GRANT SELECT ON SYN_DEF_PROGRAME TO PUBLIC;
GRANT REFERENCES ON SYN_DEF_PROGRAME TO PUBLIC;
-- VDEF_PROGRAME
GRANT SELECT ON SYN_VDEF_PROGRAME TO PUBLIC;
GRANT REFERENCES ON SYN_VDEF_PROGRAME TO PUBLIC;
-- LUNILEAN
GRANT SELECT ON SYN_LUNILEAN TO PUBLIC;
GRANT REFERENCES ON SYN_LUNILEAN TO PUBLIC;
-- NOM_FIRME
GRANT SELECT ON SYN_NOM_FIRME TO PUBLIC;
GRANT REFERENCES ON SYN_NOM_FIRME TO PUBLIC;
-- NOM_PROGRAME
GRANT SELECT ON SYN_NOM_PROGRAME TO PUBLIC;
GRANT REFERENCES ON SYN_NOM_PROGRAME TO PUBLIC;
-- UTILIZATORI
GRANT SELECT ON SYN_UTILIZATORI TO PUBLIC;
GRANT REFERENCES ON SYN_UTILIZATORI TO PUBLIC;
-- VDEF_UTIL_PROGRAME
GRANT SELECT ON SYN_VDEF_UTIL_PROGRAME TO PUBLIC;
-- VDEF_UTIL_FIRME
GRANT SELECT ON SYN_VDEF_UTIL_FIRME TO PUBLIC;
GRANT REFERENCES ON SYN_VDEF_UTIL_FIRME TO PUBLIC;
-- VDEF_UTIL_OBIECTE
GRANT SELECT ON SYN_VDEF_UTIL_OBIECTE TO PUBLIC;
GRANT REFERENCES ON SYN_VDEF_UTIL_OBIECTE TO PUBLIC;
-- VUTILIZATORI
GRANT SELECT ON SYN_VUTILIZATORI TO PUBLIC;
GRANT REFERENCES ON SYN_VUTILIZATORI TO PUBLIC;
-- VDEF_UTIL_GRUP
GRANT SELECT ON SYN_VDEF_UTIL_GRUP TO PUBLIC;
GRANT REFERENCES ON SYN_VDEF_UTIL_GRUP TO PUBLIC;
-- DEF_GRUP_DREPT
GRANT SELECT ON SYN_DEF_GRUP_DREPT TO PUBLIC;
GRANT REFERENCES ON SYN_DEF_GRUP_DREPT TO PUBLIC;
-- OPTIUNI_PROGRAME
GRANT SELECT ON SYN_OPTIUNI_PROGRAME TO PUBLIC;
-- HELPCONT
GRANT SELECT ON SYN_HELPCONT TO PUBLIC;
-- V_NOM_FIRME
GRANT SELECT ON SYN_V_NOM_FIRME TO PUBLIC;
-- ============================================================================
-- SECTION 2: GRANTS ON UTILITY TYPES AND FUNCTIONS
-- ============================================================================
PROMPT [2/9] Granting EXECUTE on utility types/functions...
GRANT EXECUTE ON STRINGAGG TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.STRINGAGGTYPE TO PUBLIC;
GRANT EXECUTE ON CHAR_ROW TO PUBLIC;
GRANT EXECUTE ON CHAR_TAB TO PUBLIC;
GRANT EXECUTE ON NUM_ROW TO PUBLIC;
GRANT EXECUTE ON NUM_TAB TO PUBLIC;
GRANT EXECUTE ON UW_SEL_ROW TO PUBLIC;
GRANT EXECUTE ON UW_SEL_TAB TO PUBLIC;
GRANT EXECUTE ON VALOARETAG TO PUBLIC;
GRANT EXECUTE ON GETWORDCOUNT TO PUBLIC;
GRANT EXECUTE ON GETWORDNUM TO PUBLIC;
GRANT EXECUTE ON CHARC2COLLECTION TO PUBLIC;
GRANT EXECUTE ON CHARN2COLLECTION TO PUBLIC;
-- ============================================================================
-- SECTION 3: GRANTS ON NOMENCLATURE TABLES
-- ============================================================================
PROMPT [3/9] Granting SELECT/REFERENCES on nomenclature tables...
-- Legal forms
GRANT SELECT ON SYN_NOM_FORME_JURIDICE TO PUBLIC;
GRANT REFERENCES ON SYN_NOM_FORME_JURIDICE TO PUBLIC;
GRANT SELECT ON SYN_NOM_FORME_ORGANIZARE TO PUBLIC;
GRANT REFERENCES ON SYN_NOM_FORME_ORGANIZARE TO PUBLIC;
GRANT SELECT ON SYN_NOM_TIP_SOCIETATE TO PUBLIC;
GRANT REFERENCES ON SYN_NOM_TIP_SOCIETATE TO PUBLIC;
GRANT SELECT ON SYN_NOM_FORME_PROPRIETATE TO PUBLIC;
GRANT REFERENCES ON SYN_NOM_FORME_PROPRIETATE TO PUBLIC;
-- Geography
GRANT SELECT ON SYN_NOM_CETATENII TO PUBLIC;
GRANT REFERENCES ON SYN_NOM_CETATENII TO PUBLIC;
GRANT SELECT ON SYN_NOM_TARI TO PUBLIC;
GRANT REFERENCES ON SYN_NOM_TARI TO PUBLIC;
GRANT SELECT ON SYN_NOM_JUDETE TO PUBLIC;
GRANT REFERENCES ON SYN_NOM_JUDETE TO PUBLIC;
GRANT SELECT ON SYN_NOM_LOCALITATI TO PUBLIC;
GRANT REFERENCES ON SYN_NOM_LOCALITATI TO PUBLIC;
GRANT SELECT ON SYN_VNOM_JUDETE TO PUBLIC;
GRANT SELECT ON SYN_VNOM_LOCALITATI TO PUBLIC;
GRANT SELECT ON SYN_VNOM_TARI TO PUBLIC;
GRANT SELECT ON SYN_NOM_CODURI_CAEN TO PUBLIC;
GRANT REFERENCES ON SYN_NOM_CODURI_CAEN TO PUBLIC;
GRANT SELECT ON SYN_NOM_TIPAPATRID TO PUBLIC;
GRANT REFERENCES ON SYN_NOM_TIPAPATRID TO PUBLIC;
-- ============================================================================
-- SECTION 4: GRANTS ON CURRENCY/EXCHANGE TABLES
-- ============================================================================
PROMPT [4/9] Granting SELECT/REFERENCES on currency tables...
GRANT SELECT ON SYN_VNOM_VALUTE_ISO TO PUBLIC;
GRANT SELECT ON SYN_NOM_VALUTE_ISO TO PUBLIC;
GRANT REFERENCES ON SYN_NOM_VALUTE_ISO TO PUBLIC;
GRANT SELECT ON SYN_CURS_COTATII TO PUBLIC;
GRANT REFERENCES ON SYN_CURS_COTATII TO PUBLIC;
GRANT SELECT ON SYN_CURS_ACTUALIZARI TO PUBLIC;
GRANT REFERENCES ON SYN_CURS_ACTUALIZARI TO PUBLIC;
GRANT SELECT, REFERENCES ON SYN_VNOM_UM_ISO TO PUBLIC;
GRANT SELECT, REFERENCES ON CONTAFIN_ORACLE.NOM_UM_ISO TO PUBLIC;
-- ============================================================================
-- SECTION 5: GRANTS ON SALARY MODULE TABLES AND TYPES
-- ============================================================================
PROMPT [5/9] Granting permissions on salary module objects...
-- Nomenclature tables
GRANT SELECT ON SYN_SAL_NOM_TEMEI TO PUBLIC;
GRANT REFERENCES ON SYN_SAL_NOM_TEMEI TO PUBLIC;
GRANT SELECT ON SYN_SAL_NOM_TIPAUTORIZATIE TO PUBLIC;
GRANT REFERENCES ON SYN_SAL_NOM_TIPAUTORIZATIE TO PUBLIC;
GRANT SELECT ON SYN_SAL_NOM_TIP_SPOR TO PUBLIC;
GRANT REFERENCES ON SYN_SAL_NOM_TIP_SPOR TO PUBLIC;
GRANT SELECT ON SYN_SAL_NOM_TIP_NORME TO PUBLIC;
GRANT REFERENCES ON SYN_SAL_NOM_TIP_NORME TO PUBLIC;
GRANT SELECT ON SYN_SAL_NOM_STARI_CTR TO PUBLIC;
GRANT REFERENCES ON SYN_SAL_NOM_STARI_CTR TO PUBLIC;
GRANT SELECT ON SYN_SAL_NOM_DURATA_MUNCA TO PUBLIC;
GRANT REFERENCES ON SYN_SAL_NOM_DURATA_MUNCA TO PUBLIC;
GRANT SELECT ON SYN_SAL_NOM_REPARTIZARE_MUNCA TO PUBLIC;
GRANT REFERENCES ON SYN_SAL_NOM_REPARTIZARE_MUNCA TO PUBLIC;
GRANT SELECT ON SYN_SAL_NOM_INTERVALE_MUNCA TO PUBLIC;
GRANT REFERENCES ON SYN_SAL_NOM_INTERVALE_MUNCA TO PUBLIC;
GRANT SELECT ON SYN_SAL_COR TO PUBLIC;
GRANT REFERENCES ON SYN_SAL_COR TO PUBLIC;
GRANT SELECT ON SYN_SAL_ACTUALIZARE_COR TO PUBLIC;
GRANT REFERENCES ON SYN_SAL_ACTUALIZARE_COR TO PUBLIC;
-- Salary types
GRANT EXECUTE ON CONTAFIN_ORACLE.SAL_CONTRACT_M TO PUBLIC;
GRANT EXECUTE ON CONTAFIN_ORACLE.CONTRACT_M TO PUBLIC;
GRANT EXECUTE ON SAL_CONTRACT_M TO PUBLIC;
GRANT EXECUTE ON CONTRACT_M TO PUBLIC;
GRANT EXECUTE ON SAL_RED TO PUBLIC;
GRANT EXECUTE ON SAL_CAMPURI_RED TO PUBLIC;
GRANT EXECUTE ON TABSTERS TO PUBLIC;
GRANT EXECUTE ON SAL_TABELESTERS TO PUBLIC;
-- ============================================================================
-- SECTION 6: GRANTS ON ATTACHMENT TABLES
-- ============================================================================
PROMPT [6/9] Granting permissions on attachment tables...
GRANT SELECT ON SYN_ATAS_ATASAMENTE TO PUBLIC;
GRANT REFERENCES ON SYN_ATAS_ATASAMENTE TO PUBLIC;
GRANT SELECT ON SYN_ATAS_REFERINTE TO PUBLIC;
GRANT REFERENCES ON SYN_ATAS_REFERINTE TO PUBLIC;
-- ============================================================================
-- SECTION 7: GRANTS ON PACKAGES AND ADDITIONAL TYPES
-- ============================================================================
PROMPT [7/9] Granting EXECUTE on packages and types...
-- Packages
GRANT EXECUTE ON SYN_PACK_DREPTURI TO PUBLIC;
GRANT EXECUTE ON PACK_UPDATE TO PUBLIC;
GRANT EXECUTE ON PACK_UTILS TO PUBLIC;
GRANT EXECUTE ON PACK_UTILS_FILE TO PUBLIC;
GRANT EXECUTE ON SYN_PACK_DEF_CO TO PUBLIC;
GRANT EXECUTE ON PACK_ROARTVAI TO PUBLIC;
-- Additional types
GRANT EXECUTE ON FF_SUME TO PUBLIC;
GRANT EXECUTE ON FF_PERSINTRET TO PUBLIC;
GRANT EXECUTE ON VANZARI_DETALII_TAB TO PUBLIC;
GRANT EXECUTE ON PIVOT_TABLE TO PUBLIC;
GRANT EXECUTE ON PIVOT_ROW TO PUBLIC;
GRANT EXECUTE ON TABINCHIDERETVA TO PUBLIC;
GRANT EXECUTE ON TABELAVALORITAGURI TO PUBLIC;
GRANT EXECUTE ON RANDINCHIDERETVA TO PUBLIC;
-- SERVER_INFO table
GRANT SELECT, UPDATE ON SERVER_INFO TO PUBLIC;
-- RTVAI module
GRANT SELECT ON RTVAI_AGENTI TO PUBLIC;
GRANT SELECT ON RTVAI_ISTORIC TO PUBLIC;
-- License view synonym
GRANT SELECT ON CONTAFIN_ORACLE.VDEF_PROGRAME_SERII TO CONTAFIN_ORACLE;
-- ============================================================================
-- SECTION 8: DIRECTORY AND SYSTEM GRANTS
-- ============================================================================
PROMPT [8/9] Granting directory and system permissions...
-- Create DMPDIR directory if it doesn't exist (adjust path as needed)
BEGIN
EXECUTE IMMEDIATE 'CREATE OR REPLACE DIRECTORY DMPDIR AS ''D:\Oracle\admin\ORCL\dpdump''';
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Note: DMPDIR directory may already exist or path needs adjustment');
END;
/
-- Grant directory access
GRANT ALL ON DIRECTORY DMPDIR TO PUBLIC;
-- Grant UTL packages to PUBLIC
GRANT EXECUTE ON UTL_FILE TO PUBLIC;
GRANT EXECUTE ON DBMS_LOCK TO PUBLIC;
-- Grant UTL packages to CONTAFIN_ORACLE specifically
GRANT EXECUTE ON UTL_INADDR TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_TCP TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_SMTP TO CONTAFIN_ORACLE;
GRANT EXECUTE ON UTL_HTTP TO CONTAFIN_ORACLE;
-- UTL_MAIL may not exist in all Oracle editions
BEGIN
EXECUTE IMMEDIATE 'GRANT EXECUTE ON UTL_MAIL TO CONTAFIN_ORACLE';
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Note: UTL_MAIL not available (requires configuration)');
END;
/
-- ============================================================================
-- SECTION 9: NETWORK ACL CONFIGURATION
-- ============================================================================
PROMPT [9/9] Configuring Network ACL for CONTAFIN_ORACLE...
-- Drop existing ACL (if exists)
BEGIN
DBMS_NETWORK_ACL_ADMIN.DROP_ACL(acl => 'roaupdate.xml');
DBMS_OUTPUT.PUT_LINE('Dropped existing roaupdate.xml ACL');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Note: roaupdate.xml ACL did not exist (this is OK)');
END;
/
-- Create new ACL with permissions for CONTAFIN_ORACLE
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(
acl => 'roaupdate.xml',
description => 'Permissions for ROA application network access',
principal => 'CONTAFIN_ORACLE',
is_grant => TRUE,
privilege => 'connect'
);
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
acl => 'roaupdate.xml',
principal => 'CONTAFIN_ORACLE',
is_grant => TRUE,
privilege => 'resolve'
);
-- Allow all hosts (use specific hosts in production)
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
acl => 'roaupdate.xml',
host => '*'
);
DBMS_OUTPUT.PUT_LINE('Network ACL created successfully for CONTAFIN_ORACLE');
END;
/
COMMIT;
-- ============================================================================
-- VERIFICATION
-- ============================================================================
PROMPT
PROMPT ========================================
PROMPT Grants Complete - Verification
PROMPT ========================================
PROMPT
PROMPT Grants to PUBLIC on CONTAFIN_ORACLE objects:
SELECT grantee, table_name, privilege
FROM dba_tab_privs
WHERE grantee = 'PUBLIC'
AND grantor = 'SYS'
AND table_name LIKE 'SYN_%'
ORDER BY table_name, privilege;
PROMPT
PROMPT Network ACL assignments for CONTAFIN_ORACLE:
SELECT host, lower_port, upper_port, acl
FROM dba_network_acls
WHERE acl LIKE '%roaupdate%';
PROMPT
PROMPT ACL privileges:
SELECT acl, principal, privilege, is_grant
FROM dba_network_acl_privileges
WHERE acl LIKE '%roaupdate%';
PROMPT
PROMPT Directory permissions:
SELECT grantee, table_name, privilege
FROM dba_tab_privs
WHERE table_name = 'DMPDIR';
PROMPT
PROMPT ========================================
PROMPT Grant Configuration Complete
PROMPT ========================================
PROMPT

View File

@@ -0,0 +1,313 @@
-- ============================================================================
-- PUBLIC SYNONYMS FOR ROA APPLICATION
-- ============================================================================
-- Creates all public synonyms required by the ROA application
-- These synonyms provide cross-schema access to CONTAFIN_ORACLE objects
--
-- Usage:
-- @synonyms-public.sql
--
-- Connect as: SYSTEM or user with CREATE PUBLIC SYNONYM privilege
-- Must run AFTER CONTAFIN_ORACLE schema objects are imported
-- ============================================================================
SET ECHO OFF
SET FEEDBACK ON
SET SERVEROUTPUT ON
WHENEVER SQLERROR CONTINUE
PROMPT
PROMPT ========================================
PROMPT Creating Public Synonyms
PROMPT ========================================
PROMPT
-- ============================================================================
-- SECTION 1: CLEANUP - Drop existing synonyms (optional, for idempotency)
-- ============================================================================
PROMPT Cleaning up existing synonyms...
-- Core user/program synonyms
DROP PUBLIC SYNONYM SYN_LUNILEAN;
DROP PUBLIC SYNONYM SYN_PACK_DREPTURI;
DROP PUBLIC SYNONYM SYN_VDEF_UTIL_GRUP;
DROP PUBLIC SYNONYM SYN_DEF_GRUP_DREPT;
DROP PUBLIC SYNONYM SYN_UTILIZATORI;
DROP PUBLIC SYNONYM SYN_VDEF_UTIL_PROGRAME;
DROP PUBLIC SYNONYM SYN_VDEF_UTIL_OBIECTE;
DROP PUBLIC SYNONYM SYN_VUTILIZATORI;
DROP PUBLIC SYNONYM SYN_NOM_PROGRAME;
DROP PUBLIC SYNONYM SYN_DEF_PROGRAME;
DROP PUBLIC SYNONYM SYN_VDEF_PROGRAME;
DROP PUBLIC SYNONYM SYN_DEF_GRUP;
DROP PUBLIC SYNONYM SYN_NOM_FIRME;
DROP PUBLIC SYNONYM SYN_V_NOM_FIRME;
DROP PUBLIC SYNONYM SYN_VDEF_UTIL_FIRME;
DROP PUBLIC SYNONYM SYN_HELPCONT;
DROP PUBLIC SYNONYM SYN_OPTIUNI_PROGRAME;
-- Utility types/functions
DROP PUBLIC SYNONYM STRINGAGG;
DROP PUBLIC SYNONYM CHAR_ROW;
DROP PUBLIC SYNONYM CHAR_TAB;
DROP PUBLIC SYNONYM NUM_ROW;
DROP PUBLIC SYNONYM NUM_TAB;
DROP PUBLIC SYNONYM UW_SEL_ROW;
DROP PUBLIC SYNONYM UW_SEL_TAB;
DROP PUBLIC SYNONYM GETWORDCOUNT;
DROP PUBLIC SYNONYM GETWORDNUM;
DROP PUBLIC SYNONYM CHARC2COLLECTION;
DROP PUBLIC SYNONYM CHARN2COLLECTION;
DROP PUBLIC SYNONYM VALOARETAG;
-- Nomenclature synonyms
DROP PUBLIC SYNONYM SYN_NOM_FORME_JURIDICE;
DROP PUBLIC SYNONYM SYN_NOM_FORME_ORGANIZARE;
DROP PUBLIC SYNONYM SYN_NOM_TIP_SOCIETATE;
DROP PUBLIC SYNONYM SYN_NOM_FORME_PROPRIETATE;
DROP PUBLIC SYNONYM SYN_NOM_CETATENII;
DROP PUBLIC SYNONYM SYN_NOM_TARI;
DROP PUBLIC SYNONYM SYN_NOM_JUDETE;
DROP PUBLIC SYNONYM SYN_NOM_LOCALITATI;
DROP PUBLIC SYNONYM SYN_VNOM_JUDETE;
DROP PUBLIC SYNONYM SYN_VNOM_LOCALITATI;
DROP PUBLIC SYNONYM SYN_VNOM_TARI;
DROP PUBLIC SYNONYM SYN_NOM_CODURI_CAEN;
DROP PUBLIC SYNONYM SYN_NOM_TIPAPATRID;
-- Currency/exchange synonyms
DROP PUBLIC SYNONYM SYN_VNOM_VALUTE_ISO;
DROP PUBLIC SYNONYM SYN_NOM_VALUTE_ISO;
DROP PUBLIC SYNONYM SYN_CURS_COTATII;
DROP PUBLIC SYNONYM SYN_CURS_ACTUALIZARI;
-- Salary module synonyms
DROP PUBLIC SYNONYM SYN_SAL_NOM_TEMEI;
DROP PUBLIC SYNONYM SYN_SAL_NOM_TIPAUTORIZATIE;
DROP PUBLIC SYNONYM SYN_SAL_NOM_TIP_SPOR;
DROP PUBLIC SYNONYM SYN_SAL_NOM_TIP_NORME;
DROP PUBLIC SYNONYM SYN_SAL_NOM_STARI_CTR;
DROP PUBLIC SYNONYM SYN_SAL_NOM_DURATA_MUNCA;
DROP PUBLIC SYNONYM SYN_SAL_NOM_REPARTIZARE_MUNCA;
DROP PUBLIC SYNONYM SYN_SAL_NOM_INTERVALE_MUNCA;
DROP PUBLIC SYNONYM SYN_SAL_COR;
DROP PUBLIC SYNONYM SYN_SAL_ACTUALIZARE_COR;
DROP PUBLIC SYNONYM SAL_CONTRACT_M;
DROP PUBLIC SYNONYM CONTRACT_M;
DROP PUBLIC SYNONYM SAL_RED;
DROP PUBLIC SYNONYM SAL_CAMPURI_RED;
DROP PUBLIC SYNONYM TABSTERS;
DROP PUBLIC SYNONYM SAL_TABELESTERS;
-- Attachment synonyms
DROP PUBLIC SYNONYM SYN_ATAS_ATASAMENTE;
DROP PUBLIC SYNONYM SYN_ATAS_REFERINTE;
-- Utility packages
DROP PUBLIC SYNONYM PACK_UPDATE;
DROP PUBLIC SYNONYM PACK_UTILS;
DROP PUBLIC SYNONYM PACK_UTILS_FILE;
DROP PUBLIC SYNONYM SYN_PACK_DEF_CO;
DROP PUBLIC SYNONYM PACK_ROARTVAI;
-- RTVAI module
DROP PUBLIC SYNONYM RTVAI_AGENTI;
DROP PUBLIC SYNONYM RTVAI_ISTORIC;
-- Additional types
DROP PUBLIC SYNONYM FF_SUME;
DROP PUBLIC SYNONYM FF_PERSINTRET;
DROP PUBLIC SYNONYM VANZARI_DETALII_TAB;
DROP PUBLIC SYNONYM PIVOT_TABLE;
DROP PUBLIC SYNONYM PIVOT_ROW;
DROP PUBLIC SYNONYM TABINCHIDERETVA;
DROP PUBLIC SYNONYM TABELAVALORITAGURI;
DROP PUBLIC SYNONYM RANDINCHIDERETVA;
DROP PUBLIC SYNONYM SERVER_INFO;
DROP PUBLIC SYNONYM SYN_VNOM_UM_ISO;
-- ============================================================================
-- SECTION 2: CORE USER/PROGRAM MANAGEMENT SYNONYMS
-- ============================================================================
PROMPT
PROMPT [1/10] Creating core user/program synonyms...
CREATE PUBLIC SYNONYM SYN_DEF_GRUP FOR CONTAFIN_ORACLE.DEF_GRUP;
CREATE PUBLIC SYNONYM SYN_DEF_PROGRAME FOR CONTAFIN_ORACLE.DEF_PROGRAME;
CREATE PUBLIC SYNONYM SYN_VDEF_PROGRAME FOR CONTAFIN_ORACLE.VDEF_PROGRAME;
CREATE PUBLIC SYNONYM SYN_LUNILEAN FOR CONTAFIN_ORACLE.LUNILEAN;
CREATE PUBLIC SYNONYM SYN_NOM_FIRME FOR CONTAFIN_ORACLE.NOM_FIRME;
CREATE PUBLIC SYNONYM SYN_NOM_PROGRAME FOR CONTAFIN_ORACLE.NOM_PROGRAME;
CREATE PUBLIC SYNONYM SYN_PACK_DREPTURI FOR CONTAFIN_ORACLE.PACK_DREPTURI;
CREATE PUBLIC SYNONYM SYN_UTILIZATORI FOR CONTAFIN_ORACLE.UTILIZATORI;
CREATE PUBLIC SYNONYM SYN_VDEF_UTIL_PROGRAME FOR CONTAFIN_ORACLE.VDEF_UTIL_PROGRAME;
CREATE PUBLIC SYNONYM SYN_VDEF_UTIL_FIRME FOR CONTAFIN_ORACLE.VDEF_UTIL_FIRME;
CREATE PUBLIC SYNONYM SYN_VDEF_UTIL_OBIECTE FOR CONTAFIN_ORACLE.VDEF_UTIL_OBIECTE;
CREATE PUBLIC SYNONYM SYN_VUTILIZATORI FOR CONTAFIN_ORACLE.VUTILIZATORI;
CREATE PUBLIC SYNONYM SYN_VDEF_UTIL_GRUP FOR CONTAFIN_ORACLE.VDEF_UTIL_GRUP;
CREATE PUBLIC SYNONYM SYN_DEF_GRUP_DREPT FOR CONTAFIN_ORACLE.DEF_GRUP_DREPT;
CREATE PUBLIC SYNONYM SYN_OPTIUNI_PROGRAME FOR CONTAFIN_ORACLE.OPTIUNI_PROGRAME;
CREATE PUBLIC SYNONYM SYN_HELPCONT FOR CONTAFIN_ORACLE.HELPCONT;
CREATE PUBLIC SYNONYM SYN_V_NOM_FIRME FOR CONTAFIN_ORACLE.V_NOM_FIRME;
-- ============================================================================
-- SECTION 3: UTILITY TYPES AND FUNCTIONS
-- ============================================================================
PROMPT [2/10] Creating utility type synonyms...
CREATE PUBLIC SYNONYM STRINGAGG FOR CONTAFIN_ORACLE.STRINGAGG;
CREATE PUBLIC SYNONYM CHAR_ROW FOR CONTAFIN_ORACLE.CHAR_ROW;
CREATE PUBLIC SYNONYM CHAR_TAB FOR CONTAFIN_ORACLE.CHAR_TAB;
CREATE PUBLIC SYNONYM NUM_ROW FOR CONTAFIN_ORACLE.NUM_ROW;
CREATE PUBLIC SYNONYM NUM_TAB FOR CONTAFIN_ORACLE.NUM_TAB;
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 GETWORDCOUNT FOR CONTAFIN_ORACLE.GETWORDCOUNT;
CREATE PUBLIC SYNONYM GETWORDNUM FOR CONTAFIN_ORACLE.GETWORDNUM;
CREATE PUBLIC SYNONYM CHARC2COLLECTION FOR CONTAFIN_ORACLE.CHARC2COLLECTION;
CREATE PUBLIC SYNONYM CHARN2COLLECTION FOR CONTAFIN_ORACLE.CHARN2COLLECTION;
-- ============================================================================
-- SECTION 4: NOMENCLATURE SYNONYMS (Legal Forms, Geography)
-- ============================================================================
PROMPT [3/10] Creating nomenclature synonyms...
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_TIP_SOCIETATE FOR CONTAFIN_ORACLE.NOM_TIP_SOCIETATE;
CREATE PUBLIC SYNONYM SYN_NOM_FORME_PROPRIETATE FOR CONTAFIN_ORACLE.NOM_FORME_PROPRIETATE;
CREATE PUBLIC SYNONYM SYN_NOM_CETATENII FOR CONTAFIN_ORACLE.NOM_CETATENII;
CREATE PUBLIC SYNONYM SYN_NOM_TARI FOR CONTAFIN_ORACLE.NOM_TARI;
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_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_NOM_CODURI_CAEN FOR CONTAFIN_ORACLE.NOM_CODURI_CAEN;
CREATE PUBLIC SYNONYM SYN_NOM_TIPAPATRID FOR CONTAFIN_ORACLE.NOM_TIPAPATRID;
-- ============================================================================
-- SECTION 5: CURRENCY AND EXCHANGE RATE SYNONYMS
-- ============================================================================
PROMPT [4/10] Creating currency/exchange synonyms...
CREATE PUBLIC SYNONYM SYN_VNOM_VALUTE_ISO FOR CONTAFIN_ORACLE.VNOM_VALUTE_ISO;
CREATE PUBLIC SYNONYM SYN_NOM_VALUTE_ISO FOR CONTAFIN_ORACLE.NOM_VALUTE_ISO;
CREATE PUBLIC SYNONYM SYN_CURS_COTATII FOR CONTAFIN_ORACLE.CURS_COTATII;
CREATE PUBLIC SYNONYM SYN_CURS_ACTUALIZARI FOR CONTAFIN_ORACLE.CURS_ACTUALIZARI;
CREATE PUBLIC SYNONYM SYN_VNOM_UM_ISO FOR CONTAFIN_ORACLE.VNOM_UM_ISO;
-- ============================================================================
-- SECTION 6: SALARY MODULE SYNONYMS
-- ============================================================================
PROMPT [5/10] Creating salary module synonyms...
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_SPOR FOR CONTAFIN_ORACLE.SAL_NOM_TIP_SPOR;
CREATE PUBLIC SYNONYM SYN_SAL_NOM_TIP_NORME FOR CONTAFIN_ORACLE.SAL_NOM_TIP_NORME;
CREATE PUBLIC SYNONYM SYN_SAL_NOM_STARI_CTR FOR CONTAFIN_ORACLE.SAL_NOM_STARI_CTR;
CREATE PUBLIC SYNONYM SYN_SAL_NOM_DURATA_MUNCA FOR CONTAFIN_ORACLE.SAL_NOM_DURATA_MUNCA;
CREATE PUBLIC SYNONYM SYN_SAL_NOM_REPARTIZARE_MUNCA FOR CONTAFIN_ORACLE.SAL_NOM_REPARTIZARE_MUNCA;
CREATE PUBLIC SYNONYM SYN_SAL_NOM_INTERVALE_MUNCA FOR CONTAFIN_ORACLE.SAL_NOM_INTERVALE_MUNCA;
CREATE PUBLIC SYNONYM SYN_SAL_COR FOR CONTAFIN_ORACLE.SAL_COR;
CREATE PUBLIC SYNONYM SYN_SAL_ACTUALIZARE_COR FOR CONTAFIN_ORACLE.SAL_ACTUALIZARE_COR;
-- Salary types (must be created after CONTAFIN_ORACLE types exist)
PROMPT [6/10] Creating salary contract types...
CREATE PUBLIC SYNONYM SAL_CONTRACT_M FOR CONTAFIN_ORACLE.SAL_CONTRACT_M;
CREATE PUBLIC SYNONYM CONTRACT_M FOR CONTAFIN_ORACLE.CONTRACT_M;
CREATE PUBLIC SYNONYM SAL_RED FOR CONTAFIN_ORACLE.SAL_RED;
CREATE PUBLIC SYNONYM SAL_CAMPURI_RED FOR CONTAFIN_ORACLE.SAL_CAMPURI_RED;
CREATE PUBLIC SYNONYM TABSTERS FOR CONTAFIN_ORACLE.TABSTERS;
CREATE PUBLIC SYNONYM SAL_TABELESTERS FOR CONTAFIN_ORACLE.SAL_TABELESTERS;
-- ============================================================================
-- SECTION 7: ATTACHMENT SYNONYMS
-- ============================================================================
PROMPT [7/10] Creating attachment synonyms...
CREATE PUBLIC SYNONYM SYN_ATAS_ATASAMENTE FOR CONTAFIN_ORACLE.ATAS_ATASAMENTE;
CREATE PUBLIC SYNONYM SYN_ATAS_REFERINTE FOR CONTAFIN_ORACLE.ATAS_REFERINTE;
-- ============================================================================
-- SECTION 8: UTILITY PACKAGES
-- ============================================================================
PROMPT [8/10] Creating utility package synonyms...
CREATE PUBLIC SYNONYM PACK_UPDATE FOR CONTAFIN_ORACLE.PACK_UPDATE;
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 SYN_PACK_DEF_CO FOR CONTAFIN_ORACLE.PACK_DEF_CO;
CREATE PUBLIC SYNONYM PACK_ROARTVAI FOR CONTAFIN_ORACLE.PACK_ROARTVAI;
-- ============================================================================
-- SECTION 9: RTVAI MODULE AND ADDITIONAL TYPES
-- ============================================================================
PROMPT [9/10] Creating RTVAI and additional type synonyms...
CREATE PUBLIC SYNONYM RTVAI_AGENTI FOR CONTAFIN_ORACLE.RTVAI_AGENTI;
CREATE PUBLIC SYNONYM RTVAI_ISTORIC FOR CONTAFIN_ORACLE.RTVAI_ISTORIC;
CREATE PUBLIC SYNONYM FF_SUME FOR CONTAFIN_ORACLE.FF_SUME;
CREATE PUBLIC SYNONYM FF_PERSINTRET FOR CONTAFIN_ORACLE.FF_PERSINTRET;
CREATE PUBLIC SYNONYM VANZARI_DETALII_TAB FOR CONTAFIN_ORACLE.VANZARI_DETALII_TAB;
CREATE PUBLIC SYNONYM PIVOT_TABLE FOR CONTAFIN_ORACLE.PIVOT_TABLE;
CREATE PUBLIC SYNONYM PIVOT_ROW FOR CONTAFIN_ORACLE.PIVOT_ROW;
CREATE PUBLIC SYNONYM TABINCHIDERETVA FOR CONTAFIN_ORACLE.TABINCHIDERETVA;
CREATE PUBLIC SYNONYM TABELAVALORITAGURI FOR CONTAFIN_ORACLE.TABELAVALORITAGURI;
CREATE PUBLIC SYNONYM RANDINCHIDERETVA FOR CONTAFIN_ORACLE.RANDINCHIDERETVA;
CREATE PUBLIC SYNONYM SERVER_INFO FOR CONTAFIN_ORACLE.SERVER_INFO;
-- ============================================================================
-- SECTION 10: APPLICATION CONTEXT AND SPECIAL SYNONYMS
-- ============================================================================
PROMPT [10/10] Creating application context and special synonyms...
-- Create application context for session variables
CREATE CONTEXT SESIUNE USING CONTAFIN_ORACLE.SET_VARIABILE;
-- Private synonym for license view (in CONTAFIN_ORACLE schema)
-- This links to the SYS.VAUTH_SERII view
BEGIN
EXECUTE IMMEDIATE 'DROP SYNONYM CONTAFIN_ORACLE.VDEF_PROGRAME_SERII';
EXCEPTION
WHEN OTHERS THEN NULL;
END;
/
CREATE SYNONYM CONTAFIN_ORACLE.VDEF_PROGRAME_SERII FOR SYS.VAUTH_SERII;
PROMPT
PROMPT ========================================
PROMPT Public Synonym Creation Complete
PROMPT ========================================
PROMPT
-- Verification
PROMPT Total public synonyms created:
SELECT COUNT(*) AS synonym_count
FROM dba_synonyms
WHERE owner = 'PUBLIC'
AND table_owner = 'CONTAFIN_ORACLE';
PROMPT
PROMPT Public synonyms list:
SELECT synonym_name, table_name
FROM dba_synonyms
WHERE owner = 'PUBLIC'
AND table_owner = 'CONTAFIN_ORACLE'
ORDER BY synonym_name;
PROMPT

View File

@@ -0,0 +1,952 @@
-- ============================================================================
-- SYS CUSTOM OBJECTS FOR ROA APPLICATION
-- ============================================================================
-- Oracle 21c/18c Compatible Version
-- Updated: January 2026
--
-- This file contains all custom SYS objects required by the ROA application:
-- - Tables: AUTH_DETALII, AUTH_SERII, INFO
-- - View: VAUTH_SERII
-- - Sequence: SEQ_AUTH_SERII
-- - Package: AUTH_PACK (uses DBMS_CRYPTO for Oracle 21c compatibility)
-- - Procedures: EXECUTESCRIPTOS, NEWSCHEMA, NEWSCHEMAJOB, UPDATESQLPLUS, pINFO
--
-- IMPORTANT: Run this script as SYS with SYSDBA privileges
--
-- Usage:
-- sqlplus sys/password@service as sysdba @sys-objects.sql
--
-- ============================================================================
SET SERVEROUTPUT ON
SET FEEDBACK ON
WHENEVER SQLERROR CONTINUE
PROMPT
PROMPT ========================================
PROMPT Installing SYS Custom Objects
PROMPT ========================================
PROMPT
-- ============================================================================
-- SECTION 1: TABLES
-- ============================================================================
PROMPT [1/11] Creating SYS.AUTH_DETALII table...
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM dba_tables
WHERE owner = 'SYS' AND table_name = 'AUTH_DETALII';
IF v_count > 0 THEN
DBMS_OUTPUT.PUT_LINE(' Table AUTH_DETALII already exists, skipping.');
ELSE
EXECUTE IMMEDIATE '
CREATE TABLE SYS.AUTH_DETALII (
DETALII VARCHAR2(15) NOT NULL
) TABLESPACE SYSTEM';
DBMS_OUTPUT.PUT_LINE(' Table AUTH_DETALII created.');
END IF;
END;
/
PROMPT [2/11] Creating SYS.AUTH_SERII table...
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM dba_tables
WHERE owner = 'SYS' AND table_name = 'AUTH_SERII';
IF v_count > 0 THEN
DBMS_OUTPUT.PUT_LINE(' Table AUTH_SERII already exists, skipping.');
ELSE
EXECUTE IMMEDIATE '
CREATE TABLE SYS.AUTH_SERII (
ID_SERIE NUMBER(5,0) NOT NULL,
ID_PROGRAM NUMBER(5,0) NOT NULL,
SERIE RAW(128) NOT NULL,
STERS NUMBER(1,0) DEFAULT 0 NOT NULL,
DATAORA DATE DEFAULT SYSDATE NOT NULL,
ID_UTIL NUMBER(5,0) NOT NULL,
DATAORAS DATE,
ID_UTILS NUMBER(5,0),
CONSTRAINT PK_AUTH_SERII PRIMARY KEY (ID_SERIE)
) TABLESPACE SYSTEM';
DBMS_OUTPUT.PUT_LINE(' Table AUTH_SERII created.');
END IF;
END;
/
PROMPT [3/11] Creating SYS.INFO table (logging)...
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM dba_tables
WHERE owner = 'SYS' AND table_name = 'INFO';
IF v_count > 0 THEN
DBMS_OUTPUT.PUT_LINE(' Table INFO already exists, skipping.');
ELSE
EXECUTE IMMEDIATE '
CREATE TABLE SYS.INFO (
INFO CLOB,
DATAORA TIMESTAMP(6) DEFAULT SYSTIMESTAMP,
LOCATIA VARCHAR2(200) NULL
) TABLESPACE SYSTEM';
DBMS_OUTPUT.PUT_LINE(' Table INFO created.');
END IF;
END;
/
-- ============================================================================
-- SECTION 2: SEQUENCE
-- ============================================================================
PROMPT [4/11] Creating SYS.SEQ_AUTH_SERII sequence...
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM dba_sequences
WHERE sequence_owner = 'SYS' AND sequence_name = 'SEQ_AUTH_SERII';
IF v_count > 0 THEN
DBMS_OUTPUT.PUT_LINE(' Sequence SEQ_AUTH_SERII already exists, skipping.');
ELSE
EXECUTE IMMEDIATE '
CREATE SEQUENCE SYS.SEQ_AUTH_SERII
MINVALUE 1
MAXVALUE 99999
INCREMENT BY 1
START WITH 1
NOCACHE
NOORDER
NOCYCLE';
DBMS_OUTPUT.PUT_LINE(' Sequence SEQ_AUTH_SERII created.');
END IF;
END;
/
-- ============================================================================
-- SECTION 3: LOGGING PROCEDURE (pINFO)
-- ============================================================================
PROMPT [5/11] Creating SYS.pINFO procedure (logging)...
CREATE OR REPLACE PROCEDURE SYS.pINFO(
p_info IN CLOB,
p_locatia IN VARCHAR2 DEFAULT NULL
) IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO SYS.INFO (INFO, DATAORA, LOCATIA)
VALUES (p_info, SYSTIMESTAMP, p_locatia);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
-- Silently fail to avoid breaking caller
ROLLBACK;
END pINFO;
/
-- ============================================================================
-- SECTION 4: AUTH_PACK PACKAGE (Oracle 21c compatible with DBMS_CRYPTO)
-- ============================================================================
PROMPT [6/11] Creating SYS.AUTH_PACK package specification...
CREATE OR REPLACE PACKAGE SYS.AUTH_PACK IS
-- ========================================================================
-- AUTH_PACK - License and Authentication Management
-- ========================================================================
-- Author : MARIUS.ATANASIU
-- Created : 11/5/2005
-- Updated : 2026-01-14 - Migrated to Oracle 21c with DBMS_CRYPTO
--
-- Purpose:
-- Manages ROA application licensing, including:
-- - Program license verification on login
-- - User count verification per program
-- - License expiration checks
-- - Company count limits
-- ========================================================================
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;
/
PROMPT [7/11] Creating SYS.AUTH_PACK package body...
CREATE OR REPLACE PACKAGE BODY SYS.AUTH_PACK IS
-- ========================================================================
-- MODIFICATION HISTORY:
-- 2026-01-14: Migration Oracle 10g -> Oracle 21c
-- - Replaced DBMS_OBFUSCATION_TOOLKIT.DES3Decrypt with DBMS_CRYPTO.DECRYPT
-- - Using ENCRYPT_3DES_2KEY (16-byte key) + CHAIN_CBC + PAD_ZERO
-- - Added PINFO logging calls for debugging
-- ========================================================================
---------------------------------------------------------------------------
-- VERIFICA_PROGRAM
-- Called on database login (via LOGON trigger) to verify license
---------------------------------------------------------------------------
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',
'GENERARESCRIPT.EXE',
'ROAACTUALIZARI.EXE',
'EXP.EXE',
'IMP.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_program;
---------------------------------------------------------------------------
-- VERIFICA_LICENTA
-- Verifies license exists for program and checks user count by 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
-- Count distinct IPs (client_info) connected with same program
-- excluding current session's IP
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;
---------------------------------------------------------------------------
-- VERIFICA_LICENTA_LUNA
-- Verifies license for opening a new month (triggered on CALENDAR insert)
---------------------------------------------------------------------------
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')
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_licenta_luna;
---------------------------------------------------------------------------
-- VERIFICA_NUMAR_FIRME
-- Verifies company count doesn't exceed license limit
---------------------------------------------------------------------------
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 verifica_numar_firme;
---------------------------------------------------------------------------
-- ADAUGA_SERIE
-- Adds a new license serial number for a program
---------------------------------------------------------------------------
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 adauga_serie;
---------------------------------------------------------------------------
-- STERGE_SERIE
-- Marks a license serial as deleted (soft delete)
---------------------------------------------------------------------------
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 sterge_serie;
---------------------------------------------------------------------------
-- SELECTEAZA_SERIE
-- Returns the hex-encoded serial for a program
---------------------------------------------------------------------------
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 selecteaza_serie;
---------------------------------------------------------------------------
-- SELECTEAZA_NR_UTIL
-- Returns the number of licensed users for a program
---------------------------------------------------------------------------
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 selecteaza_nr_util;
---------------------------------------------------------------------------
-- SELECTEAZA_DATA_VAL
-- Returns the license expiration date for a program
---------------------------------------------------------------------------
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 selecteaza_data_val;
---------------------------------------------------------------------------
-- VERIFICA_SERIE
-- Validates a license serial checksum
---------------------------------------------------------------------------
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 verifica_serie;
---------------------------------------------------------------------------
-- DECRIPTEAZA_SERIE
-- Decrypts a license serial using DBMS_CRYPTO (Oracle 21c compatible)
-- Replaced DBMS_OBFUSCATION_TOOLKIT.DES3Decrypt
---------------------------------------------------------------------------
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;
-- Build 16-byte key for 3DES-2KEY
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'
)
);
-- Use DBMS_CRYPTO instead of DBMS_OBFUSCATION_TOOLKIT
-- ENCRYPT_3DES_2KEY for 16-byte keys, PAD_ZERO for compatibility
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 decripteaza_serie;
---------------------------------------------------------------------------
-- DECRIPTEAZA_NR_UTIL
-- Extracts user count from decrypted serial
---------------------------------------------------------------------------
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 decripteaza_nr_util;
---------------------------------------------------------------------------
-- DECRIPTEAZA_DATA_VAL
-- Extracts expiration date from decrypted serial
---------------------------------------------------------------------------
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 decripteaza_data_val;
---------------------------------------------------------------------------
-- HEXTODEC
-- Converts a hex character to decimal
---------------------------------------------------------------------------
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 hextodec;
---------------------------------------------------------------------------
-- DECTOHEX
-- Converts a decimal to hex character
---------------------------------------------------------------------------
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 dectohex;
END AUTH_PACK;
/
-- ============================================================================
-- SECTION 5: VIEW
-- ============================================================================
PROMPT [8/11] Creating SYS.VAUTH_SERII view...
CREATE OR REPLACE 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;
-- ============================================================================
-- SECTION 6: ADDITIONAL PROCEDURES
-- ============================================================================
PROMPT [9/11] Creating SYS.EXECUTESCRIPTOS procedure...
CREATE OR REPLACE PROCEDURE SYS.EXECUTESCRIPTOS(
p_nume_script IN VARCHAR2,
p_param IN VARCHAR2,
p_wait IN VARCHAR2,
p_result OUT NUMBER
) IS
v_job_name VARCHAR2(100);
v_state VARCHAR2(30);
BEGIN
v_job_name := 'EXECUTESCRIPTOS_' || TO_CHAR(SYSDATE, 'YYYYMMDD_HH24MISS');
DBMS_SCHEDULER.CREATE_JOB(
job_name => v_job_name,
job_type => 'EXECUTABLE',
job_action => p_nume_script,
number_of_arguments => 1,
start_date => SYSTIMESTAMP,
enabled => FALSE,
auto_drop => TRUE
);
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(
job_name => v_job_name,
argument_position => 1,
argument_value => p_param
);
DBMS_SCHEDULER.ENABLE(v_job_name);
IF p_wait = 'Y' THEN
LOOP
BEGIN
SELECT state INTO v_state
FROM dba_scheduler_jobs
WHERE job_name = v_job_name;
EXIT WHEN v_state NOT IN ('SCHEDULED', 'RUNNING');
EXCEPTION
WHEN NO_DATA_FOUND THEN
EXIT; -- Job completed and was auto-dropped
END;
DBMS_LOCK.SLEEP(1);
END LOOP;
END IF;
p_result := 0;
EXCEPTION
WHEN OTHERS THEN
p_result := -1;
END EXECUTESCRIPTOS;
/
PROMPT [10/11] Creating SYS.NEWSCHEMA procedure...
CREATE OR REPLACE PROCEDURE SYS.NEWSCHEMA(
p_schema_name IN VARCHAR2,
p_password IN VARCHAR2,
p_result OUT NUMBER
) IS
BEGIN
EXECUTE IMMEDIATE 'CREATE USER ' || p_schema_name ||
' IDENTIFIED BY ' || p_password ||
' DEFAULT TABLESPACE ROA' ||
' TEMPORARY TABLESPACE TEMP' ||
' QUOTA UNLIMITED ON ROA';
EXECUTE IMMEDIATE 'GRANT CONNECT, RESOURCE TO ' || p_schema_name;
EXECUTE IMMEDIATE 'GRANT CREATE SESSION TO ' || p_schema_name;
EXECUTE IMMEDIATE 'GRANT CREATE TABLE TO ' || p_schema_name;
EXECUTE IMMEDIATE 'GRANT CREATE VIEW TO ' || p_schema_name;
EXECUTE IMMEDIATE 'GRANT CREATE SEQUENCE TO ' || p_schema_name;
EXECUTE IMMEDIATE 'GRANT CREATE PROCEDURE TO ' || p_schema_name;
EXECUTE IMMEDIATE 'GRANT CREATE TRIGGER TO ' || p_schema_name;
EXECUTE IMMEDIATE 'GRANT CREATE TYPE TO ' || p_schema_name;
EXECUTE IMMEDIATE 'GRANT CREATE SYNONYM TO ' || p_schema_name;
EXECUTE IMMEDIATE 'GRANT CREATE DATABASE LINK TO ' || p_schema_name;
EXECUTE IMMEDIATE 'GRANT CREATE JOB TO ' || p_schema_name;
DBMS_OUTPUT.PUT_LINE('Schema ' || p_schema_name || ' created successfully!');
p_result := 0;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error creating schema: ' || SQLERRM);
p_result := -1;
END NEWSCHEMA;
/
PROMPT [11/11] Creating SYS.NEWSCHEMAJOB and SYS.UPDATESQLPLUS procedures...
CREATE OR REPLACE PROCEDURE SYS.NEWSCHEMAJOB(
p_schema_name IN VARCHAR2,
p_password IN VARCHAR2
) IS
v_job_name VARCHAR2(100);
BEGIN
v_job_name := 'NEWSCHEMA_' || p_schema_name;
DBMS_SCHEDULER.CREATE_JOB(
job_name => v_job_name,
job_type => 'STORED_PROCEDURE',
job_action => 'SYS.NEWSCHEMA',
number_of_arguments => 3,
start_date => SYSTIMESTAMP,
enabled => FALSE,
auto_drop => TRUE
);
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(
job_name => v_job_name,
argument_position => 1,
argument_value => p_schema_name
);
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(
job_name => v_job_name,
argument_position => 2,
argument_value => p_password
);
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(
job_name => v_job_name,
argument_position => 3,
argument_value => '0'
);
DBMS_SCHEDULER.ENABLE(v_job_name);
END NEWSCHEMAJOB;
/
CREATE OR REPLACE PROCEDURE SYS.UPDATESQLPLUS IS
v_result NUMBER;
BEGIN
-- Path may need to be adjusted for your Windows installation
EXECUTESCRIPTOS('D:\ROMFAST\UPDATE\UPDATE_SQLPLUS.BAT', '', 'N', v_result);
END UPDATESQLPLUS;
/
-- ============================================================================
-- VERIFICATION
-- ============================================================================
PROMPT
PROMPT ========================================
PROMPT Verifying SYS Custom Objects
PROMPT ========================================
PROMPT
PROMPT SYS custom objects status:
SELECT object_name, object_type, status
FROM dba_objects
WHERE owner = 'SYS'
AND object_name IN (
'AUTH_PACK', 'AUTH_DETALII', 'AUTH_SERII', 'VAUTH_SERII',
'EXECUTESCRIPTOS', 'NEWSCHEMA', 'NEWSCHEMAJOB', 'UPDATESQLPLUS',
'PINFO', 'INFO', 'SEQ_AUTH_SERII'
)
ORDER BY object_type, object_name;
PROMPT
PROMPT Invalid objects (should be empty):
SELECT object_name, object_type, status
FROM dba_objects
WHERE owner = 'SYS'
AND object_name IN (
'AUTH_PACK', 'AUTH_DETALII', 'AUTH_SERII', 'VAUTH_SERII',
'EXECUTESCRIPTOS', 'NEWSCHEMA', 'NEWSCHEMAJOB', 'UPDATESQLPLUS',
'PINFO', 'INFO', 'SEQ_AUTH_SERII'
)
AND status != 'VALID';
PROMPT
PROMPT ========================================
PROMPT SYS Custom Objects Installation Complete
PROMPT ========================================
PROMPT

View File

@@ -0,0 +1,514 @@
-- ============================================================================
-- ROA DATABASE VERIFICATION SCRIPT
-- ============================================================================
-- Comprehensive verification of all ROA database objects and configuration
--
-- Usage:
-- @verify-objects.sql
--
-- Connect as: SYSDBA or SYSTEM
--
-- This script verifies:
-- 1. Tablespace ROA exists
-- 2. Users CONTAFIN_ORACLE and company schemas exist
-- 3. SYS custom objects (AUTH_PACK, NEWSCHEMA, etc.)
-- 4. Public synonyms count and status
-- 5. Invalid objects
-- 6. Profile settings
-- 7. Network ACL configuration
-- ============================================================================
SET ECHO OFF
SET FEEDBACK ON
SET SERVEROUTPUT ON
SET LINESIZE 200
SET PAGESIZE 100
WHENEVER SQLERROR CONTINUE
PROMPT
PROMPT ============================================================
PROMPT ROA DATABASE VERIFICATION REPORT
PROMPT Generated:
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS "Report Time" FROM DUAL;
PROMPT ============================================================
PROMPT
-- ============================================================================
-- SECTION 1: DATABASE INFORMATION
-- ============================================================================
PROMPT
PROMPT ========================================
PROMPT [1/10] DATABASE INFORMATION
PROMPT ========================================
PROMPT
COLUMN name FORMAT A20
COLUMN value FORMAT A50
SELECT name, cdb, open_mode, log_mode
FROM v$database;
PROMPT
PROMPT Instance Information:
SELECT instance_name, host_name, version_full, status
FROM v$instance;
PROMPT
PROMPT Current Container (for Oracle 12c+):
SHOW CON_NAME
-- ============================================================================
-- SECTION 2: TABLESPACE VERIFICATION
-- ============================================================================
PROMPT
PROMPT ========================================
PROMPT [2/10] TABLESPACE ROA VERIFICATION
PROMPT ========================================
PROMPT
COLUMN tablespace_name FORMAT A15
COLUMN status FORMAT A10
COLUMN contents FORMAT A10
COLUMN extent_management FORMAT A10
SELECT tablespace_name, status, contents, extent_management
FROM dba_tablespaces
WHERE tablespace_name = 'ROA';
PROMPT
PROMPT ROA Datafile(s):
COLUMN file_name FORMAT A60
COLUMN size_mb FORMAT 999,999.99
COLUMN max_mb FORMAT 999,999.99
SELECT file_name,
bytes/1024/1024 AS size_mb,
autoextensible,
CASE WHEN maxbytes = 0 THEN bytes/1024/1024
ELSE maxbytes/1024/1024
END AS max_mb
FROM dba_data_files
WHERE tablespace_name = 'ROA';
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM dba_tablespaces WHERE tablespace_name = 'ROA';
IF v_count = 0 THEN
DBMS_OUTPUT.PUT_LINE('*** ERROR: Tablespace ROA does not exist! ***');
ELSE
DBMS_OUTPUT.PUT_LINE('OK: Tablespace ROA exists.');
END IF;
END;
/
-- ============================================================================
-- SECTION 3: USER VERIFICATION
-- ============================================================================
PROMPT
PROMPT ========================================
PROMPT [3/10] USER VERIFICATION
PROMPT ========================================
PROMPT
COLUMN username FORMAT A25
COLUMN default_tablespace FORMAT A15
COLUMN account_status FORMAT A20
PROMPT CONTAFIN_ORACLE user:
SELECT username, default_tablespace, temporary_tablespace, account_status, profile
FROM dba_users
WHERE username = 'CONTAFIN_ORACLE';
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM dba_users WHERE username = 'CONTAFIN_ORACLE';
IF v_count = 0 THEN
DBMS_OUTPUT.PUT_LINE('*** ERROR: User CONTAFIN_ORACLE does not exist! ***');
ELSE
DBMS_OUTPUT.PUT_LINE('OK: User CONTAFIN_ORACLE exists.');
END IF;
END;
/
PROMPT
PROMPT Company schemas (users with ROA default tablespace):
SELECT username, account_status, created
FROM dba_users
WHERE default_tablespace = 'ROA'
AND username NOT IN ('CONTAFIN_ORACLE')
ORDER BY username;
PROMPT
PROMPT CONTAFIN_ORACLE system privileges:
SELECT privilege
FROM dba_sys_privs
WHERE grantee = 'CONTAFIN_ORACLE'
ORDER BY privilege;
PROMPT
PROMPT CONTAFIN_ORACLE roles:
SELECT granted_role, default_role
FROM dba_role_privs
WHERE grantee = 'CONTAFIN_ORACLE';
-- ============================================================================
-- SECTION 4: SYS CUSTOM OBJECTS VERIFICATION
-- ============================================================================
PROMPT
PROMPT ========================================
PROMPT [4/10] SYS CUSTOM OBJECTS
PROMPT ========================================
PROMPT
COLUMN object_name FORMAT A25
COLUMN object_type FORMAT A15
COLUMN status FORMAT A10
PROMPT Expected SYS custom objects:
SELECT object_name, object_type, status, created
FROM dba_objects
WHERE owner = 'SYS'
AND object_name IN (
'AUTH_PACK',
'AUTH_DETALII',
'AUTH_SERII',
'VAUTH_SERII',
'SEQ_AUTH_SERII',
'EXECUTESCRIPTOS',
'NEWSCHEMA',
'NEWSCHEMAJOB',
'UPDATESQLPLUS',
'PINFO',
'INFO'
)
ORDER BY object_type, object_name;
DECLARE
v_count NUMBER;
v_expected NUMBER := 12; -- Tables: 3, View: 1, Sequence: 1, Package: 2, Procedures: 5
BEGIN
SELECT COUNT(*) INTO v_count
FROM dba_objects
WHERE owner = 'SYS'
AND object_name IN (
'AUTH_PACK', 'AUTH_DETALII', 'AUTH_SERII', 'VAUTH_SERII',
'SEQ_AUTH_SERII', 'EXECUTESCRIPTOS', 'NEWSCHEMA', 'NEWSCHEMAJOB',
'UPDATESQLPLUS', 'PINFO', 'INFO'
)
AND status = 'VALID';
DBMS_OUTPUT.PUT_LINE('Found ' || v_count || ' valid SYS custom objects.');
IF v_count < 10 THEN
DBMS_OUTPUT.PUT_LINE('*** WARNING: Some SYS objects may be missing or invalid! ***');
ELSE
DBMS_OUTPUT.PUT_LINE('OK: All expected SYS custom objects are present.');
END IF;
END;
/
-- ============================================================================
-- SECTION 5: PUBLIC SYNONYMS VERIFICATION
-- ============================================================================
PROMPT
PROMPT ========================================
PROMPT [5/10] PUBLIC SYNONYMS
PROMPT ========================================
PROMPT
PROMPT Public synonyms pointing to CONTAFIN_ORACLE:
SELECT COUNT(*) AS total_synonyms
FROM dba_synonyms
WHERE owner = 'PUBLIC'
AND table_owner = 'CONTAFIN_ORACLE';
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM dba_synonyms
WHERE owner = 'PUBLIC'
AND table_owner = 'CONTAFIN_ORACLE';
IF v_count < 50 THEN
DBMS_OUTPUT.PUT_LINE('*** WARNING: Expected 50+ public synonyms, found ' || v_count || ' ***');
ELSE
DBMS_OUTPUT.PUT_LINE('OK: Found ' || v_count || ' public synonyms for CONTAFIN_ORACLE.');
END IF;
END;
/
PROMPT
PROMPT Key public synonyms check:
SELECT
CASE WHEN EXISTS (SELECT 1 FROM dba_synonyms WHERE owner='PUBLIC' AND synonym_name='SYN_NOM_FIRME')
THEN 'OK' ELSE 'MISSING' END AS SYN_NOM_FIRME,
CASE WHEN EXISTS (SELECT 1 FROM dba_synonyms WHERE owner='PUBLIC' AND synonym_name='SYN_NOM_PROGRAME')
THEN 'OK' ELSE 'MISSING' END AS SYN_NOM_PROGRAME,
CASE WHEN EXISTS (SELECT 1 FROM dba_synonyms WHERE owner='PUBLIC' AND synonym_name='SYN_UTILIZATORI')
THEN 'OK' ELSE 'MISSING' END AS SYN_UTILIZATORI,
CASE WHEN EXISTS (SELECT 1 FROM dba_synonyms WHERE owner='PUBLIC' AND synonym_name='PACK_UPDATE')
THEN 'OK' ELSE 'MISSING' END AS PACK_UPDATE,
CASE WHEN EXISTS (SELECT 1 FROM dba_synonyms WHERE owner='PUBLIC' AND synonym_name='PACK_UTILS')
THEN 'OK' ELSE 'MISSING' END AS PACK_UTILS
FROM DUAL;
-- ============================================================================
-- SECTION 6: CONTAFIN_ORACLE OBJECTS
-- ============================================================================
PROMPT
PROMPT ========================================
PROMPT [6/10] CONTAFIN_ORACLE SCHEMA OBJECTS
PROMPT ========================================
PROMPT
PROMPT Object count by type:
SELECT object_type, COUNT(*) AS count
FROM dba_objects
WHERE owner = 'CONTAFIN_ORACLE'
GROUP BY object_type
ORDER BY object_type;
PROMPT
PROMPT Total objects in CONTAFIN_ORACLE:
SELECT COUNT(*) AS total_objects
FROM dba_objects
WHERE owner = 'CONTAFIN_ORACLE';
-- ============================================================================
-- SECTION 7: INVALID OBJECTS
-- ============================================================================
PROMPT
PROMPT ========================================
PROMPT [7/10] INVALID OBJECTS CHECK
PROMPT ========================================
PROMPT
PROMPT Invalid SYS custom objects:
SELECT object_name, object_type, status
FROM dba_objects
WHERE owner = 'SYS'
AND object_name IN (
'AUTH_PACK', 'AUTH_DETALII', 'AUTH_SERII', 'VAUTH_SERII',
'SEQ_AUTH_SERII', 'EXECUTESCRIPTOS', 'NEWSCHEMA', 'NEWSCHEMAJOB',
'UPDATESQLPLUS', 'PINFO', 'INFO'
)
AND status != 'VALID';
PROMPT
PROMPT Invalid CONTAFIN_ORACLE objects:
SELECT object_name, object_type
FROM dba_objects
WHERE owner = 'CONTAFIN_ORACLE'
AND status = 'INVALID'
ORDER BY object_type, object_name;
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM dba_objects
WHERE owner = 'CONTAFIN_ORACLE'
AND status = 'INVALID';
IF v_count > 0 THEN
DBMS_OUTPUT.PUT_LINE('*** WARNING: ' || v_count || ' invalid objects in CONTAFIN_ORACLE ***');
DBMS_OUTPUT.PUT_LINE('Run: ALTER PACKAGE/PROCEDURE/VIEW ... COMPILE; to fix');
ELSE
DBMS_OUTPUT.PUT_LINE('OK: No invalid objects in CONTAFIN_ORACLE.');
END IF;
END;
/
-- ============================================================================
-- SECTION 8: PROFILE SETTINGS
-- ============================================================================
PROMPT
PROMPT ========================================
PROMPT [8/10] PROFILE PASSWORD SETTINGS
PROMPT ========================================
PROMPT
COLUMN resource_name FORMAT A30
COLUMN limit FORMAT A20
SELECT resource_name, limit
FROM dba_profiles
WHERE profile = 'DEFAULT'
AND resource_type = 'PASSWORD'
ORDER BY resource_name;
DECLARE
v_limit VARCHAR2(40);
BEGIN
SELECT limit INTO v_limit
FROM dba_profiles
WHERE profile = 'DEFAULT'
AND resource_name = 'PASSWORD_LIFE_TIME';
IF v_limit != 'UNLIMITED' THEN
DBMS_OUTPUT.PUT_LINE('*** WARNING: PASSWORD_LIFE_TIME is not UNLIMITED (' || v_limit || ')');
DBMS_OUTPUT.PUT_LINE('Run configure-profile.sql to fix.');
ELSE
DBMS_OUTPUT.PUT_LINE('OK: PASSWORD_LIFE_TIME is UNLIMITED.');
END IF;
END;
/
-- ============================================================================
-- SECTION 9: DIRECTORY AND ACL VERIFICATION
-- ============================================================================
PROMPT
PROMPT ========================================
PROMPT [9/10] DIRECTORY AND ACL CONFIGURATION
PROMPT ========================================
PROMPT
PROMPT DMPDIR Directory:
COLUMN directory_name FORMAT A15
COLUMN directory_path FORMAT A60
SELECT directory_name, directory_path
FROM dba_directories
WHERE directory_name = 'DMPDIR';
PROMPT
PROMPT Network ACL for CONTAFIN_ORACLE:
SELECT host, acl
FROM dba_network_acls
WHERE acl LIKE '%roaupdate%';
PROMPT
PROMPT ACL Privileges:
SELECT principal, privilege, is_grant
FROM dba_network_acl_privileges
WHERE acl LIKE '%roaupdate%';
-- ============================================================================
-- SECTION 10: AUTH_DETALII DATA CHECK
-- ============================================================================
PROMPT
PROMPT ========================================
PROMPT [10/10] LICENSE DATA CHECK
PROMPT ========================================
PROMPT
PROMPT AUTH_DETALII (Client ID):
SELECT * FROM SYS.AUTH_DETALII;
PROMPT
PROMPT AUTH_SERII (License serials - without decryption):
SELECT id_serie, id_program, sters, dataora, id_util
FROM SYS.AUTH_SERII
WHERE sters = 0
ORDER BY id_program;
PROMPT
PROMPT License View (via VAUTH_SERII):
BEGIN
FOR rec IN (SELECT * FROM SYS.VAUTH_SERII) LOOP
DBMS_OUTPUT.PUT_LINE('Program: ' || rec.nume ||
', Users: ' || rec.nr_util ||
', Valid until: ' || TO_CHAR(rec.data_val, 'YYYY-MM-DD'));
END LOOP;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Note: Cannot query VAUTH_SERII - ' || SQLERRM);
DBMS_OUTPUT.PUT_LINE('This is normal if synonyms are not yet created.');
END;
/
-- ============================================================================
-- SUMMARY
-- ============================================================================
PROMPT
PROMPT ============================================================
PROMPT VERIFICATION SUMMARY
PROMPT ============================================================
PROMPT
DECLARE
v_errors NUMBER := 0;
v_warnings NUMBER := 0;
v_count NUMBER;
v_limit VARCHAR2(40);
BEGIN
-- Check tablespace
SELECT COUNT(*) INTO v_count FROM dba_tablespaces WHERE tablespace_name = 'ROA';
IF v_count = 0 THEN
DBMS_OUTPUT.PUT_LINE('ERROR: Tablespace ROA missing');
v_errors := v_errors + 1;
END IF;
-- Check CONTAFIN_ORACLE user
SELECT COUNT(*) INTO v_count FROM dba_users WHERE username = 'CONTAFIN_ORACLE';
IF v_count = 0 THEN
DBMS_OUTPUT.PUT_LINE('ERROR: User CONTAFIN_ORACLE missing');
v_errors := v_errors + 1;
END IF;
-- Check AUTH_PACK
SELECT COUNT(*) INTO v_count FROM dba_objects
WHERE owner = 'SYS' AND object_name = 'AUTH_PACK' AND object_type = 'PACKAGE BODY' AND status = 'VALID';
IF v_count = 0 THEN
DBMS_OUTPUT.PUT_LINE('ERROR: AUTH_PACK package missing or invalid');
v_errors := v_errors + 1;
END IF;
-- Check public synonyms
SELECT COUNT(*) INTO v_count FROM dba_synonyms
WHERE owner = 'PUBLIC' AND table_owner = 'CONTAFIN_ORACLE';
IF v_count < 50 THEN
DBMS_OUTPUT.PUT_LINE('WARNING: Only ' || v_count || ' public synonyms (expected 50+)');
v_warnings := v_warnings + 1;
END IF;
-- Check invalid objects
SELECT COUNT(*) INTO v_count FROM dba_objects
WHERE owner = 'CONTAFIN_ORACLE' AND status = 'INVALID';
IF v_count > 0 THEN
DBMS_OUTPUT.PUT_LINE('WARNING: ' || v_count || ' invalid objects in CONTAFIN_ORACLE');
v_warnings := v_warnings + 1;
END IF;
-- Check profile
SELECT limit INTO v_limit FROM dba_profiles
WHERE profile = 'DEFAULT' AND resource_name = 'PASSWORD_LIFE_TIME';
IF v_limit != 'UNLIMITED' THEN
DBMS_OUTPUT.PUT_LINE('WARNING: Password expiration is enabled');
v_warnings := v_warnings + 1;
END IF;
DBMS_OUTPUT.PUT_LINE('');
DBMS_OUTPUT.PUT_LINE('----------------------------------------');
DBMS_OUTPUT.PUT_LINE('Total Errors: ' || v_errors);
DBMS_OUTPUT.PUT_LINE('Total Warnings: ' || v_warnings);
DBMS_OUTPUT.PUT_LINE('----------------------------------------');
IF v_errors = 0 AND v_warnings = 0 THEN
DBMS_OUTPUT.PUT_LINE('STATUS: ALL CHECKS PASSED');
ELSIF v_errors = 0 THEN
DBMS_OUTPUT.PUT_LINE('STATUS: PASSED WITH WARNINGS');
ELSE
DBMS_OUTPUT.PUT_LINE('STATUS: FAILED - Please fix errors');
END IF;
END;
/
PROMPT
PROMPT ============================================================
PROMPT END OF VERIFICATION REPORT
PROMPT ============================================================
PROMPT

View File

@@ -0,0 +1,212 @@
#!/bin/bash
# =============================================================================
# Clone VM 300 (Windows 11 Template) for Oracle Testing
# =============================================================================
#
# Purpose: Create a test VM for Oracle installation testing
#
# Usage:
# ./clone-vm300.sh [TARGET_VMID] [TARGET_NAME]
#
# Examples:
# ./clone-vm300.sh # Creates VM 301 named oracle-test-301
# ./clone-vm300.sh 305 # Creates VM 305 named oracle-test-305
# ./clone-vm300.sh 310 roa-prod # Creates VM 310 named roa-prod
#
# Prerequisites:
# - Run on Proxmox host (pvemini, pve1, or pveelite)
# - VM 300 exists as Windows 11 template
# - Sufficient storage space (~50GB per clone)
#
# =============================================================================
set -e
# -----------------------------------------------------------------------------
# Configuration
# -----------------------------------------------------------------------------
SOURCE_VMID=300
TARGET_VMID=${1:-301}
TARGET_NAME=${2:-"oracle-test-${TARGET_VMID}"}
# Storage for new VM (change if needed)
TARGET_STORAGE="local-zfs"
# Node where to create the VM (empty = same as source)
TARGET_NODE=""
# Full clone (true) or linked clone (false)
FULL_CLONE=true
# Start VM after creation
AUTO_START=true
# Description for the new VM
DESCRIPTION="Oracle 21c Test VM - Created $(date '+%Y-%m-%d %H:%M')"
# -----------------------------------------------------------------------------
# Validation
# -----------------------------------------------------------------------------
echo "=============================================="
echo "Proxmox VM Clone Script"
echo "=============================================="
echo ""
echo "Source VM: $SOURCE_VMID"
echo "Target VM: $TARGET_VMID"
echo "Target Name: $TARGET_NAME"
echo "Full Clone: $FULL_CLONE"
echo "Auto Start: $AUTO_START"
echo ""
# Check if running on Proxmox
if ! command -v qm &> /dev/null; then
echo "ERROR: This script must be run on a Proxmox host"
echo " (qm command not found)"
exit 1
fi
# Check if source VM exists
if ! qm status $SOURCE_VMID &> /dev/null; then
echo "ERROR: Source VM $SOURCE_VMID does not exist"
exit 1
fi
# Check if target VMID is already in use
if qm status $TARGET_VMID &> /dev/null 2>&1; then
echo "ERROR: Target VMID $TARGET_VMID already exists"
echo " Choose a different VMID or remove existing VM:"
echo " qm destroy $TARGET_VMID"
exit 1
fi
# Confirm before proceeding
read -p "Proceed with cloning? [y/N] " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "Aborted."
exit 0
fi
# -----------------------------------------------------------------------------
# Clone VM
# -----------------------------------------------------------------------------
echo ""
echo "Creating clone..."
CLONE_CMD="qm clone $SOURCE_VMID $TARGET_VMID --name $TARGET_NAME"
if [ "$FULL_CLONE" = true ]; then
CLONE_CMD="$CLONE_CMD --full"
fi
if [ -n "$TARGET_STORAGE" ]; then
CLONE_CMD="$CLONE_CMD --storage $TARGET_STORAGE"
fi
if [ -n "$TARGET_NODE" ]; then
CLONE_CMD="$CLONE_CMD --target $TARGET_NODE"
fi
echo "Running: $CLONE_CMD"
eval $CLONE_CMD
echo "Clone created successfully"
# -----------------------------------------------------------------------------
# Configure VM
# -----------------------------------------------------------------------------
echo ""
echo "Configuring VM..."
# Set description
qm set $TARGET_VMID --description "$DESCRIPTION"
# Optionally increase resources for Oracle
# qm set $TARGET_VMID --memory 8192 --cores 4
echo "VM configured"
# -----------------------------------------------------------------------------
# Start VM
# -----------------------------------------------------------------------------
if [ "$AUTO_START" = true ]; then
echo ""
echo "Starting VM..."
qm start $TARGET_VMID
# Wait for VM to start
sleep 5
# Check status
STATUS=$(qm status $TARGET_VMID | awk '{print $2}')
echo "VM Status: $STATUS"
fi
# -----------------------------------------------------------------------------
# Output Summary
# -----------------------------------------------------------------------------
echo ""
echo "=============================================="
echo "VM Clone Complete"
echo "=============================================="
echo ""
echo "VMID: $TARGET_VMID"
echo "Name: $TARGET_NAME"
echo "Status: $(qm status $TARGET_VMID | awk '{print $2}')"
echo ""
echo "Console URL: https://$(hostname -I | awk '{print $1}'):8006/#v1:0:=qemu%2F${TARGET_VMID}:4::::::"
echo ""
echo "Next steps:"
echo " 1. Connect to VM console"
echo " 2. Complete Windows OOBE if needed"
echo " 3. Install Oracle 21c XE or SE"
echo " 4. Run ROA setup scripts"
echo ""
echo "To delete this VM when done:"
echo " qm stop $TARGET_VMID"
echo " qm destroy $TARGET_VMID"
echo ""
# -----------------------------------------------------------------------------
# Helper Commands
# -----------------------------------------------------------------------------
# Print helpful commands
cat << 'COMMANDS'
# Useful Proxmox commands:
# List all VMs
qm list
# VM status
qm status TARGET_VMID
# Start/Stop/Restart VM
qm start TARGET_VMID
qm stop TARGET_VMID
qm restart TARGET_VMID
# Access VM console
qm terminal TARGET_VMID
# Clone with different storage
qm clone 300 TARGET_VMID --name NAME --full --storage local-lvm
# Snapshot before testing
qm snapshot TARGET_VMID snap-before-oracle --description "Before Oracle install"
# Rollback to snapshot
qm rollback TARGET_VMID snap-before-oracle
# Delete VM
qm stop TARGET_VMID && qm destroy TARGET_VMID
COMMANDS
exit 0