기본 콘텐츠로 건너뛰기

스테이징, 본 서버와 소스 관리를 일원 화! Azure + Github !

1999년도 부터 서버쪽 일을 계속 하면서 느꼈는데, github등의 공동 작업 서비스들이 발전하면서 엄청난 진화를 했는데, 현재까지도 기존의 방식을 사용하고 있는 기업이 너무 많습니다. 게다가 클라우드면 다되는줄 알고 전부 클라우드에 올렸다가 막대한 비용을 내고 있는 기업들도 있지요.. 규모에 따라 여러가지 어렌지는 필요하지만, 제가 사용하는 방법을 공개합니다. 1. Github계정을 생성, 소스 마스터는 유료 계정으로 설정(월 $7). * 소스 마스터가 유료이면 Contributor를 무제한으로 늘릴 수 있으나 무료 계정이면 2 명까지 밖에 못늘림(언젠가 부터 바뀐 정책). 게다가 워크 그룹이나 오거나이저를 생성하면 계정당 비용을 내야 함. 2. Azure에서 F1(Free) 티어로 App Service등록 * giipasp : 서비스용 App service * giipaspstg01 : 스테이징 1 * giipaspdev01 : 개발 1 3. DB서버 역시 클라우드로 만들어도 되고, 자체 서버에 DB를 설치해도 됨. 이번엔 Azure의 sql cloud 를 사용함. * giipdb DB생성. (10DAU로 설정하면 고정 SQL라이선스를 내지 않아도 됨) * 참고로 S1등의 스탠다드 DB로 만들면 사용을 안해도 1서버당 25만원 정도의 라이선스 비용이 별도로 과금 됨. (처음에 몰랐다가 지불을.....) 4. Github에서 Repository를 Dev, Real 두 개를 생성 * Real은 위의 유료 계정이 아닌 다른 관리 계정으로 만듬.   유료 계정은 개발 및 기타 여러가지 Repository를 잔뜩 만들기 때문에 나중에 deploy관리시 아주 많이 어려움. Deploy는 Contributor가 필요 없으니 차라리 새로 생성해서 Deploy전용 repository만 관리. * Dev : https://github.com/LowyShin/giipasp.git * Stg : https://github.com/

UiPath로 ANSI파일 실행.. 결국 포기 - giip RPA

UiPath를 이용한 giipAgentUIP 를 받아서 실행. wsf를 호출하는건 문제가 없는데.. 디렉토리명이 일본어로 되어 있는 wsf를 호출하니 문제가!! wsf를 실행하는 것도 UiPath는 모르는 확장자라고 내뱉어서 우선 wsf파일로 저장후 wsf파일을 실행하는 batch파일을 저장, Start Process Activity를 이용하여 CMD.exe 를 실행하여 batch파일을 실행하도록 함. 이렇게 했으나, 결국 자동으로 UTF-8로 저장된 wsf파일은 열어보면 잘 보이지만 더블클릭하면 일본어가 깨짐. 이걸 ANSI로 저장하여 더블클릭해서 실행하면 정상 실행이 되었다. 그래서 Write Text File Activity에서 Endoding을 "shift_jis"로 저장하였더니 열어보면 ANSI로 되어 있다. 더블클릭하면 정상 실행, 하지만 UiPath상에서는 에러가.. 아직 해볼 법한 내용들은 몇 개 더 있지만, 소스에서 shift_jis를 박을 수 없고, 그렇다고 giipAgent에서 각각 스크립트마다 언어코드를 가져오도록 사양 변경은 쉽지 않은 상태. 기본은 UTF-8통신을 시키고 있다. UTF-8로만 할 수 있도록 모든 것을 맞추는 것이 나중에도 큰 불편함이 없으리라 생각해서 일단 언어 변환은 포기하고 우선 UiPath에서 일본어 디렉토리를 인식하여 처리하는 xaml파일을 만들어 invoke로 호출하는 것으로 대처함. UiPath : https://uipath.com giip로 Orchestrator없는 UiPath 자동화를! RPA를 생각한다면 다양한 툴은 많지만, 툴들의 장단점을 살려 의존을 줄인 giip에서 컨트롤을! Do not login your server any more! giip :: Free server management tool! https://giipasp.azurewebsites.net/

리눅스에서 특정 디렉토리의 일정 기간이 지난 파일을 다른 곳으로 이동 - Linux shell script

리눅스에서 로그성 데이터들이 쌓이는 곳들이 몇 곳이 있다. 그 중에서 일정 기간 지나면 자동으로 지워지지 않는 파일들이 있는데, 이를 매일 들어가서 지우는 것도 일이다. 삭제도 좋고, 데이터를 이동하는 것도 좋은데, 파일을 이동하는 스크립트로 만들어 봤다. mkdir -p /data1/expdata/partitions for   i   in   `find /oracle/expdata/partitions -mtime +4 -type f` ;  do  mv  $i  /data1/expdata/partitions;  done 이렇게 하면 4일이 지난 해당 디렉토리의 파일을 /data1/expdata/partitions 로 이동한다. 이걸 크론에 등록 하면 (crontab -l ; echo "1 0 * * * sh /data1/DBA/LowyWorks/arrange_oldfiles.sh")| crontab - 쉘에서 이걸 실행하면 자동으로 crontab에 등록 된다. 물론 등록 할 때의 로그인 계정으로 등록되니 crontab에 등록할 때 여기저기 계정으로 등록되지 않게 주의해서 등록하기 바란다. 위의 find 는 일반적인 find문을 그대로 쓸 수 있기 때문에 | grep -v .sh 처럼 이동하고 싶지 않은 파일들을 제외할 수도 있지만, 관리를 위해서는 로그성 데이터는 모두 한 곳으로 이동해 놓는 것을 추천한다. 더 많은 정보를 보고 싶다면, https://github.com/LowyShin/KB-KnowledgeBaseHome/wiki/Shell

오라클에서 테이블 생성 쿼리 작성 - ORACLE Management by SQL

Oracle의 관리 툴은 대부분 비용이 비싸서 가급적 무료툴로 관리를 한다. 그러다보면 기능들이 부족해서 SQL로 해결해야 하는 것들이 생기는데, 그 중에서 많이는 사용하지 않으나 있으면 관리하기 편한 하나가 바로 테이블이나 Procedure의 생성쿼리 이다. Oracle에서는 기본으로 제공해주는 쿼리이므로 주기적으로 select * from all_tables where owner = '<owner>' 로 테이블 명을 가져와서 아래 쿼리로 테이블 생성 쿼리를 업데이트 해주면 변경이력 관리가 필요없게 된다. select dbms_metadata . get_ddl ( ' TABLE ' , ' TableName ' , ' Owner ' ) from dual; select dbms_metadata . get_ddl ( ' Procedure ' , ' ProcedureName ' , ' Owner ' ) from dual; 추가로 Procedure작성쿼리도 추가함.. select * from all_objects 로 검색해서 Procedure나 Function도 가져오면 편할 듯.. Do not login your server any more! giip :: Free server management tool! https://giipasp.azurewebsites.net/

한국어, 일본어 대응 가능한 DBMS Query Tool - ORACLE MySQL SQL Server ODBC 지원

A5MK2라는 일본인이 만든 무료 툴이 있다. 그 동안은 Orange라는 국내 유료 소프트를 사용했는데, 너무 고가다 보니 회사에서는 대체 툴을 희망하였고, 이것저것 찾아보다보니 일본인 스탭에게서 추천을 받아 사용을 해보게 되었다. 공식 홈페이지 :  https://a5m2.mmatsubara.com/ 공식 홈페이지(개인 이지만..)에 들어가도 일본 특유의 이뿌지 않고 실용적이기만 한 페이지가 뜨고.. 다운로드 및 과거 버전 다운로드가 가능하다. 사용하면서 느낀 점으로 보아 Orange의 DBA툴(Orange의 메뉴명)은 보기가 좋은 장점이 있는데, 그 외의 기능들을 보면 A5MK2는 떨어지지 않는 훌륭한 툴이다. 그래도 Orange의 장점을 들어보자면 DBA에서 Tablespace기능이나 AWR추출 기능등은 보기도 편하고 클릭 한 번으로 쉽게 확인 및 처리가 가능하다. 하지만, 사이즈가 큰 경우 Processing... 이라고 표시되면서 몇 시간이고 사용을 못하게 되는 단점은 있다. 그 부분에서 본다면 그냥 필요한 부분을 모두 SQL로 보관하고 처리하면 A5MK2에서도 별로 문제 없이 사용할 수 있으므로 그 부분은 좋았다. A5MK2만의 장점을 들자면.. 접속가능한 DBMS가 많다! Oracle OCI 및 직접 접속 IBM DB2 Microsoft SQL Server Interbase/Firebird PostgreSQL MySQL Mariadb SQLite AccessDB ADO(OLE, ODBC) 지원이 안되는 것이 있다면 ODBC로 연결후에 접속을 해버리면 된다! 아쉽게도 최신 버전에는 강제 UTF Encoding이 걸려있어 과거 버전의 Encoding을 할 수 없는 커넥터로 연결하면 글자깨짐이 발생할 수가 있다. 처음부터 UTF8로 만들어진 경우는 전혀 문제 없으나 예전에는 ANSI로 해당 국가 전용으로 만든 케이스가 있다보니 이러한 소수의 케이스에는 과거 버전인 2.9

서버 정보들을 주기적으로 수집하기 - 무접속 서버 관리

서버 관리를 하다보면 주기적으로 또는 특정 상황마다 사소한 정보를 보기 위해 서버에 들어가서 확인을 해야하는 경우가 종종 발생한다. 요즘 대부분의 DevOps를 활용하면 이런 불편함이 해소되긴 하지만.. 중요한 것은 DevOps를 준비하기 위해 다시 공부가 필요하고, 설정이 필요하고 노가다가 필요해진다. 적은 숫자의 서버를 관리하는 입장에서는 그럴 필요가 전혀 없음에도 불구하고 해야 하는 상황이 발생한다. 때문에 서버 관리의 방법론은 규모나 상황, 서비스 특징 등등에 따라 무한대의 경우의 수를 가지게 된다. 여기서 서버의 정보를 가져오는 두 가지 팁을 소개하려 한다. 하나는 서버에서 보내는 방법. 또 하나는 내가 가져오는 방법. 어짜피 노가다 아니냐고? 나의 궁극의 빈둥을 실현하기 위해 이 방법보다 편할 수 없는 방법을 소개하려 한다. (블로그 글 조차 쓰기 귀찮아서 관리가 안되는...) 두 가지 모두 공통으로 필요한 것이 있다. 우선 github에 계정을 만들자.. (개발자라면 거의 가지고 있겠지만, 서버 관리자들은 안가지고 있는 케이스가 많으나 만들자!) 혹시 보안때문에 정보를 올릴 수 없다면 자체 서버에 gitlab을 설치해서 운영해도 똑같이 쓸 수 있다. 관리 서버가 수천대가 되면 그룹으로 관리하지 않으면 더욱 힘들어진다. 서비스나 용도 등에 맞추어 repository를 만든다. 이번에는 파일서버로 하겠다. A, B 두 대의 서버를 gpfs용으로 사용하기로 한다. gpfs가 뭐냐고? 내가 만든 용어다. 무시해라. (giip file system...) 1. 서버에서 보내는 방법. 서버에 github계정 설정을 해두면 로그인 정보 없이 명령을 날릴 수 있다. 우선 linux를 예로 들면.. root로 접속 후 echo " machine github.com " > ~/.netrc echo " login ai@netbako.com " >>

오라클 복구의 마지막... ORACLE RMAN

처음에 시작된 것은 NFS로 연결된 REDO LOG파일이 사라진 것인데.. 왜 REDO LOG를 NFS마운트에 올렸는지도 궁금하지만.. (아마 용량이 부족해서 이렇게 일시적으로 한 듯..) NFS는 끊어졌는데 그 원천 서버의 디스크가 날라가서 OS재설치하면서 REDO LOG파일이 사라졌다. 더 큰 문제는 REDO LOG 파일이 CURRENT로 지정된 데다가 파일이 하나밖에 설정되어 있지 않다. 이로서 불가능한 옵션은 ALTER DATABASE ADD LOGFILE MEMBER '/mnt/sdb1/redolog/redo05.log' TO GROUP 5; 기존 파일이 없댄다.. ALTER   DATABASE   DROP  LOGFILE GROUP  5 ; 파일이 없어서 삭제 안된단다.. ALTER   DATABASE  ADD LOGFILE GROUP  6 ; 신규로 그룹을 추가 했다.. 성공.. 이제 바꾸고 싶다.. alter  system  archive  log  current; 안된단다.. select  *  from  v$logfile; 이걸로 없어진 파일은 보이는데.. 이걸 빼고 다른걸로 바꿀 방법이 없다. ALTER DATABASE    RENAME FILE '/NFS/app/oracle/oradata/smartdb/redo05.log'            TO '/mnt/sdb1/redolog/redo05.log'; 이렇게 이름을 바꾸어 봤다. 이름은 바뀐다. 그래도 파일은 없으니.. 그럼 새로 만든 파일을 이름을 바꾸어 봤다. 읽기 에러가 뜬다. 그냥 복사해서 되는게 아닌가 보다. Recover를 해보려 했다. recover database until restore point before_drop; 리스토어 먼저 하랜다. restore database; 하루 종