czwartek, 8 maja 2014

Płatnik start skrypt vbs

Po uruchomieniu Płatnika ZUS , system wyświetla nam domyślnie tabele z wszystkimi dokumentami. W przypadku dużej ilości dokumentów w bazie np 200 tys (np dział kadr i płac nie chcą archiwizować dokumentów), można zastosować skrypt, który domyślnie wyświetli nam tabele ubezpieczonych zamiast  tabele z wszystkimi dokumentami ograniczy to spowolnienie wykonywania zapytań przez innych użytkowników do bazy przez co wpłynie to na dostępność i wydajność.

Skrypt startowy Windows 7/XP 32 bit

Dim shell
Sub Run(ByVal sFile)

Const HKEY_CURRENT_USER = &H80000001

strComputer = "."

Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")

strKeyPath = "Software\Asseco Poland SA\Płatnik\9.01.001\Hoover"
strValueName = "Nazwa Elementu"
strValue = "WidokRejestrUbezp"

objRegistry.SetExpandedStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strValue


Set shell = CreateObject("WScript.Shell")

shell.Run Chr(34) & sFile & Chr(34), 1, false
Set shell = Nothing

End Sub
Run "C:\Program Files\Asseco Poland SA\Płatnik\P2.exe"

piątek, 25 kwietnia 2014

Transakcje Płatnik ZUS

Skrypty

----------------------sprawdzanie planów ad hoc

select objtype ,
count(*) as number_of_plans,
sum(cast(size_in_bytes as bigint))/1024/1024 as size_in_MBs,
avg(usecounts) as avg_use_count from sys.dm_exec_cached_plans
group by objtype


----------------------czyszczenie planów ad hoc

DBCC FREESYSTEMCACHE('SQL Plans')


------------------------włączenie  AD-HOC
np. podczas migracji z bazy Access/MS SQL na MS SQL pojawia nam się komunikat :
„SQL Server blocked access to STATEMENT ad hoc distributed queries...”
 użyjemy zapytania

use master
exec sp_configure 'show advanced options', 1
go
reconfigure
go
exec sp_configure 'Ad Hoc Distributed Queries', 1
go
reconfigure
go
exec sp_configure 'show advanced options', 0
go
reconfigure
go

-------------zwiększenie czasu oczekiwania na wykonanie zapytań
np dla korekty dokumentów -przy dużej ilości przetwarzania

sp_configure 'remote query timeout', 28800
reconfigure
go

środa, 16 kwietnia 2014

Audit schema HR


Skrypty wykonujemy na użytkowniku sys
Po uworzeniu triggera audit na bazie dane z logowania będą zapisywane do tablicy

Polska Wersja skryptu 
Wersja oryginalna znajduje się na stronie

CREATE TABLE stats$rejestracja (
  uzytkownik           VARCHAR2(200)  NULL,
  sesja                NUMBER(8,0)    NULL,
  host                 VARCHAR2(3000) NULL,
  ostatni_program      VARCHAR2(3000) NULL,
  ostatnia_akcja       VARCHAR2(3000) NULL,
  ostatni_modul        VARCHAR2(3000) NULL,
  dzien_zalogowania    DATE           NULL,
  czas_zalogowania     VARCHAR2(3000) NULL,
  dzien_wylogowania    DATE           NULL,
  czas_wylogowania     VARCHAR2(3000) NULL,
  zalogowany_przez_min NUMBER(38,0)   NULL
)
  STORAGE (
    NEXT       1024 K
  )
/


PROMPT CREATE OR REPLACE TRIGGER logon_audit_trigger
CREATE OR REPLACE TRIGGER logon_audit_trigger
AFTER LOGON ON DATABASE
BEGIN
insert into stats$rejestracja values(
   user,
   sys_context('USERENV','SESSIONID'),
   sys_context('USERENV','HOST'),
   null,
   null,
   null,
   sysdate,
   to_char(sysdate, 'hh24:mi:ss'),
   null,
   null,
   null
);
END;
/

PROMPT CREATE OR REPLACE TRIGGER logoff_audit_trigger
CREATE OR REPLACE TRIGGER logoff_audit_trigger
BEFORE LOGOFF ON DATABASE
BEGIN
-- ***************************************************
-- Update the last action accessed
-- ***************************************************
update
stats$rejestracja
set
ostatnia_akcja = (select action from v$session where
sys_context('USERENV','SESSIONID') = audsid)
where
sys_context('USERENV','SESSIONID') = sesja;
--***************************************************
-- Update the last program accessed
-- ***************************************************
update
stats$rejestracja
set
ostatni_program = (select program from v$session where
sys_context('USERENV','SESSIONID') = audsid)
where
sys_context('USERENV','SESSIONID') = sesja;
-- ***************************************************
-- Update the last module accessed
-- ***************************************************
update
stats$rejestracja
set
ostatni_modul = (select module from v$session where
sys_context('USERENV','SESSIONID') = audsid)
where
sys_context('USERENV','SESSIONID') = sesja;
-- ***************************************************
-- Update the logoff day
-- ***************************************************
update
   stats$rejestracja
set
   dzien_zalogowania = sysdate
where
   sys_context('USERENV','SESSIONID') = sesja;
-- ***************************************************
-- Update the logoff time
-- ***************************************************
update
   stats$rejestracja
set
   czas_wylogowania = to_char(sysdate, 'hh24:mi:ss')
where
   sys_context('USERENV','SESSIONID') = sesja;
-- ***************************************************
-- Compute the elapsed minutes
-- ***************************************************
update
stats$rejestracja
 set
zalogowany_przez_min =   
round((logoff_day - logon_day)*1440)
where
sys_context('USERENV','SESSIONID') = sesja;
END;
/

wtorek, 18 marca 2014

Usunięcie użytkownika oramon

Powołany użytkownik oramon - czyli wszystkie obiekty tego użytkownika utworzone w schema
Jak go usunąć z wszystkimi jego zależnościami ?

DROP USER oramon CASCADE;
DROP PUBLIC SYNONYM db_alert;



-- usunięcie powiązanych obiektów


EXECUTE DBMS_IJOB.DROP_USER_JOBS('ORAMON');

-- wyłączenie isusnięcie wszystkich jobs które wykonują się na użytkowniku oramon

{
FOR rec IN (SELECT job FROM sys.dba_jobs WHERE upper(what) LIKE 'ORAMON.%') LOOP
  DBMS_JOB.BROKEN(rec.job, TRUE, SYSDATE);
END LOOP;
}

poniedziałek, 10 lutego 2014

Skrypt bash do Backup'u RMAN (Linux)

Tworzenie skryptu sh

tworzymy plik

touch backuporacle.sh

nadajemy uprawnienia do pliku

chmod 755 backuporacle.sh

edytujemy 

vi backuporacle.sh

wpisujemy

#!/bin/bash
sleep 10
USER=oracle
PASSWD=xxxxx
DBASE=orcl
RMAN=/opt/oracle/product/11.2.0/bin/rman
SCRIPT=/home/oracle/scripts/backuporacle
$RMAN target $DBASE/$PASSWD nocatalog @$SCRIPT


Skrypt RMAN Backup dla urządzenia 1 taśma

run {
allocate channel t1 type 'sbt_tape';
backup database plus archivelog;
backup spfile format 'spfile_%d_%s_%T.bak' tag 'spfile backup';
backup current controlfile format 'ctl_%t_dbid%I.bak' tag 'controfile backup';
release channel t1;
}



dla 4 taśm 

run {
allocate channel tape1 type 'sbt_tape';
allocate channel tape2 type 'sbt_tape';
allocate channel tape3 type 'sbt_tape';
allocate channel tape4 type 'sbt_tape';
backup database;
release channel tape1;
release channel tape2;
release channel tape3;
release channel tape4;
}

czwartek, 9 stycznia 2014

ZUS przerwy technologiczne



Dostępność serwerów ZUS sprawdzamy wchodząc na stronę



Jeśli strona nie wyświetla się oznacza to przerwę technologiczną ZUS


W przypadku gdy jeden z serwerów ZUS nie będzie działał możemy ustawić przekaz elektroniczny dla działającego serwera ZUS :)

Wybieramy z górnego menu Przekaz następnie wybieramy Ustawienia przekazu elektronicznego przechodzimy do zakładki Inne następnie zaznaczamy opcję  przy Użyj tego adresu do wymiany danych z ZUS a w polu obok wpisujemy adres: działającego serwera ZUS

węzły internetowe:

Wrocław http://www.ewd2.wroclaw.zus.pl/
lub
Warszawa http://www.ewd2.warszawa.zus.pl/
 

Aby sprawdzić poprawność wybranego serwera wybieramy z górnego menu Przekaz następnie wybieramy Ustawienia przekazu elektronicznego , na zakładce Ustawienia ogólne powinna być zaznaczona metoda przekazu „Komunikacja automatyczna ZUS pod adresem” z uzupełnionym adresem działającego serwera ZUS zamiast opisu automatyczny wybór

wtorek, 10 grudnia 2013

Export job

Działania wykonujemy na użytkowniku system
Najpierw trzeba utworzyć folder do zapisu eksportów (domyślnie DATA_PUMP_DIR)


SQL> CREATE OR REPLACE DIRECTORY tmp AS '/tmp'; dla Linux
SQL> CREATE OR REPLACE DIRECTORY tmp AS 'c:\bck'; dla Windows


nadajemy uprawnienia do odczytu i zapisu

SQL> GRANT read, write ON DIRECTORY tmp TO system;
wszystkie skrypty dotyczą: eksportu zawierającego strukturę i dane
parametr version ustawiony jest na latest można również ustawić na compatible


Mamy do dyspozycji 4 podstawowe rodzaje Export Job

database- full export mode
schema mode np HR
table mode
tablespace mode


Skrypty PL/SQL

1.full export mode

DECLARE
  hd  NUMBER;
BEGIN
  hd := DBMS_DATAPUMP.OPEN(operation => 'EXPORT',job_mode => 'FULL',remote_link => NULL,job_name => 'FULL EXPORT MODE',version => 'LATEST' );
  DBMS_DATAPUMP.ADD_FILE( handle => hd, filename => 'Full Export Mode', directory => 'DATA_PUMP_DIR', filetype => DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE  );
  DBMS_DATAPUMP.SET_PARAMETER( handle => hd, name => 'COMPRESSION', value => 'NONE' );
  DBMS_DATAPUMP.SET_PARAMETER( handle => hd, name => 'ESTIMATE', value => 'BLOCKS' );
  DBMS_DATAPUMP.SET_PARAMETER( handle => hd, name => 'ESTIMATE_ONLY', value => 1 );
  DBMS_DATAPUMP.START_JOB(handle => hd);
END;
/


2.schema mode np HR

 DECLARE
  hd  NUMBER;
BEGIN
  hd := DBMS_DATAPUMP.OPEN(operation => 'EXPORT',job_mode => 'SCHEMA',remote_link => NULL,job_name => 'SCHEMA_EXPORT',version => 'COMPATIBLE' );
  DBMS_DATAPUMP.ADD_FILE( handle => hd, filename => 'schema_export', directory => 'DATA_PUMP_DIR', filetype => DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE  );
  DBMS_DATAPUMP.SET_PARAMETER( handle => hd, name => 'COMPRESSION', value => 'NONE' );
  DBMS_DATAPUMP.SET_PARAMETER( handle => hd, name => 'USER_METADATA', value => 1 );
  DBMS_DATAPUMP.SET_PARAMETER( handle => hd, name => 'ESTIMATE', value => 'BLOCKS' );
  DBMS_DATAPUMP.SET_PARAMETER( handle => hd, name => 'ESTIMATE_ONLY', value => 1 );
  DBMS_DATAPUMP.METADATA_FILTER( handle => hd, name => 'SCHEMA_LIST', value => '''HR''' );
  DBMS_DATAPUMP.START_JOB(handle => hd);
END;
/


3.table mode

 DECLARE
  hd  NUMBER;
BEGIN
  hd := DBMS_DATAPUMP.OPEN(operation => 'EXPORT',job_mode => 'TABLE',remote_link => NULL,job_name => 'TABLE_EXPORT',version => 'LATEST' );
  DBMS_DATAPUMP.ADD_FILE( handle => hd, filename => 'table_export', directory => 'DATA_PUMP_DIR', filetype => DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE  );
  DBMS_DATAPUMP.SET_PARAMETER( handle => hd, name => 'COMPRESSION', value => 'NONE' );
  DBMS_DATAPUMP.SET_PARAMETER( handle => hd, name => 'ESTIMATE', value => 'BLOCKS' );
  DBMS_DATAPUMP.SET_PARAMETER( handle => hd, name => 'ESTIMATE_ONLY', value => 1 );
  DBMS_DATAPUMP.METADATA_FILTER( handle => hd, name => 'SCHEMA_LIST', value => '''HR''');
  DBMS_DATAPUMP.METADATA_FILTER( handle => hd, name => 'NAME_LIST', value => '''COUNTRIES'',''JOBS''' );
  DBMS_DATAPUMP.START_JOB(handle => hd);
END;
/


4.tablespace mode

 DECLARE
  hd  NUMBER;
BEGIN
  hd := DBMS_DATAPUMP.OPEN(operation => 'EXPORT',job_mode => 'TABLESPACE',remote_link => NULL,job_name => 'TABLESPACE_EXPORT',version => 'LATEST' );
  DBMS_DATAPUMP.ADD_FILE( handle => hd, filename => 'tablespace_export', directory => 'DATA_PUMP_DIR', filetype => DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE  );
  DBMS_DATAPUMP.SET_PARAMETER( handle => hd, name => 'COMPRESSION', value => 'NONE' );
  DBMS_DATAPUMP.SET_PARAMETER( handle => hd, name => 'ESTIMATE', value => 'BLOCKS' );
  DBMS_DATAPUMP.SET_PARAMETER( handle => hd, name => 'ESTIMATE_ONLY', value => 1 );
  DBMS_DATAPUMP.METADATA_FILTER( handle => hd, name => 'TABLESPACE_LIST', value => '''SYSAUX'',''TEMP'',''UNDOTBS1'',''USERS''' );
  DBMS_DATAPUMP.START_JOB(handle => hd);
END;
/


Inną metodą zaplanowania job-a jest użycie Oracle SQL Developer'a 
Szczegółowy opis znajduje się na Blogu Oracle Base

Poniżej przykład wygenerowanego skryptu przy pomocy Oracle SQL Developer

set scan off
set serveroutput on
set escape off
whenever sqlerror exit
DECLARE
    h1 number;
    errorvarchar varchar2(100):= 'ERROR';
    tryGetStatus number := 0;
begin
    h1 := dbms_datapump.open (operation => 'EXPORT', job_mode => 'FULL', job_name => 'EXPORT_JOB_SQLDEV_61', version => 'COMPATIBLE');
    tryGetStatus := 1;
    dbms_datapump.set_parallel(handle => h1, degree => 1);
    dbms_datapump.add_file(handle => h1, filename => 'EXPDAT.LOG', directory => 'DATA_PUMP_DIR', filetype => 3);
    dbms_datapump.set_parameter(handle => h1, name => 'KEEP_MASTER', value => 1);
    dbms_datapump.add_file(handle => h1, filename => 'EXPDAT%U.DMP', directory => 'DATA_PUMP_DIR', filesize => '100M',  filetype => 1);
    dbms_datapump.set_parameter(handle => h1, name => 'INCLUDE_METADATA', value => 1);
    dbms_datapump.set_parameter(handle => h1, name => 'DATA_ACCESS_METHOD', value => 'AUTOMATIC');
    dbms_datapump.set_parameter(handle => h1, name => 'ESTIMATE', value => 'BLOCKS');
    dbms_datapump.start_job(handle => h1, skip_current => 0, abort_step => 0);
    dbms_datapump.detach(handle => h1);
    errorvarchar := 'NO_ERROR';
EXCEPTION
    WHEN OTHERS THEN
    BEGIN
        IF ((errorvarchar = 'ERROR')AND(tryGetStatus=1)) THEN
            DBMS_DATAPUMP.DETACH(h1);
        END IF;
    EXCEPTION
    WHEN OTHERS THEN
        NULL;
    END;
    RAISE;
END;
/