같은 삽질을 두 번 다시 반복하지 않기 위한 셋팅 로그.

기본적인 설정 방법은 공식 매뉴얼에 잘 나와있다. --install, --remove 등의 서비스 설치 삭제 관련 플래그를 사용하면 된다.

헌데 나는 오늘 설치해보니 아래 오류가 계속 나면서 시간을 꽤나 잡아먹었는데, 서비스로 install을 끝내고 시작하려고 하면

C:\>net start MongoDB
시스템 오류 2이(가) 생겼습니다.
지정된 파일을 찾을 수 없습니다.
C:\>

이게 계속 뜬다. 그래서 이 오류 메세지로 구글링을 좀 해보면 MongoDB 이슈트래커에 관련된 항목이 나오는데, 이 문제는 2.1.0 버전에 해결되고 close된 이슈. 오늘 내가 사용한 버전은 2.2.3 버전이니 해당사항이 없는 이야기다. 그래서 서비스 설정된 레지스트리를 직접 찾아가보기로 하고 RegEdit를 열어 아래 주소로 이동.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\MongoDB

아… mongod.exe의 경로에 한글이 들어가니까 깨지는구나. 서비스로 뭔가 등록해보는게 오랜만이라 깜박했다. (ImagePath 항목에서 실행파일의 full path를 확인할 수 있다.)


여기부터는 실제 셋팅 경로와 config 파일들.

D:\에 DB 폴더를 생성하고 아래와 같이 구성한다.

image

bin 폴더에는 mongodb.org에서 다운받은 최신 버전의 윈도우용 바이너리들을 넣고, mongodb.cfg는 아래와 같이 구성.

   1: dbpath = D:\DB\Data\
   2: logpath = D:\DB\Log\Logs.log
   3: logappend = true
   4: rest = true
   5: directoryperdb = true
   6:  

path 환경변수에 D:\DB\bin 폴더를 넣어준다. 인터프리터 방식 클라이언트 mongo.exe를 바로 사용할 수 있어 편하다.

  • 서버 구동 테스트 :
    D:\DB\bin>mongod --config D:\DB\mongodb.cfg
  • 서비스모드로 mongod 설치:
    D:\DB\bin>mongod --config D:\DB\mongodb.cfg --install
   1:  
   2: D:\DB\bin>mongod --config D:\DB\mongodb.cfg --install
   3: all output going to: D:\DB\Log\Logs.log
   4:  
   5: D:\DB\bin>

로그를 열었을 때 별다른 에러 메세지가 없다면 net start MongoDB로 서비스를 시작한다.

서비스 구동상태를 확인하려면 sc qeury MongoDB

   1:  
   2: D:\DB\bin>sc query MongoDB
   3:  
   4: SERVICE_NAME: MongoDB
   5:         종류               : 10  WIN32_OWN_PROCESS
   6:         상태               : 4  RUNNING
   7:                                 (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
   8:         WIN32_EXIT_CODE    : 0  (0x0)
   9:         SERVICE_EXIT_CODE  : 0  (0x0)
  10:         검사점             : 0x0
  11:         WAIT_HINT          : 0x0
  12:  
  13: D:\DB\bin>

이제 데이터를 막 집어넣으면 됨 :)

  • cfg에서 bind_ip = 127.0.0.1항목을 사용하면 로컬에서만 접속하도록 띄울 수 있다.
  • 서버 구동 후 http://localhost:28017 을 브라우저로 열면 관리 정보를 확인할 수 있다.
Posted by leafbird 트랙백 0 : 댓글 1

댓글을 달아 주세요

  1. addr | edit/del | reply Favicon of https://devnote.tistory.com BlogIcon leafbird 2013.04.23 21:00 신고

    오늘 맥북에서도 homebrew로 mongodb를 설치.
    아직 맥이 익숙치 않아 초기 설정한 내용만 간단 정리 :
    1. 기본적으로 설정 파일은 /usr/local/etc/mongod.conf에 위치. 추가하고 싶은 옵션은 이곳에 넣는다.
    2. brew에서 빌드 및 설치가 끝나고 나오는 안내 문구를 따라 데몬으로 설정.
    ==> Caveats
    To have launchd start mongodb at login:
    ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents
    Then to load mongodb now:
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
    Or, if you don't want/need launchctl, you can just run:
    mongod


Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요

Mongo DB Tutorial

2011. 4. 5. 15:37 from 프로그래밍 팁/DB

beige

출처 : http://try.mongodb.org/

mongodb의 공식 사이트인 http://www.mongodb.org 에도 튜토리얼 문서가 있지만 이게 더 내용이 간편하다.
간단하게 나중에 다시 볼 필요성이 있을 듯한데, 원본 페이지는 인터프리터 형식을 따라한 모양을 하고 있어서 매 단계마다 프롬프트에 next라고 입력해야 볼 수 있게 되어있다. 그래서 한 번에 긁어서 붙여 두었음.

이것 먼저 보고 공식 사이트 있는 것 보면 될 듯.  (공식 사이트 튜토리얼 : http://www.mongodb.org/display/DOCS/Tutorial )

간만에 신기한 장난감을 만났군 ㅎ



This is a self-guided tutorial on MongoDB and the MongoDB shell.
The tutorial is simple, more or less a few basic commands to try.
To go directly to any part tutorial, enter one of the commands t0, t1, t2...t10
Otherwise, use 'next' and 'back'. Start by typing 'next' and pressing enter.



1. JavaScript Shell
The first thing to notice is that the MongoDB shell is JavaScript-based.
So you can do things like:
  a = 5;
  a * 10;
  for(i=0; i<10; i++) { print('hello'); };
Try a few JS commands; when you're ready to move on, enter 'next'



2. Documents
MongoDB is a document database. This means that we store data as documents,
which are similar to JavaScript objects. Here below are a few sample JS objects:
  var a = {age: 25};
  var n = {name: 'Ed', languages: ['c', 'ruby', 'js']};
  var student = {name: 'Jim', scores: [75, 99, 87.2]};
Create some documents, then enter 'next'



3. Saving
Here's how you save a document to MongoDB:
  db.scores.save({a: 99});


This says, "save the document '{a: 99}' to the 'scores' collection."
Go ahead and try it. Then, to see if the document was saved, try
  db.scores.find();
Once you've tried this, type 'next'.



4. Saving and Querying
Try adding some documents to the scores collection:
  for(i=0; i<10; i++) { db.scores.save({a: i, exam: 5}) };


Try that, then enter
  db.scores.find();
to see if the save succeeded. Since the shell only displays 10 results at time,
you'll need to enter the 'it' command to iterate over the rest.

(enter 'next' when you're ready)



5. Basic Queries
You've already tried a few queries, but let's make them more specific.
How about finding all documents where a == 2:
  db.scores.find({a: 2});

Or what about documents where a > 15?
  db.scores.find({a: {'$gt': 15}});



6. Query Operators
Query Operators:
$gt is one of many special query operators. Here are few others:
  $lt  - '<',   $lte - '<=',
  $gte - '>=',  $ne  - '!='
  $in - 'is in array',  $nin - '! in array'


db.scores.find({a: {'$in': [2, 3, 4]}});
db.scores.find({a: {'$gte': 2, '$lte': 4}});
Try creating some queries, then type 'next.'



7. Updates
Now create a couple documents like these for updating:
  db.users.save({name: 'Johnny', languages: ['ruby', 'c']});
  db.users.save({name: 'Sue', languages: ['scala', 'lisp']});
Make sure they were saved by called db.users.find()
Update the first document like so:
  db.users.update({name: 'Johnny'}, {name: 'Cash', languages: ['english']});



8. Update Operators
The previous update replaced the entire document, but MongoDB also
supports partial updates to documents. For example, you can set a value:
  db.users.update({name: 'Cash'}, {'$set': {'age': 50} });
You can also push and pull items from arrays:
  db.users.update({name: 'Sue'}, {'$pull': {'languages': 'scala'} });
  db.users.update({name: 'Sue'}, {'$push': {'languages': 'ruby'} });
Give these a try, check the results, and then enter 'next'.



9. Deleting data
To delete matching documents only, add a query selector to the remove method:
  db.users.remove({name: 'Sue'});
To delete everything from a collection:
  db.scores.remove();



10. Now go download it!
There's a lot more to MongoDB than what's presented in this tutorial.
Best thing is to go to the downloads page or to mongodb.org to check out the docs.
(You can also keep fiddling around here, but you'll be a bit limited.)

Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요

이번에 회사에서 ODBC를 이용한 DB 연결 인터페이스를 다시 작업했다.
요번에 DB처리를 다시 손대면서 좀 더 확신하게 된 사실이 있는데,
사실 대부분의 게임 개발 프로젝트들은 DB와 통신하는 처리에 그다지 신경을 많이 안쓴다는 점이다.
그냥 DB에 값 잘 쓰고, DB에서 값 잘 받아오면 그정도에서 처리 완료라는 뜻.

2000년 초반에는 업계 전반적으로 볼 때 stored procedure도 사용 안하고, SQL Injection에도 제대로 대응하지 못하던 개발팀들도 많았다. (GPG Study 포럼 게시판 등에 올라오는 글을 보고 미루어 보건대)

지금은 그정도는 아니더라도, 예를 들면 stored procedure의 output parameter 기능을 활용한다던가,  프로시저 자체 반환형(주로 int 형의)을 얻어낸다던가 하는 인터페이스들은 아마 거의 없을거라는 소리.
이런 애들은 모두 다 SELECT 쿼리로 대체할 수 있기 때문에, 대부분의 자체구현 코드들은 SELECT 결과셋을 얻어오는 처리만 구현하고 거기서 스톱이라는 말이다.
적어도 내가 여태껏 보아왔던 프로젝트의 DB 구현 클래스에는 이런 사항까지 디테일하게 처리한 코드가 전무했다.

다들 프로시저 모양이 대부분 요런 식일거다.
CREATE PROCEDURE [dbo].[up_xxxxxxx]
    @param1 int,
    @param2 int,
    ...
AS

 -- 프로시저 실제 작업 처리

  IF @@ERROR <> 0
  BEGIN
    SELECT -1 -- 에러값을 반환형으로 처리하지 못하고 SELECT를 이용해 새로운 결과셋으로 생성.
    RETURN -- 여기에서 return -1 하면 되지만 대부분 귀찮아서 안쓰는 듯.
  END -- 때문에 BEGIN ~ END 블럭을 생략할 수도 없다. 리턴문 하나만 있다면 생략해도 되는데 말이지.

SELECT 0 -- 성공적인 경우의 리턴.

뭐 아무튼... 이번에도 기존 코드의 유지보수를 맡으면서 개선을 좀 했는데
이번에는 반환형 사용에 대한 이야기는 아니고...
예전에 한 번도 사용해보지 않았던 api들을 처음으로 몇 개 이용하게 되어서 정리해 두고자 한다.

메모리 DB를 사용하는 경우 처럼 서버 아키텍쳐 안에서 DB 호출을 일괄적으로 처리하는 공통의 루틴을 만들고, 프로시저 이름과 인자 리스트를 받아서 처리하는 방식이라면 아래 api들을 사용해야 한다. 

SQLNumResultCols ( http://msdn.microsoft.com/en-us/library/ms715393(v=VS.85).aspx )
 - 쿼리를 수행 후 Fetch 해야 할 데이터가 있는지 확인하기 위해, 컬럼의 수를 얻어낸다.

Update, Insert, Delete 쿼리의 경우는 위의 값이 0으로, 반환되는 데이터가 없음을 알 수 있다. general하게 처리하는 경우 쿼리 실행 후 무조건 FETCH를 걸면 커서 상태오류(Invalid Cursor State)에 빠질 수 있다. 이럴 때 SQLNumResultCols 함수를 이용해서 데이터 존재여부를 알아낸다.

컬럼의 개수를 알아낸 다음에는, 각 컬럼의 타입이 무엇인지, 컬럼에 붙여진 이름은 무엇인지 조회할 필요가 있다. 이럴 때는 아래 함수를 이용.

SQLDescribeCol ( http://msdn.microsoft.com/en-us/library/ms716289(VS.85).aspx )
 - 결과셋(resutl set)의 각 컬럼에 대한 세부정보를 조회한다.

이러면 DB의 데이터를 얻어내기 위해 바인딩 해야 할 컬럼의 정보를 조회할 수 있다.

그런데, SP처럼 batch 구문으로 엮여서 여러개의 쿼리가 한 번에 처리되는 경우, 일괄처리 내에서 update, insert, delete, select가 다양하게 섞여서 호출될 수 있다. 이럴 때 SQLNumResultCols 함수를 호출하면 sp 내에서 가장 처음에 실행된 쿼리에 대한 컬럼의 값을 가져올 뿐이다.

그럴 땐 아래의 함수를 이용한다.

SQLMoreResults ( http://msdn.microsoft.com/en-us/library/ms714673(VS.85).aspx )
 - 결과셋(result set)이 여러 개 존재하는 경우, 다음 결과셋으로 cursor를 옮긴다.

이 함수를 이용해 SQL_NO_DATA가 나올 때 까지 루프를 돌아줘야 update / insert / delete 뒤에 호출되는 SELECT의 결과셋에 접근할 수가 있고, 또 유효한 결과셋을 여러 개 반환하는 batch 실행 구문에 대해서도 문제없이 모든 데이터를 얻어낼 수가 있다.

ODBC API에 대한 지식이라고 해봐야, 예전 김상형씨의 API 책에서 소개된 정도가 거의 전부이기 때문에... 이번에 새로 알게 된 함수들 이름이랑 간략한 소개, 링크 정도만이라도 정리해 둔다. 회사 소스코드를 백업할 수는 없으니 이렇게 작업사항 기록이라도 해두어야지 :)

그리고, 예전에 검색할 땐 ODBC api들 설명자료가 많이 부실하다고 느꼈는데, 그사이에 마소가 MSDN 리팩토링(?)을 좀 한듯?
요번에 작업할 때는 자료들이 많아서 예전보다 수월하게 작업할 수 있었다. VC++이 이러니 저러니 말은 많아도... MSDN 하나는 과연 짱인듯 +_+)b
TAG C++, ODBC
Posted by leafbird 트랙백 0 : 댓글 2

댓글을 달아 주세요

  1. addr | edit/del | reply Favicon of http://twitter.com/jun0683 BlogIcon 홍구 2012.02.07 18:05

    오픈소스로 라이브러리 만들어주세요ㅋㅋㅋㅋㅋㅋ

    • addr | edit/del Favicon of https://devnote.tistory.com BlogIcon leafbird 2012.02.08 20:25 신고

      앗 홍구님이다 +_+
      오픈해봐야 다운받을 사람 뭐 얼마나 있으려고요 ㅎㅎ


출처 : http://han1000jae.blog.me/80118541698


사정상 SQL Server를 몇 번 깔다보니

처음에 골치 아프던 원격 접속 허용 하는 부분도 익숙해졌다.

그래도 까먹었을 때를 대비해서 정리를 해보고자 한다.

 

기본적으로 Express 버전은 기본적으로 원격연결이 제한이 되어있다.

이것을 적절한 설정만 해주면 외부에서 DB를 쓸 수가 있게 된다.

 

절차

1. 설치시에 sa의 암호를 설정하여 설치한다. 이 때 윈도우와 SQL 혼합 인증을 하도록 한다.

2. 설치가 마치면 시작->MS SQL Server 2008->구성 도구의 구성 관리자를 실행한다.

3. 구성관리자 아래쪽에 있는 SQL Server 네트워크 구성을 선택한다.

4. SQLEXPRESS에 대한 프로토콜을 선택한다.

5. 거기서 TCP/IP와 명명된 파이프 두 가지를 사용으로 변경한다.

6. TCP/IP의 등록정보를 열어 IP 주소 탭의 아래쪽에 있는 IP ALL에서 TCP 포트를 1433으로 지정해 준다.

7. SQL Server 서비스 및 browser 서비서를 실행시 자동으로 바꾸고 재시작 한다.

8. 시작 + R -> firewall.cpl 을 실행 시켜 방화벽 설정으로 들어간다.

9. 방화벽에 예외 허용이 되어 있는지 확인을 하고 예외에서 다음의 설정을 해준다.

   예외 포트 등록 : TCP 1433, UDP 1434

   예외 프로그램 등록 : SQLServr.exe (경로는 대략 SQL Server 2008/binn)

                                SQLBrowser.exe (대락적인 경로는 SQL Server 2008/90/Shared)

10. management studio를 실행하여 왼쪽 트리뷰의 서버에서 우클릭하여 설정에 들어간다.

11. 연결 탭에 외부 원격 접속 허용 부분을 체크한다.


위의 단계중 환경에 따라 불필요한 부분이 있을수도 있지만,

가능한 거의 모든 방법을 적은 것이라 위처럼 해도 안되면

방화벽 포트 예외 뿐만 아니라 Gateway단 에서 포트포워딩을 해줘야 한다.

 

Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요

Sql study 20101113 유혜원
View more presentations from 혜원 유.
TAG db, Slide, SQL, Study
Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요

출처 : http://guisin.net/58

① sp_lock
프로시저를 실행하여 mode가 x 인 녀석을 확인

② dbcc inputbuffer(spid)
클라이언트에서 MSSQL로 보낸 최종 명령문 표시, 위의 1번에서 X인 녀석의 spid를 입력하면 해당 테이블이 출력된다.

③ kill spid
문제가 되는 spid를 kill 합니다.

Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요

http://www.sqler.com/bColumn/271895

트위터 하다가 찾은 링크입니다.

sqler.com 이 사이트 요즘 활동이 굉장히 활발합니다.

한동안 정체된 느낌이어서 알고는 있었지만 별로 읽어보지는 않았는데...

요즘 정기적인 오프라인 세미나도 연이어 하고있고 사이트도 개편하고, 글도 많이 올라오네요.

저 글이 있는 'SQL 사용자 Tip & 강좌' 게시판이 가장 실용적이고 피부에 와닿는 글들이 많습니다.

사이트도 즐겨찾기 하시고 아울러 sqler 운영자님인 한국 MS 김대우 대리님 트위터도 follow 하세요 ~

@uxkorea 입니다 :)

Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요

101102 endofdb select.1_rdbms
View more presentations from 성기 최.

TAG db, DBMS, SQL, Study
Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요

  • 시스템 DSN 사용할 때 : DSN=dsn이름;UID=아이디;PWD=비번
  • 파일 DSN 사용할 때 : (나중에 필요하면 찾지 뭐...)
  • Connection string만 이용할 때 : DRIVER=SQL Server;Network=DBMSSOCN;APP=Microsoft Data Access Components;SERVER=서버이름;DATABASE=데이터베이스이름;UID=아이디;PWD=비번
  • 엑셀파일에 연결할 때 : DRIVER={Driver do Microsoft Excel(*.xls)};DSN='';READONLY=FALSE;DBQ=파일명

Note : 윈도우 계정인증 방식을 이용할 때에는 UID, PWD 항목을 생략해주기만 하면 끝.

ODBC를 사용하는 경우 ActiveX Data Objects(ADO) 연결 문자열에서 "UID" 및 "PWD" 매개 변수를 생략하고 SQLOLEDB 공급자를 사용하는 경우에는 "User ID" 및 "Password" 매개 변수를 생략합니다.

from : http://support.microsoft.com/kb/247931

이런 것도 다시 필요하게 될 때가 있구나... @.@....
앞으로는 오래된 예전 팁들이라도 모두 정리닷!
Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요