Script pro zjištění počtu aktuálních sessions

select 
COUNT(*)AS POCET, sss.sid, blk.used_ublk, s.OSUSER, s.MACHINE, s.USERNAME, s.MODULE, s.ACTION, s.SQL_ID, MIN(s.LOGON_TIME), MAX(s.LOGON_TIME)
from v$session s
LEFT JOIN
(
SELECT ss.SID, ss.SQL_ID
from v$session SS
where ss.username IS not NULL
AND ss.STATUS = 'ACTIVE'
AND ss.PROGRAM IN ('osh.exe', 'uvsh.exe') -- win_server
) sss
ON s.SQL_ID = sss.sql_id
LEFT JOIN (select p.sid, s.used_ublk from v$transaction s, v$session p where s.addr=p.taddr) blk
ON blk.sid = sss.sid

where username is not NULL
AND s.STATUS = 'ACTIVE'
GROUP BY sss.sid, blk.used_ublk, s.USERNAME, s.OSUSER, s.MACHINE,s.MODULE, s.ACTION, s.SQL_ID
order by COUNT(*) DESC, MAX(s.LOGON_TIME)
Rubriky: Admin scripts, Oracle SQL | Komentáře nejsou povolené u textu s názvem Script pro zjištění počtu aktuálních sessions

Script pro historii spuštěných statistik nad tabulkou

select * from ALL_TAB_STATS_HISTORY where table_name='TABLE_NAME'
order by stats_update_time desc
Rubriky: Admin scripts, Oracle SQL | Komentáře nejsou povolené u textu s názvem Script pro historii spuštěných statistik nad tabulkou

Script pro zjištění obsazení TEMP space

SELECT b.tablespace,
ROUND(((b.blocks*p.value)/1024/1024),2)||'M' AS temp_size,
a.inst_id as Instance,
a.sid||','||a.serial# AS sid_serial,
NVL(a.username, '(oracle)') AS username,
a.OSUSER,
a.program,
a.status,
a.sql_id
FROM gv$session a,
gv$sort_usage b,
gv$parameter p
WHERE p.name = 'db_block_size'
AND a.saddr = b.session_addr
AND a.inst_id=b.inst_id
AND a.inst_id=p.inst_id
ORDER BY a.sid||','||a.serial#,b.tablespace, b.blocks
Rubriky: Admin scripts, Oracle SQL | Komentáře nejsou povolené u textu s názvem Script pro zjištění obsazení TEMP space

Script pro zjištění informací o waiting sessions

select  nvl(s.username,s.program) username
,s.OSUSER
, s.sid sid
, s.serial# serial
, s.sql_hash_value sql_hash_value
, substr(decode(w.wait_time, 0, w.event, 'ON CPU'),1,40) event
, w.P1TEXT,w.p1 p1
, w.P2TEXT,w.p2 p2
, w.P3TEXT,w.p3 p3
, w.WAIT_CLASS
, w.STATE
from v$session s
, v$session_wait w
where w.sid=s.sid
and s.status='ACTIVE'
and s.type='USER'
Rubriky: Admin scripts, Oracle SQL | Komentáře nejsou povolené u textu s názvem Script pro zjištění informací o waiting sessions

Script pro zjistění aktuálně locknutých objektů/tabulek

select
substr(a.os_user_name,1,15) "OS User",
substr(a.oracle_username,1,8) "DB User",
substr(b.owner,1,8) "Schema",
substr(b.object_name,1,20) "Object Name",
substr(b.object_type,1,10) "Type",
substr(c.segment_name,1,15) "RBS",
substr(d.used_urec,1,12) "# of Records",
e.sid,
e.serial#,
case when a.locked_mode='1' then 'Null'
when a.locked_mode='2' then 'Concurrent Read'
when a.locked_mode='3' then 'Concurrent Write'
when a.locked_mode='4' then 'Protected Read'
when a.locked_mode='5' then 'Protected Write'
when a.locked_mode='6' then 'Exclusive'
else ' '
end as locked_desc
,v.type ,vt.DESCRIPTION as LOCK_INFO /* pro lock info */
from v$locked_object a, dba_objects b, dba_rollback_segs c, v$transaction d, v$session e ,v$lock v, V$LOCK_TYPE vt /* pro lock info */
where
a.object_id = b.object_id
and
a.xidusn = c.segment_id
and
a.xidusn = d.xidusn
and
a.xidslot = d.xidslot
and
d.addr = e.taddr
and v.sid=e.sid and v.type=vt.type /* pro lock info */
group by a.os_user_name,a.oracle_username,b.owner,b.object_name,b.object_type,c.segment_name,d.used_urec,e.sid,
e.serial#,a.locked_mode,v.type ,vt.DESCRIPTION
order by object_name

Rubriky: Admin scripts, Oracle SQL | Komentáře nejsou povolené u textu s názvem Script pro zjistění aktuálně locknutých objektů/tabulek

Script pro výpis sessions dle využití RAM.

select
e.sid,
e.username,
e.osuser,
e.terminal,
e.MACHINE,
e.status,
e.state,
e.SQL_ID,
e.sql_exec_start,
a.uga_memory as UGA_MEMORY_KB,
b.pga_memory as PGA_MEMORY_KB,
c.sql_text,
substr(e.program,1,20) program,
decode(e.command,
1,'Create table' , 2,'Insert',
3,'Select' , 6,'Update',
7,'Delete' , 9,'Create index',
10,'Drop index' ,11,'Alter index',
12,'Drop table' ,13,'Create seq',
14,'Alter sequence' ,15,'Alter table',
16,'Drop sequ.' ,17,'Grant',
19,'Create syn.' ,20,'Drop synonym',
21,'Create view' ,22,'Drop view',
23,'Validate index' ,24,'Create procedure',
25,'Alter procedure' ,26,'Lock table',
42,'Alter session' ,44,'Commit',
45,'Rollback' ,46,'Savepoint',
47,'PL/SQL Exec' ,48,'Set Transaction',
60,'Alter trigger' ,62,'Analyze Table',
63,'Analyze index' ,71,'Create Snapshot Log',
72,'Alter Snapshot Log' ,73,'Drop Snapshot Log',
74,'Create Snapshot' ,75,'Alter Snapshot',
76,'drop Snapshot' ,85,'Truncate table',35,'Alter database',
170,'Call method',182,'Update indexes',114,'Grant role',
0,'No command', '? : '||e.command) nocommand,
e.event
from v$session e
left join
(select y.SID,
TO_CHAR(ROUND(y.value/1024),99999999) UGA_MEMORY
from
v$sesstat y,
v$statname z
where
y.STATISTIC# = z.STATISTIC#
and
NAME = 'session uga memory') a
ON a.sid=e.sid
left join
(select
y.SID,
TO_CHAR(ROUND(y.value/1024),99999999) PGA_MEMORY
from
v$sesstat y, v$statname z
where
y.STATISTIC# = z.STATISTIC#
and
NAME = 'session pga memory') b
on e.sid=b.sid
left join DBA_HIST_SQLTEXT c
on c.sql_id = e.sql_id
--where e.STATUS = 'ACTIVE'
order by
e.status,
a.uga_memory desc;
Rubriky: Admin scripts, Oracle SQL | Komentáře nejsou povolené u textu s názvem Script pro výpis sessions dle využití RAM.

Upload z Excelu do Oracle SQL tabulky

Příklad insertu sedmi sloupců (A-G) do tabulky na SQL.

Pro insert musí být v nastavení VBA povoleno „Microsoft ActiveX Data Objects 6.x Library“

Do sloupce „K“ skript vloží příkaz na INSERT v textové podobě, který se pak v cyklu provádí po jednotlivém řádku.

Je ošetřeno opakované spuštění – smaže předchozí data, pokud jsou vloženy ten samý den.
Jsou vynechány prázdné řádky.
Nakonec se vyčistí sloupec „K“.

----------------
Skript
----------------
Sub upload()

'Musi byt povoleno "Microsoft ActiveX Data Objects 6.0+ Library"

Dim objADO As ADODB.Connection
Dim strSQL
Dim dotaz As String
Dim ConString As String

' Priprava dat
Sheets("Zdroj").Select

Range("K2").FormulaLocal = "=KDYŽ(A2="""";""""; ""INSERT INTO DATA (JEDNA,DVA,TRI,CTYRI,PET,SEST,DATUM_VLOZENI) VALUES ('"" & A2 & ""','""& B2 & ""','""& C2 & ""','""& D2 & ""','""& E2 & ""','""& F2 & ""','"" & KDYŽ(G2="""";HODNOTA.NA.TEXT(DNES();""dd.mm.rrrr"");G2) &""')"")"
Range("K2").Select
Selection.AutoFill Destination:=Range("K2:" & "K" & Range("A" & Rows.Count).End(xlUp).Row)

' Application.Wait Now + TimeValue("00:00:01")

'Smazani predchozich dat - update pri znovuspusteni reportu
Range("K1").FormulaLocal = "=""delete FROM DATA where DATUM_VLOZENI like '""& HODNOTA.NA.TEXT(DNES();""dd.mm.rr"") & ""'"""

' Upload na SQL
Set objADO = CreateObject("ADODB.Connection")
' Rucni dotaz na DB
'objADO.Properties("Prompt") = 2

objADO.Open "Driver={Microsoft ODBC for Oracle}; CONNECTSTRING=SERVER; UID=LOGIN; PWD=PASSWORD;"

'SQL spusteni dotazu generovaneho v excelu jako text

pocet = Range("K" & Rows.Count).End(xlUp).Row

For provedeni = 1 To pocet ' prvni radek
dotaz = Sheets("Zdroj").Range("K" & provedeni)
If dotaz <> "" Then
objADO.Execute dotaz

End If
Next provedeni
objADO.Close
Set objADO = Nothing

'Vymaz prikazu
Range("K:K").Clear

End Sub

Rubriky: Excel notes, VBA | Komentáře nejsou povolené u textu s názvem Upload z Excelu do Oracle SQL tabulky

Podmínka při počtu hledané hodnoty

If WorksheetFunction.CountIf(Range("F:F"), "VYMAZAT") > 0 Then

'co udělat

endif

Rubriky: Excel notes, VBA | Komentáře nejsou povolené u textu s názvem Podmínka při počtu hledané hodnoty

Počet hledané hodnoty ve sloupci

Dim x As Long
x = Range("L" & Rows.Count).End(xlUp).Row
If x < 2 Then x = 1 'Ošetření prázdného sloupce kontrola = Application.WorksheetFunction.CountIf(Range("L1:L" & x), "Not_in_Agenda") endif

Rubriky: Excel notes, VBA | Komentáře nejsou povolené u textu s názvem Počet hledané hodnoty ve sloupci

Výmaz netisknutelných znaků – funkce

Function CleanTrim(ByVal S As String, Optional ConvertNonBreakingSpace As Boolean = True) As String
Dim X As Long, CodesToClean As Variant
CodesToClean = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, _
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 127, 129, 141, 143, 144, 157)
If ConvertNonBreakingSpace Then S = Replace(S, Chr(160), " ")
For X = LBound(CodesToClean) To UBound(CodesToClean)
If InStr(S, Chr(CodesToClean(X))) Then S = Replace(S, Chr(CodesToClean(X)), "")
Next
CleanTrim = WorksheetFunction.Trim(S)
End Function

————————-
nebo lze i klasickým způsobem konkrétní znak pomocí vzorce

=PROČISTIT(DOSADIT(A2;ZNAK(9);ZNAK(32))))

Rubriky: Excel notes, VBA | Komentáře nejsou povolené u textu s názvem Výmaz netisknutelných znaků – funkce