From 13114ef41d583f9e08f8a287375d5fa3a7888b63 Mon Sep 17 00:00:00 2001 From: Marius Date: Mon, 9 Mar 2026 14:05:09 +0200 Subject: [PATCH] feat(oracle): add OS script execution procedures and Oracle locations finder - ExecuteScriptOS.prc: runs PowerShell scripts via DBMS_SCHEDULER - UpdateSQLPLUS.prc: runs SQL*Plus scripts via DBMS_SCHEDULER - find_oracle_locations.sql: comprehensive script to discover all Oracle DB paths for backup/migration Co-Authored-By: Claude Sonnet 4.6 --- .../roa-windows-setup/sql/ExecuteScriptOS.prc | 22 +++ .../roa-windows-setup/sql/UpdateSQLPLUS.prc | 15 ++ scripts/find_oracle_locations.sql | 159 ++++++++++++++++++ 3 files changed, 196 insertions(+) create mode 100644 proxmox/lxc108-oracle/roa-windows-setup/sql/ExecuteScriptOS.prc create mode 100644 proxmox/lxc108-oracle/roa-windows-setup/sql/UpdateSQLPLUS.prc create mode 100644 scripts/find_oracle_locations.sql diff --git a/proxmox/lxc108-oracle/roa-windows-setup/sql/ExecuteScriptOS.prc b/proxmox/lxc108-oracle/roa-windows-setup/sql/ExecuteScriptOS.prc new file mode 100644 index 0000000..54c8f68 --- /dev/null +++ b/proxmox/lxc108-oracle/roa-windows-setup/sql/ExecuteScriptOS.prc @@ -0,0 +1,22 @@ +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; +/ diff --git a/proxmox/lxc108-oracle/roa-windows-setup/sql/UpdateSQLPLUS.prc b/proxmox/lxc108-oracle/roa-windows-setup/sql/UpdateSQLPLUS.prc new file mode 100644 index 0000000..abe51b2 --- /dev/null +++ b/proxmox/lxc108-oracle/roa-windows-setup/sql/UpdateSQLPLUS.prc @@ -0,0 +1,15 @@ +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; +/ diff --git a/scripts/find_oracle_locations.sql b/scripts/find_oracle_locations.sql new file mode 100644 index 0000000..90f3d56 --- /dev/null +++ b/scripts/find_oracle_locations.sql @@ -0,0 +1,159 @@ +-- Script: find_oracle_locations.sql +-- Afișează toate locațiile bazei de date Oracle pentru backup/migrare +-- Utilizare: sqlplus / as sysdba @find_oracle_locations.sql +-- Rezultatul se salvează în: C:\oracle_locations.txt + +SET LINESIZE 200 +SET PAGESIZE 100 +SET TRIMSPOOL ON +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL D:\ROA\oracle_locations.txt +COLUMN name FORMAT A40 +COLUMN value FORMAT A100 +COLUMN file_name FORMAT A80 +COLUMN member FORMAT A80 + +PROMPT ======================================== +PROMPT 1. ORACLE_HOME si ORACLE_BASE +PROMPT ======================================== +SELECT 'ORACLE_HOME' as name, SYS_CONTEXT('USERENV', 'ORACLE_HOME') as value FROM dual +UNION ALL +SELECT name, value FROM v$parameter WHERE name IN ('db_name', 'db_unique_name'); + +PROMPT +PROMPT ======================================== +PROMPT 2. SID, SERVICE_NAME si LISTENER +PROMPT ======================================== +COLUMN instance_name FORMAT A20 +COLUMN service_name FORMAT A30 +COLUMN network_name FORMAT A30 + +PROMPT Instance Name (SID): +SELECT instance_name FROM v$instance; + +PROMPT +PROMPT Service Names: +SELECT name, value FROM v$parameter WHERE name = 'service_names'; + +PROMPT +PROMPT Servicii active: +SELECT name as service_name, network_name FROM v$services; + +PROMPT +PROMPT Listener configuration: +SELECT name, value FROM v$parameter WHERE name = 'local_listener'; + +PROMPT +PROMPT Network config files (listener.ora, tnsnames.ora): +PROMPT Locatie: ORACLE_HOME\network\admin\ +PROMPT - listener.ora +PROMPT - tnsnames.ora +PROMPT - sqlnet.ora + +PROMPT +PROMPT ======================================== +PROMPT 3. TIP BAZA DE DATE (CDB sau NON-CDB) +PROMPT ======================================== +COLUMN cdb FORMAT A5 +COLUMN con_id FORMAT 999 +COLUMN con_name FORMAT A20 +COLUMN open_mode FORMAT A15 + +SELECT cdb FROM v$database; + +SELECT con_id, name as con_name, open_mode FROM v$containers ORDER BY con_id; + +-- Daca e CDB, afiseaza si PDB-urile cu locatiile lor +PROMPT +PROMPT PDB Datafiles (daca exista): +SELECT p.name as pdb_name, d.file_name +FROM v$pdbs p, cdb_data_files d +WHERE p.con_id = d.con_id +ORDER BY p.name, d.file_id; + +PROMPT +PROMPT ======================================== +PROMPT 4. CONTROL FILES +PROMPT ======================================== +SELECT name as file_name FROM v$controlfile; + +PROMPT +PROMPT ======================================== +PROMPT 5. DATAFILES (fisiere de date) +PROMPT ======================================== +SELECT file_name FROM dba_data_files ORDER BY tablespace_name, file_id; + +PROMPT +PROMPT ======================================== +PROMPT 6. TEMPFILES +PROMPT ======================================== +SELECT file_name FROM dba_temp_files ORDER BY tablespace_name; + +PROMPT +PROMPT ======================================== +PROMPT 7. REDO LOG FILES +PROMPT ======================================== +SELECT member as file_name FROM v$logfile ORDER BY group#; + +PROMPT +PROMPT ======================================== +PROMPT 8. SPFILE / PFILE locatie +PROMPT ======================================== +SELECT name, value FROM v$parameter WHERE name = 'spfile'; + +PROMPT +PROMPT ======================================== +PROMPT 9. ARCHIVE LOG DESTINATION (daca e activat) +PROMPT ======================================== +SELECT name, value FROM v$parameter +WHERE name LIKE 'log_archive_dest%' AND value IS NOT NULL; + +SELECT name, value FROM v$parameter WHERE name = 'log_archive_format'; + +PROMPT +PROMPT ======================================== +PROMPT 10. FAST RECOVERY AREA (FRA) +PROMPT ======================================== +SELECT name, value FROM v$parameter +WHERE name IN ('db_recovery_file_dest', 'db_recovery_file_dest_size'); + +PROMPT +PROMPT ======================================== +PROMPT 11. AUDIT si DIAGNOSTIC DEST +PROMPT ======================================== +SELECT name, value FROM v$parameter +WHERE name IN ('audit_file_dest', 'diagnostic_dest', 'core_dump_dest'); + +PROMPT +PROMPT ======================================== +PROMPT 12. PASSWORD FILE locatie +PROMPT ======================================== +-- Password file este in ORACLE_HOME\database\PWDsid.ora + +PROMPT +PROMPT ======================================== +PROMPT 13. WALLET LOCATION (daca exista) +PROMPT ======================================== +SELECT * FROM v$encryption_wallet; + +PROMPT +PROMPT ======================================== +PROMPT REZUMAT DIRECTOARE DE COPIAT: +PROMPT ======================================== +PROMPT 1. ORACLE_HOME (intreaga instalare Oracle) +PROMPT 2. Toate directoarele unde sunt datafiles +PROMPT 3. Directorul FRA (Fast Recovery Area) +PROMPT 4. Directorul diagnostic_dest (alert logs) +PROMPT +PROMPT Inainte de copiere, opreste baza de date: +PROMPT SHUTDOWN IMMEDIATE; +PROMPT + +SPOOL OFF + +PROMPT +PROMPT ======================================== +PROMPT Rezultatul a fost salvat in: C:\oracle_locations.txt +PROMPT ========================================