Compare commits
2 Commits
665c2b5d37
...
4f51ee48f6
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4f51ee48f6 | ||
|
|
989477f7a4 |
11
.gitignore
vendored
Normal file
11
.gitignore
vendored
Normal 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
|
||||
103
proxmox/lxc108-oracle/new-roa-oracle-server/Oracle10gR1.txt
Normal file
103
proxmox/lxc108-oracle/new-roa-oracle-server/Oracle10gR1.txt
Normal 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
|
||||
|
||||
52
proxmox/lxc108-oracle/new-roa-oracle-server/Oracle10gR2.txt
Normal file
52
proxmox/lxc108-oracle/new-roa-oracle-server/Oracle10gR2.txt
Normal 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
|
||||
|
||||
366
proxmox/lxc108-oracle/new-roa-oracle-server/ROA_ACTUALIZARI.txt
Normal file
366
proxmox/lxc108-oracle/new-roa-oracle-server/ROA_ACTUALIZARI.txt
Normal 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;
|
||||
405
proxmox/lxc108-oracle/new-roa-oracle-server/citeste.txt
Normal file
405
proxmox/lxc108-oracle/new-roa-oracle-server/citeste.txt
Normal 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;
|
||||
|
||||
41
proxmox/lxc108-oracle/new-roa-oracle-server/createco.sql
Normal file
41
proxmox/lxc108-oracle/new-roa-oracle-server/createco.sql
Normal 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
|
||||
13
proxmox/lxc108-oracle/new-roa-oracle-server/createdb.sql
Normal file
13
proxmox/lxc108-oracle/new-roa-oracle-server/createdb.sql
Normal 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
|
||||
33
proxmox/lxc108-oracle/new-roa-oracle-server/createfn.sql
Normal file
33
proxmox/lxc108-oracle/new-roa-oracle-server/createfn.sql
Normal 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
|
||||
55
proxmox/lxc108-oracle/new-roa-oracle-server/directory.bat
Normal file
55
proxmox/lxc108-oracle/new-roa-oracle-server/directory.bat
Normal 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
|
||||
427
proxmox/lxc108-oracle/new-roa-oracle-server/postdbcreation.sql
Normal file
427
proxmox/lxc108-oracle/new-roa-oracle-server/postdbcreation.sql
Normal 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
|
||||
@@ -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
|
||||
4
proxmox/lxc108-oracle/new-roa-oracle-server/roa.bat
Normal file
4
proxmox/lxc108-oracle/new-roa-oracle-server/roa.bat
Normal file
@@ -0,0 +1,4 @@
|
||||
sqlplus.exe /nolog @roa.sql
|
||||
call import_co.bat
|
||||
call post_co.bat
|
||||
call import_firma.bat
|
||||
108
proxmox/lxc108-oracle/new-roa-oracle-server/roa.sql
Normal file
108
proxmox/lxc108-oracle/new-roa-oracle-server/roa.sql
Normal 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
|
||||
@@ -0,0 +1,2 @@
|
||||
sqlplus.exe /nolog @roa_firma.sql
|
||||
call import_firma.bat
|
||||
26
proxmox/lxc108-oracle/new-roa-oracle-server/roa_firma.sql
Normal file
26
proxmox/lxc108-oracle/new-roa-oracle-server/roa_firma.sql
Normal 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
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
/
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
alter table AUTH_SERII modify ID_PROGRAM NUMBER(5);
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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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
|
||||
|
||||
|
||||
/
|
||||
@@ -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=
|
||||
|
||||
/
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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=
|
||||
|
||||
/
|
||||
@@ -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;
|
||||
/
|
||||
@@ -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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
|
||||
|
||||
|
||||
/
|
||||
@@ -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=
|
||||
|
||||
/
|
||||
@@ -0,0 +1 @@
|
||||
GRANT EXECUTE ON UTL_FILE TO PUBLIC;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
|
||||
13
proxmox/lxc108-oracle/new-roa-oracle-server/todo.txt
Normal file
13
proxmox/lxc108-oracle/new-roa-oracle-server/todo.txt
Normal 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
|
||||
|
||||
|
||||
|
||||
|
||||
390
proxmox/lxc108-oracle/roa-windows-setup/README.md
Normal file
390
proxmox/lxc108-oracle/roa-windows-setup/README.md
Normal 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
|
||||
372
proxmox/lxc108-oracle/roa-windows-setup/config.example.ps1
Normal file
372
proxmox/lxc108-oracle/roa-windows-setup/config.example.ps1
Normal 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
|
||||
}
|
||||
105
proxmox/lxc108-oracle/roa-windows-setup/config/sqlnet.ora
Normal file
105
proxmox/lxc108-oracle/roa-windows-setup/config/sqlnet.ora
Normal 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
|
||||
#
|
||||
# =============================================================================
|
||||
@@ -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
|
||||
@@ -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
|
||||
144
proxmox/lxc108-oracle/roa-windows-setup/par/import-company.par
Normal file
144
proxmox/lxc108-oracle/roa-windows-setup/par/import-company.par
Normal 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;
|
||||
#
|
||||
# =============================================================================
|
||||
104
proxmox/lxc108-oracle/roa-windows-setup/par/import-contafin.par
Normal file
104
proxmox/lxc108-oracle/roa-windows-setup/par/import-contafin.par
Normal 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
|
||||
# =============================================================================
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
393
proxmox/lxc108-oracle/roa-windows-setup/sql/grants-public.sql
Normal file
393
proxmox/lxc108-oracle/roa-windows-setup/sql/grants-public.sql
Normal 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
|
||||
313
proxmox/lxc108-oracle/roa-windows-setup/sql/synonyms-public.sql
Normal file
313
proxmox/lxc108-oracle/roa-windows-setup/sql/synonyms-public.sql
Normal 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
|
||||
952
proxmox/lxc108-oracle/roa-windows-setup/sql/sys-objects.sql
Normal file
952
proxmox/lxc108-oracle/roa-windows-setup/sql/sys-objects.sql
Normal 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
|
||||
514
proxmox/lxc108-oracle/roa-windows-setup/sql/verify-objects.sql
Normal file
514
proxmox/lxc108-oracle/roa-windows-setup/sql/verify-objects.sql
Normal 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
|
||||
212
proxmox/lxc108-oracle/roa-windows-setup/test/clone-vm300.sh
Normal file
212
proxmox/lxc108-oracle/roa-windows-setup/test/clone-vm300.sh
Normal 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
|
||||
Reference in New Issue
Block a user