Database Administrator

SAP ERP 시스템 운영 시 사이즈가 큰 테이블 중의 하나인 BALDT는 어플리케이션 로그 테이블입니다.

해당 테이블을 주기적으로 삭제해서 일정한 사이즈를 관리할 수 있습니다.

 

제가 담당하고 있는 시스템의 경우는 레코드 수가 약 20억건 정도 되네요 ^^;

 

어플리케이션로그 삭제 프로그램 ( SBAL_DELETE )

 

만료일을 관리할 경우 "만료일이 된 로그만" 삭제하시면 되고, 만료일을 관리하지 않을 경우 특정 기간값을 주고 삭제하면 됩니다.

삭제 시 수행되는 쿼리는 아래와 같습니다.

 

SELECT "MANDANT" AS c ,"LOGNUMBER" AS c ,"OBJECT" AS c ,"SUBOBJECT" AS c ,"EXTNUMBER" AS c
,"ALDATE" AS c ,"ALTIME" AS c ,"ALUSER" AS c ,"ALTCODE" AS c
,"ALPROG" AS c ,"ALMODE" AS c ,"ALTEXT" AS c ,"USEREXITP" AS c
,"USEREXITF" AS c ,"PROBCLASS" AS c ,"ALDATE_DEL" AS c ,"DEL_BEFORE" AS c
,"ALSTATE" AS c ,"USEREXITT" AS c ,"ALCHDATE" AS c ,"ALCHTIME" AS c
,"ALCHUSER" AS c ,"LOG_HANDLE" AS c ,"TABNAME" AS c ,"MSG_CNT_AL" AS c
,"MSG_CNT_A" AS c ,"MSG_CNT_E" AS c ,"MSG_CNT_W" AS c ,"MSG_CNT_I" AS c
,"MSG_CNT_S" AS c ,"LAST_MSGNR" AS c ,"TIM_STMP" AS c ,"DB_VERSION" AS c
,"MSG_CNT_P1" AS c ,"MSG_CNT_P2" AS c ,"MSG_CNT_P3" AS c ,"MSG_CNT_P4" AS c
,"CLIENT_CRE" AS c ,"CHAR_SIZE" AS c
FROM "BALHDR"
WHERE "MANDANT" = @P1
AND ( "ALDATE" = @P2 AND "ALTIME" >= @P3 OR "ALDATE" > @P4 )
AND ( "ALDATE" = @P5 AND "ALTIME" <= @P6 OR "ALDATE" < @P7 )
AND ( "ALDATE_DEL" <= @P8 OR "ALDATE_DEL" = @P9 OR "DEL_BEFORE" = @P10 )
ORDER BY "MANDANT" ,"LOGNUMBER"  /* R3:SBAL_DELETE:707 T:BALHDR */

 

DELETE
FROM BALDAT
WHERE MANDANT = @P1
AND RELID = @P2
AND LOG_HANDLE IN ( @P3 , @P4 , @P5 , @P6 ,
@P7 , @P8 , @P9 , @P10 , @P11 , @P12 , @P13 , @P14 , @P15 , @P16 , @P17 , @P18 ,
@P19 , @P20 , @P21 , @P22 , @P23 , @P24 , @P25 , @P26 , @P27 , @P28 , @P29 ,
@P30 , @P31 , @P32 , @P33 , @P34 , @P35 , @P36 , @P37 , @P38 , @P39 , @P40 ,
@P41 , @P42 , @P43 , @P44 , @P45 , @P46 , @P47 , @P48 , @P49 , @P50 , @P51 ,
@P52 , @P53 , @P54 , @P55 , @P56 , @P57 , @P58 , @P59 , @P60 , @P61 , @P62 ,
@P63 , @P64 , @P65 , @P66 , @P67 , @P68 , @P69 , @P70 , @P71 , @P72 , @P73 ,
@P74 , @P75 , @P76 , @P77 , @P78 , @P79 , @P80 , @P81 , @P82 , @P83 , @P84 ,
@P85 , @P86 , @P87 , @P88 , @P89 , @P90 , @P91 , @P92 , @P93 , @P94 , @P95 ,
@P96 , @P97 , @P98 , @P99 , @P100 , @P101 , @P102 )
/* R3:SAPLSBAL_DB_INTERNAL:607 T:BALDAT */

 

감사합니다.

Comment +0

SAP PI에서 사용되는 메인 테이블은 아래와 같습니다.

 SXMSPMAST

 XI Message - Master

 SXMSPHIST

 XI Message - Master History table

 SXMSPEMAS

 Integration Engine : Enhanced Message Quere ( Master )

 SXMSPFADDRESS

 Addresses Master

 SXMSPVERS

 Integration Engine : Message Version

 SXMSPERROR

 XML Message Broker : Message Queue ( Incorrect Entries )

 SXMSCLUP

 Cluster - Compressed Message Payload Proerty

 SXMSCLUR

 Cluster - Compressed Message Payload Resource ( attachments )

 

위의 테이블 중 7개 테이블에 대해서는 Switch Table을 가지고 있습니다.

  SXMSPMAST

  SXMSPMAST2

  XML Message Broker: Message Queue (Master) (Switch Table)

  SXMSPHIST

  SXMSPHIST2

  XML Message Broker: History (Switch Table)

  SXMSPEMAS

  SXMSPEMAS2

  Integration Engine: Extended Message Queue (Switch Table)

  SXMSPVERS

  SXMSPVERS2

  Integration Engine: Message Version (Switch Table)

  SXMSCLUP

  SXMSCLUP2

  XMB: Property Cluster (Switch Table)

  SXMSCLUR

  SXMSCLUR2

  XMB: Resources Cluster (Switch Table)

 

데이터베이스에서 위의 두 테이블을 Rename 하여 Switch 하면 데이터를 빠른 시간에 운영 데이터에서 제외할 수 있습니다.

 

EXEC sp_rename 'fpr.SXMSPMAST', 'SXMSPMAST_OLD';

EXEC sp_rename 'fpr.SXMSPMAST2', 'SXMSPMAST';

EXEC sp_rename 'fpr.SXMSPMAST_OLD', 'SXMSPMAST2';

 

위의 방법으로 7개 테이블을 Switch 테이블로 백업하고 운영 테이블을 비웁니다.

 

SAP SWITCH Program : RSXMB_TABLE_SWITCH

https://sap4tech.net/sap-pi-tables/

Comment +0

MS SQL에서 AlwaysOn으로 이중화 구성

AlwaysOn 구성 시 EE 버전과 다르게 SE에서는 기본 가용성 그룹만 제공을 합니다.

아래 URL을 보면, EE와 SE 버전에서 가용성 그룹에 대해서는 기능 제공이 다른 것을 확인할 수 있습니다.
https://docs.microsoft.com/ko-kr/sql/sql-server/editions-and-components-of-sql-server-2016?view=sql-server-2017

그래서 SE에서 EE와 유사한 가용성 그룹을 제공하고자 할 때 아래와 같이 구성합니다.

 

첫번째, 가용성 그룹에 여러 데이터베이스가 추가가 되지 않기 때문에 가용성 그룹과 데이터베이스를 1:1로 하여 여러개의 기본 가용성 그룹을 생성합니다.


두번째, 제공하는 서비스에서 가장 중요한 DB가 속한 가용성 그룹에 리스너를 만듭니다.

다른 가용성 그룹에 상관 없이 해당 리스너로 접속하는 서비스는 리스너가 설정된 가용성 그룹이 PRIMARY로 설정된 서버에 자동으로 접속하게 됩니다. 리스너가 없는 가용성 그룹은 리스너가 있는 가용성 그룹에 상관 없이 다른 서버에서 서비스가 제공 됩니다.

 

세번째, 나머지 가용성 그룹에 있는 데이터베이스도 리스너가 있는 가용성 그룹과 PRIMAY 서버를 일치 시키기 위해 예약 작업에 아래 스크립트를 이용하여 모니터링 하고 만일 리스너가 있는 가용성 그룹과 서비스가 다른 곳에서 서비스 하는 가용성 그룹들은 강제로 FailOver를 시킵니다.

 

DECLARE @VAR1 int
DECLARE @VAR2 int

SELECT @VAR1 = sys.fn_hadr_is_primary_replica ('서비스의 주가 되는 DB')
SELECT @VAR2 = sys.fn_hadr_is_primary_replica ('서비스의 주가 되는 DB에 의해 자동 전환될 DB')

IF(@VAR1=1)
BEGIN
 IF(@VAR2=0)
  ALTER AVAILABILITY GROUP [서비스의 주가되는 DB에 의해 자동 전활될 DB의 가용성그룹] FAILOVER
END

참고로, 위의 방식으로 임시 방편으로 서비스를 하고 있는데 트랜젝션이 수행되고 있는 상태에서 강제 Failover를 시켰을때 DB가 손상되지는 않을까 약간의 우려는 있습니다.

Comment +0

crsctl 실행파일이 있는 경로 확인

ps -ef | grep crs

 

crsctl 실행하여 cluster resource 확인

/oracle/app/grid/product/12.2.0/.../bin/crsctl status resource -t

 

pmon 프로세스 확인

ps -ef | grep pmon

 

lsnrctl 실행파일 경로 확인

ps -ef | grep tns

 

lsnrctl을 싱행하여 리스너 상태 확인

/oracle/app/grid/product/12.2.0/..../bin/lsnrctl status 서비스ID

'Oracle' 카테고리의 다른 글

오라클 RAC 서비스 상태 확인  (0) 2018.05.24
오라클 asm disk 조회  (0) 2017.09.04
테이블스페이스 조회  (0) 2017.09.01
오라클에 트리거 설정하기  (0) 2013.12.01

Comment +0

Windows 10용 Cisco Anyconnect 설치 파일

ciscovpn-anyconnect-win-3.1.00495.msi

Comment +0

> 유저생성

create user '아이디'@'%' identified by '패스워드';

> 권한부여

grant all privileges on 데이터베이스.* to 아이디@'%';


'MariaDB' 카테고리의 다른 글

user 생성 및 권한 부여  (0) 2017.09.05
MariaDB Dump  (0) 2017.09.01
MariaDB 설치하기  (0) 2017.09.01

Comment +0

> ASM 디스크 조회

select 
  GROUP_NUMBER DG#, 
  name, 
  ALLOCATION_UNIT_SIZE AU_SZ, 
  STATE,
  TYPE, 
  TOTAL_MB, 
  FREE_MB,
  ROUND((NVL(FREE_MB, 0) / TOTAL_MB) * 100,2) AS FREE_RATE,
  OFFLINE_DISKS 
from v$asm_diskgroup;


'Oracle' 카테고리의 다른 글

오라클 RAC 서비스 상태 확인  (0) 2018.05.24
오라클 asm disk 조회  (0) 2017.09.04
테이블스페이스 조회  (0) 2017.09.01
오라클에 트리거 설정하기  (0) 2013.12.01

Comment +0

MariaDB Dump

MariaDB2017.09.01 16:12

> MariaDB Dump 배치파일 만들기

SET DATETIME=%DATE:~10,4%-%DATE:~4,2%-%DATE:~7,2%
"C:\Program Files\MariaDB 10.2\bin\mysqldump.exe" -u아이디 -p패스워드 데이터베이스 
> D:\DBBackup\backup_efws_%DATETIME%.bak

> 위에서 생성된 배치 파일을 Windows 스케쥴러에 추가합니다.

'MariaDB' 카테고리의 다른 글

user 생성 및 권한 부여  (0) 2017.09.05
MariaDB Dump  (0) 2017.09.01
MariaDB 설치하기  (0) 2017.09.01

Comment +0