오라클에서 시간을 기준으로 데이터 복구

Posted by 백창
2021. 9. 16. 21:54 개발/Oracle
반응형

#1

시스템을 실제 운용하는 상황에서는 가끔 언제 무슨 데이터를 확인 해달라는 요청이 많이 발생한다.

운영 시스템에선 DB백업을 모두 하고 있겠지만 데이터 하나하나 확인하고자 

백업 라이브러리를 뒤적거릴 시간이 없을 것이다.

이런 경우 유용하게 활용할 수 있는 timstamp 기능이 있다.

  * 이 기능은 미리 설정되어 있는 시간만큼만 조회가 가능함

 

 

사용법은 간단하다. 복구를 원하는 테이블에

as of timestamp(복구시간) 라는 명령어를 작성해주면 되는데

 

#2

정확한 복구 시점을 알 수 없을때는 

아래와 같은 방법으로 현재 시간으로부터 XX시간, XX분, XX초 전의 데이터를 확인 할 수 있다.

select * from sample_tabel as of timestamp(systimestamp - interval '1' hour)

interval '1' hour을 아래와 같이 바꾸면 다양한 방법으로 활용이 가능하다

o XX일 :  'XX' DAY

o XX시간 : 'XX' HOUR

o XX분 : 'XX' MINUTE

o XX초 : 'XX' SECOND

 

#3

정확한 복구 시점을 알고 있는 경우는 아래와 같이 정확히 복구시간을 작성해주는 것이 더욱 도움이 된다.

select * from sample_table as timestamp(to_date('20210101000000','YYYYMMDDHH24MISS'))

 

 

반응형

'개발 > Oracle' 카테고리의 다른 글

[oracle] DB Link  (0) 2016.04.07
[oracle] 날짜 + 번호 일련번호 생성하기  (0) 2015.12.13

[wxpython] 다중모니터 감지하기

Posted by 백창
2017. 6. 28. 15:17 개발/Python
반응형

#1


wxPython 은 GUI를 만들 수 있는 오픈소스 라이브러리이다.


GUI를 만드는건 만드는건데 가끔 보면 듀얼모니터, 다중모니터를 사용하면서 


모든 화면에 프로그램을 띄울 필요가 생길 것이다.


그걸 어떻게 감지하는지 퍼온 소스를 적어 놓겠다.


#2


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import wx
 
app = wx.App()
 
#To get the count of displays
num_displays = wx.Display.GetCount()
 
#Open a frame on each display
for display_num in range(num_displays):
    #Get a display object
    display = wx.Display(display_num)
 
    #To get a wx.Rect that gives the geometry of a display
    geometry = display.GetGeometry()
 
    #Create a frame on the display
    frame = wx.Frame(None,-1,"Display %d"%display_num,
    geometry.GetTopLeft(),geometry.GetSize())
 
    #Make the frame visible
    frame.Show()
 
app.MainLoop()
cs


모니터의 갯수를 저장해서 반복문을 돌며 각 화면마다 프레임을 실행해주는 소스가 되겠다.


#3


https://bytes.com/topic/python/answers/486021-multi-monitor-support

반응형

'개발 > Python' 카테고리의 다른 글

[Python] 웹페이지 변화 감지하기  (2) 2017.04.27

[방범 DIY] CCTV를 만들어보자 #2

Posted by 백창
2017. 5. 10. 13:37 리눅스/라즈베리파이
반응형

#1


졸업작품에서 라즈베리파이랑 파이캠을 분리했다 ㅎㅎ 안녕.. 내 졸작 ㅂㅇ


보낼건 빨리 보내고 

opencv를 설치해보자. 라고 이 글을 시작하려 했는데 단순한 촬영에만 쓰면 opencv설치는 필요가 없었다.(뻘짓 하루 했음)


#2


사진 촬영을 위한 스크립트를 작성하자.

얼굴을 인식하고 따라다니면서 촬영을 하고 지지고  볶고 할려면 opencv를 설치하자.

(cctv 장사해야만 쏟을수 있는 정성수준)


그게 아니라면 입맛대로 촬영 소스를 작성해보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
# by bcy 20170421
 
# var
YYYYMM=$(date +%Y%m)
DD=$(date +%d)
HHMMSS=$(date +%H_%M_%S)
PATH='/mnt/samba/ftp/caps/'
FILE_DIR=${YYYYMM}
FILE_NAME=${YYYYMM}${DD}'_'${HHMMSS}'.png'
 
# makde dir every month
if [ ! -d ${PATH}${FILE_DIR} ]; then
        /bin/mkdir ${PATH}${FILE_DIR}
fi
 
# capture
# U can change this
/usr/bin/raspistill -o ${PATH}${FILE_DIR}'/'${FILE_NAME}
 
# logging
echo '['${YYYYMM}${DD}' '${HHMMSS}'] finished' >> log/${YYYYMM}_excute.log
 
cs


1.기본변수 설정 (파일명, 파일위치 등)

2.년월별 폴더 확인 및 생성

3.raspistill 명령어를 활용해 사진 촬영 및 저장

4.로그 저장


#3


벌써 끝났네.

동영상 촬영도 똑같다.

위와 같은 소스로 촬영 부분 동작만 바꾸고, 바로 동영상을 재생해보려면 인코딩까지 동시에 진행하면 된다..

반응형

[방범 DIY] CCTV를 만들어보자 #1

Posted by 백창
2017. 5. 10. 13:21 리눅스/라즈베리파이
반응형

#1


자취생들에게는 많은 고민이 있다. 

혼자 살기 때문에 생기는 많은 고민들 중 하나를 덜어보도록 하자.

(cctv를 만들꺼라고 하니까 느그집에서 뭐 훔쳐갈게있냐고 다들 그러긴하더라.)


출근 후면 우리집은 빈집이 된다. 짧게는 10시간 길게는 12시간이상까지...

도둑이 들지 않았을까? 문 단속은 잘 했나? 에어컨같은걸 켜놓고 왔으면 어떡하지?

부동산 등이 연락도 없이 집에 방문하지는 않을까?


혼자사는 사람들이 많아져서 이런 고민들이 늘어서 그런가? 필요한게 딱 홈 IoT네..


#2


어떤 구성으로 할까..


  • 라즈베리파이
  • 파이캠
  • 저장소
  • 도어센서


당장 생각나는 준비물은 이정도다.


만들고자 하는건 cctv라기보다는 필요한 시점에 필요한 만큼만 촬영하겠다는게 1차 목표이다.


대략적인 시나리오는


------------------------------------------------------------------------------------------------------------

[기본설정]

  1. 방해금지 시간대 설정
  2. 촬영시간 설정 


[시나리오]

문열림 감지  방해금지 시간대 여부 확인  동영상촬영시작or사진촬영  저장소에 저장

------------------------------------------------------------------------------------------------------------


시나리오를 적고 나니까 졸업과제랑 시나리오가 일맥상통하네 ㅎㅎ..

생각의 발전이 없군..


요즘 도둑들은 지능적이어서 cctv같은게 설치되있으면 컴퓨터 본체도 훔쳐간다더라, 잘숨기던가.. 클라우드로 올리는걸 추천한다.


#3


그럼 준비물을 구하고 다음 글로 갑시다..


반응형

[Python] 웹페이지 변화 감지하기

Posted by 백창
2017. 4. 27. 16:48 개발/Python
반응형

# 1


음.. 파이썬을 시작하게된 이유였던가 ?


웹 페이지에 변화를 감지하기 위해서 파이썬을 처음으로 깔았다.


페이지 변화를 감지해서 뭐하냐 싶겠지만 의외로 용도가 많다.


공지사항에 새로운글(있던 글이 지워지거나 수정된 것도 감지되겠지만)을 체크하여 알림을 보낼 수 있고,

뭐 다른 용도도 많이 있다.


내가 처음 사용한 용도는 회사 홈페이지가 뻑나면 복구 스크립트를 돌리는데 사용했다.

뻑난지를 이 방법으로 확인한거지


# 원리


원리는 별거 없다. 


일정 주기마다 페이지를 긁어 해쉬값으로 저장해두고 기존에 저장된 해쉬값과 비교를 하는 것이다.


페이지가 조금만 달라져도 해쉬값은 크게 변하니 쉽게 감지할 수 있다.


# 소스


1. 페이지를 긁어서 해쉬값으로 변환하여 저장


음.. getList는 긁어오고 싶은 사이트들을 저장해둔 파일을 불러오는 소스라서 무시해도된다.

그냥 주소써서 긁어오면됨


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
32
33
34
35
36
37
# coding : utf-8
import requests
import hashlib
import time
import sys
import re
import getList
reload(sys)
sys.setdefaultencoding('utf-8')
 
# get check list
lines = getList.getList()
 
cnt = len(lines)
= 0
 
try :
 
    while i < cnt:
        chkList = re.split(r'[\s]',lines[i])
        i += 1
        with requests.Session() as c:
            URL = chkList[1]
 
            html = c.get(URL)
 
            m = hashlib.md5(html.text)
             now = time.localtime()
            file = open("PATH/md5_%s_%04d-%02d-%02d.log"%(chkList[0],now.tm_year, now.tm_mon, now.tm_mday),'a')
    
            print >> file, m.hexdigest()
            file.close()
 
    execfile("PATH/check.py",{})
except:
    print 'error'
 
cs



2. 페이지비교


offset에 따라 몇번째까지 비교할지 설정할 수 있고

2로 되어있으니 최근 2번 것과 비교하여 다르면 메시지를 보내도록 하였다.

(메시지는 텔레그램으로 보내면 편함)


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
32
33
34
35
36
37
38
39
40
#-*- coding: utf-8 -*-
import time
import re
import getList
import sendMsg
 
# get check List
lists = getList.getList()
lists_cnt = len(lists)
= 0
 
while i < lists_cnt:
    chkList = re.split(r'[\s]',lists[i])
    i += 1
    now = time.localtime()
 
    file = open("PATH/md5_%s_%04d-%02d-%02d.log"%(chkList[0], now.tm_year, now.tm_mon, now.tm_mday),'r')
    lines = file.readlines()
    file.close()
 
    flag = True
 
    cnt = len(lines)
 
    # set compare res
    offset = 2
    if cnt < offset:
        offset = cnt
 
    # compare hash value
    for j in range(cnt-offset, cnt):
        if lines[j] != lines[cnt-1]:
            flag = False
 
    # if unmatch
    if flag == False:
        # send msg
        for z in range(2len(chkList)):
            sendMsg.send_msg_to_telegram(chkList[z],'['+chkList[0]+'] 변화 감지 : \t'+chkList[1])
 
cs


# 마침


벌써 비슷한 방식으로 3개째 프로그램을 만들었다.

생각하기에 따라서 활용도가 많으니 잘 활용해봐야겠다.


반응형

'개발 > Python' 카테고리의 다른 글

[wxpython] 다중모니터 감지하기  (0) 2017.06.28

정규식을 이용해 숫자만 추출

Posted by 백창
2016. 6. 24. 10:09 개발/Java script
반응형

# 개요


 수업시간에는 정규식에 대해 깊이 생각해본적이 없었는데, 요즘 정말 활용분야가 다양하다는 걸 느끼고 있다.


Javascript에서 정규식을 이용하여 문자열에서 숫자만 추출해보도록 하자.



# 소스


1
2
3
4
5
function fn(str){
    var res;
    res = str.replace(/[^0-9]/g,"");
    return res;
}
cs


# 주절주절


 간단하게 해석해보자면 [^0-9] 즉, 숫자가 아닌 부분을 "" 공백으로 치환함으로써 숫자만 남기는 것.


 얼마나 편리한지 허허.

반응형

'개발 > Java script' 카테고리의 다른 글

배열 특정 값 지우기  (0) 2015.12.14
[d3] line chart 그리기  (0) 2015.03.31

[Flask] 외부소스 읽기

Posted by 백창
2016. 5. 31. 09:33 개발/Flask
반응형

# 개요


 Flask 개발 중 css와 js파일을 로드하기 위해 평소처럼 resource/js .. css 등의 디렉토리를 만들고 아래와 같이


<script type="text/javascript" src="./resource/js/jquery.js>


js 파일을 읽어왔다.


하지만 현실은.. js 파일을 찾을 수 없다는 에러메시지만 받을 수 있었다.


Flask에서 css나 js파일을 읽어 올 때 'url_for' 을 이용하여 지정하면 편리하게 읽어 올 수 있다.



# 사용법


서버동작이 구현되어 있는 run.py 파일을 기준으로 static 폴더를 생성하여 참조할 소스들을 static폴더에 넣는다.


run.py  - static         - js

                                 - css

             - templates


그리고 아래와 같이 사용하면 정상적으로 읽어 올 수 있게 된다.


 <link type="text/css" rel="stylesheet" href="{{url_for('static', filename='css/style.css')}}/>



# 비고


 o url_for 함수의 여러가지 유용한 사용법이 있는듯한데 일단 그건 나중에 알아봐야겠다..

 o Flask에서 {{ }}를 사용하면 파이썬의 함수나 변수를 사용할 수 있다.

반응형

'개발 > Flask' 카테고리의 다른 글

[Flask] 설치  (0) 2016.05.26

[Flask] 설치

Posted by 백창
2016. 5. 26. 16:15 개발/Flask
반응형

# 개요


 4월이 되며 든 생각이 스크립트 언어를 공부해야겠다는것이었다. 어떤 언어를 공부할까 고민하다가 함께 발전할 수 있는 Python 을 해보기로 하고 간단한 웹서버를 구축하기 위해 FLASK를 수동으로 설치해보았다.


# flask란?


 flask는 Python 용 micro Framework이다. 다른 라이브러리들에는 존재하는 기능들을 제공하지는 않지만 그런 기능들을 가질 수 있는 확장성은 제공하고 있다.

 간단하게 생각하면 내가 필요한것들을 가져다 쓰면되겠다.


# 설치

 

 pip 명령어를 사용하면 간단하게 설치 할 수 있지만, flask를 설치할 서버가 인터넷이 안되기 때문에 수동으로 설치하였다.


 먼저, 다음 URL에 접속하여 flask 소스를 다운받아서 설치해보자.



 소스를 받고 압축을 해제하면 여러 파일들이 있는데 그 중 setup.py라는 파일을 이용해서 수동으로 설치할 수 있다.


 # python setup.py install


 설치가 잘 되나요? 인터넷이 안되는 환경에서는 이 방법만으로는 설치가 어렵다.


 그렇다면 어떻게 해야할까?,,,


 Flask는 Werkzeug, jinja2 등 몇몇 패키지에 의존성을 가진다. 이 패키지들이 깔려있지않다면 flask를 설치할 수 가 없다.


 다음 URL에 접속하여 의존성을 가지는 패키지들을 다운받아 먼저 설치하자.





 Flask를 설치했던 방법과 동일한 방법을 사용하여 위 패키지들을 설치하고 다시한번 Flask를 설치하면 잘 될 것이다.



# 테스트


다음 코드를 작성하여 Flask가 잘 설치되었고 동작하는지 테스트 해보자.


1
2
3
4
5
6
7
8
9
from flask import Flask
app = Flask(__name__)
 
@app.route("/")
def hello():
    return "Hello World!"
 
if __name__ == "__main__":
    app.run()
cs


$ python hello.py


를 실행하면 로컬 환경에서 127.0.0.1:5000 을 통해 결과를 확인 할 수 있다.


같은 네트워크에 public IP로 주고 싶다면


app.run() 대신 app.run(host='0.0.0.0')을 입력해주면 된다.


# 출처


http://flask-docs-kr.readthedocs.io/ko/latest/quickstart.html

https://spoqa.github.io/2013/02/20/python-development-environment.html


반응형

'개발 > Flask' 카테고리의 다른 글

[Flask] 외부소스 읽기  (0) 2016.05.31

[oracle] DB Link

Posted by 백창
2016. 4. 7. 11:14 개발/Oracle
반응형

db link 설명


http://www.gurubee.net/lecture/1560

반응형

배열 특정 값 지우기

Posted by 백창
2015. 12. 14. 16:46 개발/Java script
반응형

# 개요


 Javascript 배열 내 원하는 value의 값을 삭제해보자.


기본적으로 제공하는 함수는 pop함수로 원하는 값을 제거하기에 불편함이 있다. 


다음 코드는 구글에서 배열 특정값을 제거하는 소스를 검색하면 자주 나오는 코드이다


# 소스


1
2
3
4
5
6
7
8
9
10
11
function removeA(arr) {
    var what, a = arguments, L = a.length, ax;
    while (L > && arr.length) {
        what = a[--L];
        while ((ax= arr.indexOf(what)) !== -1) {
            arr.splice(ax, 1);
        }
    }
    return arr;
}
    
cs


# 사용방법


removeA( 배열 , 지우고 싶은 값);


# 출처


---------stackoverflow

반응형

'개발 > Java script' 카테고리의 다른 글

정규식을 이용해 숫자만 추출  (2) 2016.06.24
[d3] line chart 그리기  (0) 2015.03.31