반응형

ㅈㅈ 데이터 날려먹음

보통 개발자들은 DB까지 다룬다.
전문적인 DBA가 아니다 보니, 바쁘게 개발하면서 실수로 데이터를 날려먹거나
UPDATE를 잘못쳐서 잘못 변경되는 일이 많다.
개발DB에 붙여서 쿼리실행한줄 알았더니, 알고보니깐 운영DB던가...

다른 큰 기업들은 개발자들과 DBA가 정확하게 나뉘어서 
개발자들이 DB까진 컨트롤하진 않지만, 그게 아닌 사람들은 DB까지 많이 다룬다.
(지식만 있어서는 안되고, 실제 쿼리작성 및 실행함.  단, 모든 중소기업이 다 그렇진 않음)

어찌됐든, 실수로 UPDATE나 DELETE해버린 내역을 복구하기 위한 방법이다.
(오라클에 한함, 다른DBMS는 모르겠음)

 

먼저 테이블 명이 SAMPLE_TABLE이라는게 있다고 하자.
여기서 내가 WHERE조건이 ABC라는 키값의 값을 실수로 DELETE했다고 치자, 그 다음에 아래 쿼리를 조회하면?

SELECT  *  
FROM SAMPLE_TABLE
WHERE  = 'ABC'

당연히 위 쿼리의 결과값은 당연히 아무것도 나오지 않을것이다.

하지만, FROM 절의 테이블명 뒤에 아래 구문을 붙여준다면?

AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE)

(▼붙여서 실행)

SELECT  *  
FROM SAMPLE_TABLE AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE)
WHERE  = 'ABC'

내가 삭제하기 전의 값이 추출된다.(10분 이전의 데이터) 물론 10분만 되는것은 아니고 그 이상 가능하다. 
단위는 SECOND, MINUTE, HOUR, DAY로 바꿔 쓸 수 있다.

복구를 하려면 , 아래쿼리 처럼 하면 되겠다.

INSERT INTO SAMPLE_TABLE 
SELECT  *  
FROM SAMPLE_TABLE  AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE)  
WHERE ID = 'ABC'​

*애스터리스크를 사용한건 같은테이블에 순서대로 변경없이 모든컬럼에 넣기 위함이다.


컬럼별로 값을 다르게 하거나, 지정하려면 컬럼명을 기재해야한다. 다른테이블에 넣을때도 마찬가지다.
다른 테이블에 넣을땐, INSERT INTO 다른테이블명 .... 을 써서 INSERT한다.

실수로 날려먹었다고 당황하지말자. 

반응형
반응형

코딩월드뉴스 사이트 배너입니다. 추천하려고 퍼왔어요

벌써 8년차 개발자가 된 이 시점.

신기술들은 끊임없이 나오고 업그레이드 하고 있으며, 공부하고 배워야 할것도 많고 알아야 할 건 너무너무나 많다.

가끔은... 나 개발자 왜했지? 라는 후회도 들었....

 

아무튼 세상 돌아가는 소식을 놓치지 않고 싶다면 뉴스를 보거나, 인스타그램, 페이스북을 접하면서 

요즘 트렌드에 대해 간접적이나마 익히는데, 개발에 관련되서는 마땅히 접할수 있는 곳을 항상 찾지 못했었다.

유명 개발자 커뮤니티인 오키넷에서 종종 접하긴 했지만, 뭔가 개발자를 위한..국내외 코딩에 관련된 뉴스는 없을까?

하다가 찾은 사이트가 있다. 

"코딩월드뉴스"

 

coding | 코딩월드뉴스

글로벌 코딩 전문미디어, Tech, 프로그래밍, 아카데미, 4차산업혁명

www.codingworldnews.com

물론.. 당연히 뭐 안드로이드나 자바나 스프링이나 이런것들에 대한 업데이트 내역, 이슈사항들을 볼수 있는곳은 아니다.

그런것들을 보려면 당연히 해당 언어 사이트로 들어가봐야 하는것이고.

위에 링크 걸어둔 코딩월드뉴스는 개발자로써 알고있으면 굉장히 플러스되는 상식,지식들이 있다.

국내외 IT관련하여 돌아가는 소식들을 알아두려면 위 사이트를 추천한다.

 

뭐..예를들어 우리가 프로그램 처음 배울때 무조건 찍는 국룰의 "Hello World".

이 녀석은 어떤 의미를 담고 있는건지, 언제 사용하게 된건지....이런거?ㅋㅋ

반응형
반응형

이번 스터디 부터는 내용이 쫌 길다.

듣고있는 강의의 시간이 점점 길어지면서 그냥 바로 Flutter로 넘어가고 싶지만...

아무리 경력개발자여도 기초는 무시하면 안되는 법....

이번 포스팅은 선언자에 관한 내용.

정해진 값이 명확하지 않을때 사용하여 최초 할당된 값에 따라 변화하는 var타입과

단어 그 자체로 변동성이 있는 dynamic에 대해서다.

자세한 건 아래 코드블럭을 참고하고, 아래 dart 구문을 돌리기 위한 준비물인 웹컴파일러는 

첫번째 포스팅을 참조바람 => Dart언어공부- 01.HelloWorld

 

//06.var, dynamic 타입
//언제나 그렇듯 자바의 psvm처럼 main부터 시작.
void main() {
  //기존처럼 var로 선언하여 문자열 할당.
  var name = '임의값';
  print(name);
  
  //이번에는 var로 선언하여 숫자값을 할당
  var number = 2;
  print(number);
  
  
  //문자열로 사용하겠다고 선언 후, 숫자값을 할당한다면 당연히 불가능하다.
  //String number2 = 2;
  
  //var선언자는 내가 할당한 값에 의해 타입이 정해진다.
  
  //위에 var로 선언 후, 다시 문자열을 재할당 해보자.
  name = '임의값 변동';
  //문제없이 변경된 값으로 추출된다.
  print(name);
  
  //이번에는 숫자값을 넣어보자.
  //해당변수를 처음 선언 후 할당된 값은 문자열.
  //숫자값을 할당하려 하면 당연히 오류가 발생한다.
  //이미 name변수는 문자열 타입으로 지정되었기 때문.
  //name = 1;
  //print(name);
  
  
  
  //이번에는 dynamic이라는 선언자를 살펴보자.
  dynamic _name = '다이나믹값';
  //var선언자를 사용했을때 처럼 문제없이 출력된다.
  print(_name);
  
  //var타입에서는 아래처럼 숫자를 넣었을땐 오류가 발생했지만
  //dynamic선언자를 사용하면 오류없이 값의 종류를 바꿀수 있다.
  //dynamic은 이 처럼 할당된 변수값의 종류에 영향없이 타입이 변경되는 선언자라고 할수있다.
  _name = 1;
  print(_name);
    
  //그런데 var선언자의 한가지 특이한 점이 있다.
  //var를 사용하는데, 이번에는 변수를 할당하지 않고 선언해보자.
  var _named;
  
  _named = 'dynamic?';
  print(_named);
  
  //최초 선언시 값을 할당해주면, 타입이 지정되지만 (초기화하지 않는다고 표현함.)
  //그렇지 않고 이 후에 값을 지정해주면 마치 dynamic처럼 값의 타입이 변동된다.
  
  //위에 문자열을 넣었지만, 아래와 같이 숫자값을 넣는다면?
  _named = 1;
  //문제없이 기능이 동작한다.
  print(_named);
  
  //그러면, int나 String, double이런거 없이 그냥 편하게 var나 
  //아니면 더 간단하게 dynamic로 쓰면 되는거 아닌가? 하겠지만
  
  //프로그램을 만들다 보면 선언된 변수를 사용할 때, 숫자로 처리되어야 하는
  //변수값이 갑자기 문자열로 변경이 된다거나, 하는 일이 발생될수 있다.(오류발생)
  //또한 추후 내가 유지보수를 하거나 다른사람이 봤을때, 용도의 명확성을 알려주기 위해서도
  //확실한 선언자를 사용하는것이 좋다.
  //물론 내 생각이기도 한데, 대부분의 회사가 그렇게함.
  
}

 

자 그럼 결과물은?

임의값
2
임의값 변동
다이나믹값
1
dynamic?
1

다음 공부는 기다리고 기다리던 자료구조다.

처음엔 다른언어 기초부터 다시 배울생각에, 막막하기도 하고 지루할거같기도 했는데

막상해보니 재밌다.

 

한가지 진짜 확실한 건, 언어 한가지만 제대로 해두면 다른 언어 배우는 속도는 2배인거같다.

(프로그래밍 언어에 한함..)

반응형
반응형

지난 포스팅 "Dart언어공부-04.자료형(문자)"에 이은 이번에는 참과 거짓을 표현하는 boolean 에 대한 공부.

스타트.

여태 공부했던 숫자형 int, double과 문자형 String 외에

참과 거짓을 표현하는 boolean타입의 자료형이 있다.

사용은 true와 false두가지를 사용한다.

자세한건 아래 코드블럭 참고.

※준비물(웹컴파일러)은 Dart언어공부- 01.HelloWorld 포스팅에 가보면 써있음.

//05.자료형 Boolean true or false
void main() {
  //글자의 경우 따옴표 안에 처리하지만, boolean 참 거짓 값은 아래와 같이 할당한다.
  //대문자도 안된다. 소문자로 처리한다.
  bool isTrue = true;
  bool isFalse = false;
  
  print(isTrue);
  print(isFalse);
}

 

결과물은?

true
false

 

지금 당장은 변수에 담아서 어디에 쓰지? 라는 생각이 들 수 있다.

주로 if문 같은 조건문에 사용하게 되는데, 조건문은 다다~음 공부에 포함될 예정.

 

 

반응형

+ Recent posts