달력

112024  이전 다음

  • 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

멀티바이트 코드로 작업중 문제가 발생하여 유니코드로 바꾸면서 정리 합니다.  

앞으로 TCHAR 타입을 사용하는 습관을 들여야겠습니다. 

 

strcpy -> wcscpy -> _tcscpy (문자열을 복사) 

strncpy -> wcsncpy -> _tcsncpy ( 사이즈 만큼 복사) 

strlen -> wcslen -> _tcslen (문자열 길이 확인)  

strcat -> wcscat -> _tcscat (두 문자열 이어 붙이기) 

strncat -> wcsncat -> _tcsncat (사이즈 만큼 이어 붙이기) 

strcmp -> wcscmp -> _tcscmp (문자열 비교) (반환 값(-1, 0, 1)) 

strncmp -> wcsncmp -> _tcsncmp ( 사이즈 만큼 문자열 비교) 

stricmp -> wcsicmp -> _tcsicmp (대소문자를 구별하지 않고 문자열을 비교) 

strnicmp -> wcsnicmp -> _tcsnicmp (사이즈 만큼 대소문자를 구별하지 않고 문자열을 비교)

strchr -> wcschr -> _tcschr (문자 찾기) 

strrchr -> wcsrchr -> _tcsrchr (문자 찾기 (문자열 끝에서 부터 검색)) 

strstr -> wcsstr -> _tcsstr (문자열 찾기)

strpbrk -> wcspbrk -> _tcspbrk (문자 찾기 (두번째 인수를 찾고자 하는 문자들의 집합(문자열)으로 구성)   

strtok -> wcstok -> _tcstok (문자열 자르기 (두번째 인수를 집합(문자열)으로 구성 가능)) => 해당 문자가 NULL로 치환 됨

strset -> wcsset -> _tcsset (문자 치환, 첫째 인수의 모든 문자를 두번째 인수 문자로 변경함) => "abc" -> "bbb" 

strnset -> wcsnset -> _tscnset (사이즈 만큼 문자 치환) 

strupr -> wcsupr -> _tcsupr (대문자로 치환)

strlwr -> wcslwr -> _tcslwr (소문자로 치환) 

strrev -> wcsrev -> _tcsrev (문자열 역정렬) => "가나다라마" -> "마라다나가"



출처 : http://blog.naver.com/kilsu1024/110168931552

Posted by 위너즈
|

< 요구 사항 >

 - 만든 자료구조의 디버깅( 조사식 등 )을 위해 내부를 보려 해도 볼수 없게 되는 상황

 - 예를 들어 HashMap을 하나 만들었는데 std::hash_map 을 디버깅 할때 처럼 안에 들어있는 정보를 조사식에서 보고 싶을 경우

 

< 해결 방법 >  Visual Studio 2005  환경

 - c:\Program Files\Microsoft Visual Studio 8\Common7\Packages\Debugger\autoexp.dat

 - 위의 파일을 메모장 등에서 읽어보면 무언가 스크립트로 짜져 있는 것을 볼수 있습니다.

 

autoexp.dat    : 이 파일에 보시면 std::vector 등의 STL 관련해서 STL이 어떻게 디버깅하고 있는지 알수 있습니다.

//====================

// std::vector

//====================

std::vector<*>{

        children

        {

               #array

               {

                         expr    :   ($c._Myfirst)[$i],

                         size    :   $c._Mylast-$c._MyFirst

               }

        }

}

 

* 커스터마이징된 자료구조( CVector ) 를 만들었고.. 이 것을 디버깅시에 보고 싶은 경우.........

//====================

// CVector

//====================

CVector<*>{

        children

        {

               #array

               {

                         expr    :   ($c.m_pBase             // 실제 배열 포인터 정보

                         size    :   $c.m_uiCount             // 현재 자료 갯수

               }

        }

}

출처 : http://blog.naver.com/sondool91?Redirect=Log&logNo=140092292363

Posted by 위너즈
|

인덱스를 생성할 때 옵션들이 많은데요.

오늘은 이에 대해 간단하게 알아볼까 합니다.

 

대용량 데이터베이스를 관리할 때에는 특히 이러한 옵션들이 중요합니다.

 

아래 CREATE INDEX 옵션들은 2008 기준입니다. 2008 이전 버전과는 사용법의 차이가 있으니 주의하세요.

 

<relational_index_option> ::=

{

    PAD_INDEX = { ON | OFF }

  | FILLFACTOR = fillfactor

  | SORT_IN_TEMPDB = { ON | OFF }

  | IGNORE_DUP_KEY = { ON | OFF }

  | STATISTICS_NORECOMPUTE = { ON | OFF }

  | DROP_EXISTING = { ON | OFF }

  | ONLINE = { ON | OFF }

  | ALLOW_ROW_LOCKS = { ON | OFF }

  | ALLOW_PAGE_LOCKS = { ON | OFF }

  | MAXDOP = max_degree_of_parallelism

  | DATA_COMPRESSION = { NONE | ROW | PAGE}

     [ ON PARTITIONS ( { <partition_number_expression> | <range> }

     [ , ...n ] ) ]

}

 

 

1.     PAD_INDEX & FILLFACTOR

-       PAD_INDEX FILLFACTOR에서 지정한 인덱스의 채우기 비율을 사용할 것인지 여부를 결정합니다.

-       FILLFACTOR 1 100 사이를 사용합니다.

 

l  혹 어떤 분들은 FILLFACTOR를 얼마나 사용해야 하는지 물어보시는 분들이 많은데요, 이것은 분석 여부에 따라 달라질 수 있습니다. 데이터 변경이 자주 일어난다면 숫자를 낮게 주고, 그렇지 않다면 높게 주어도 될 것입니다.

l  참고로, Oracle PCT_FREE와는 정 반대의 개념입니다. PCT_FREE 는 얼마나 남겨둘 지를 결정하고, FILLFACTOR는 얼마나 채워둘 것인지를 결정합니다.

 

2.     SORT_IN_TEMPDB

-       간단히 말해서 인덱스 생성을 tempdb에서 하고 그 최종본만 실제 인덱스에 반영하는 것입니다.

-       장점은 인덱스 생성속도가 적게 걸린다는 것이고, 단점은 tempdb 가 커진다는 것입니다.

 

3.     IGNORE_DUP_KEY

-       UNIQUE INDEX를 생성할 때 키 중복(UNIQUE)에 대한 검사 여부를 지정합니다.

-       사실 이 기능을 ON으로 하면 UNIQUE하지 않은 행만 실패하게 되므로사용하시지 않는 것을 권장합니다.

 

4.     STATICS_NORECOMPUTE

-       통계를 다시 생성할 지 여부를 결정합니다. 기본값이 OFF인데요. 굳이 ON으로 해서 통계를 생성하지 않을 필요는 거의 없습니다.

 

5.     DROP_EXISTING

-       인덱스를 전체적으로 삭제하고 다시 작성할 지 여부를 결정합니다. 기본값은 OFF입니다만,  인덱스 명명 규칙이 있을 경우 이미 기존 명칭이 있을 것이므로, 삭제하고 다시 생성하기 위애 ON 으로 주어야 합니다.

 

6.     ONLINE

-       단순하게 바라보면, 인덱스 생성 중에 테이블을 사용할 수 있는지 여부를 지정하는 것이지만, 다시 말하자면, 인덱스를 작성하면서 TABLE LOCK을 걸지 않도록 합니다.

-       SQL 2005부터 지원되면서 DBA들에겐 큰 힘을 주었던 옵션이며 기본값이 OFF이므로 사용하려면 ON 으로 별도 지정해 주어야 합니다.

 

7.     ALLOW_ROW_LOCKS & ALLOW_PAGE_LOCKS

-       행이나 페이지 LOCK 여부를 결정하며 기본값이 ON입니다. 많이 사용하는 옵션은 아닙니다.

 

8.     MAXDOP

-       테이블의 크기가 클 경우 부하를 줄이기 위해 CPU 병렬작업을 수행할 지 결정하며 CPU 개수 64라는 값까지 줄 수 있습니다.

-       참고로 Standard Edition은 지원하지 않습니다. 엄밀히 따지면 평가판을 빼면 Enterprise Edition만 된다고 하는 편이 낫겠네요. ㅋ.

 

9.     DATA_COMPRESSION / ON PARTITIONS

-       DATA_COMPRESSION은 테이블을 압축하는 것과 같이 데이터 압축 여부를 선택합니다.

-       ON PARTITIONS 옵션은 DATA_COMPRESSION 옵션을 사용할 때에만 적용됩니다.

-       DATA_COMPRESSION 옵션은 NONE / ROW / PAGE 등의 옵션이 있습니다.

 

이상입니다. ^^.


출처 : http://vstarmanv.tistory.com/107

Posted by 위너즈
|

▶Mysql 리플리케이션(mysql 5.x 버전 기준!)      

- korea IDC 시스템엔지니어팀 -








#MYsql 리플리케이션이란? 
# Replication은 3.23.15부터 지원되기 시작한 기능으로 ‘복제’라는 사전적 의미에 맞게 마스터의 MySQL 서버의 데이터를 여러 대의 슬레이브 MySQL 서버의 데이터와 동기화 시켜주는 기능이다. 주로, MySQL의 데이터를 실시간으로 백업하거나, 데이터 서버의 부하분산을 하고자 할 때 많이 사용된다.




0. 서버 설정 


1번서버 - master 서버  : 1차네임서버 : 192.168.1.111
2번서버 - slave 서버     : 2차네임서버 : 192.168.1.222
 
mysql 버전은 모두 mysql 5.X 이다. 
두 서버 모두 mysql 데이터는 /free/mysql_data 에 위치해 있다고 가정한다.
 
 
 
1. Master 서버 설정
 
# vi /etc/my.cnf
 
(1) my.cnf 파일에서 #log-bin=mysql-bin 부분의 주석을 반드시 해제해준다
슬레이브 서버에서 저 바이너리 로그를 기준으로 데이터 리플리케이션을 실행 하기 때문에 저 로그파일이 꼭 필요하다!
 
(2) server-id = 1 로 설정한다. 
마스터서버와 슬레이브서버의 번호가 서로 다르기만 하면 되기 때문에 원하는 번호를 지정한다.
 

# Replication Master Server (default)
# binary logging is required for replication

log-bin=mysql-bin

# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id       = 1

 
 
(3) slave 서버 에서 접속 할 수 있는 Mysql 계정을 생성해준다
# mysql -u root -p 로 디비 접속
mysql > GRANT REPLICATION SLAVE ON *.*  TO 유저명@접속허용할IP IDENTIFIED BY '패스워드';
 
접속허용할 IP에 특정 IP만을 부여 할 수도 있고 '%' 를 적어주면 모든 외부의 접속을 허용한다는 의미이다.
mysql > use mysql
mysql > select * from user \G;
명령로 설정이 되어 있는지 확인 할 수 있다.
 
아래 셋팅은 실제 마스터 서버인 1차네임서버 서버의 설정 내용이다.
 
접속을 허용한 유저 이름은    : nayana
nayana의 접속을 허용한 IP : 192.168.1.222 (2차 네임서버)
 
슬레이브 서버(192.168.1.222) 에서 nayana 라는 계정의 Replication 접속을 허용한 것을 볼 수 있다.

*************************** 10. row ***************************
                 Host: 192.168.1.222
                 User: nayana
             Password: *7CC252065609E6F96DD42A08D09D6C0DDBFBB0B1
          Select_priv: N
          Insert_priv: N
        Update_priv: N
         Delete_priv: N
         Create_priv: N
            Drop_priv: N
         Reload_priv: N
    Shutdown_priv: N
        Process_priv: N
               File_priv: N
            Grant_priv: N
   References_priv: N
            Index_priv: N
              Alter_priv: N
      Show_db_priv: N
           Super_priv: N
Create_tmp_table_priv: N
  Lock_tables_priv: N
         Execute_priv: N
     Repl_slave_priv: Y      <- 요 부분이 Y로 되어있으면 된다!!
     Repl_client_priv: N
  Create_view_priv: N
    Show_view_priv: N
Create_routine_priv: N
  Alter_routine_priv: N
   Create_user_priv: N
             ssl_type: 
           ssl_cipher: 
          x509_issuer: 
         x509_subject: 
        max_questions: 0
          max_updates: 0
      max_connections: 0
 max_user_connections: 0
10 rows in set (0.00 sec)

 
 
(4) mysql을 재시작 하고 마스터 서버의 동작을 확인한다.
"mysql-bin.000022" 라는 바이너리 로그 파일을 생성한 것을 볼 수 있다.

mysql> show master status;

+------------------------+-----------+-------------------+------------------------+
| File                         | Position | Binlog_Do_DB  | Binlog_Ignore_DB  |
+------------------------+-----------+-------------------+------------------------+
| mysql-bin.000022   |     8385 |                         |                               | 
+------------------------+-----------+-------------------+------------------------+
1 row in set (0.00 sec)

mysql>

 
 
 

2. Slave 서버 설정

(1) 마스터 서버의 DB를 슬레이브 서버의 DB에 복사한다!(= 최초1회는 직접 복사해서 동기화해준다!)
이유는?
 
mysql 리플리케이션은 rsync와 다르게 동기화로 엮여진 시점부터의 DB변화를 동기화 시킨다.
 
[ 동기화 전 DB 구조]
마스터               슬레이브        
1                        1
2                        2
3
 
########## 동기화 후 마스터 서버에 4 라는 DB를 추가하면? #########
 
[ 동기화 후 DB 구조]
마스터               슬레이브        
1                        1
2                        2
3                        4
4
 
이렇게 4 라는 DB만 추가되고 3이라는 DB는 추가되지 않는다. 애초에 처음부터 DB내용이 달랐기 때문!
rsync 였다면 양쪽에 모두 똑같아 졌을 것이다.
 
 
[ 마스터 서버 ]
# cd /free
# tar zcvf mysql.tar.gz mysql_data
# sz mysql.tar.gz
 
압축한 파일을 다운받아 슬레이브 서버의 /free/mysql_data 디렉토리에 플어준다. 이로서 최초 동기화를 완료했다.
 
(2) /etc/my.cnf 파일을 수정한다!
57 , 62 번 라인은 주석처리해주고 98번 라인부터는 아래와 같이 주석을 풀고 마스터 서버에 접속할 정보를 적는다.
 

       # Replication Master Server (default)
       # binary logging is required for replication
57   # log-bin=mysql-bin

       # required unique id between 1 and 2^32 - 1
       # defaults to 1 if master-host is not set
       # but will not function as a master if omitted
62   # server-id       = 1

98   # but will not function as a slave if omitted
       server-id       = 2
       # The replication master for this slave - required
       master-host     = 192.168.1.111

       # The username the slave will use for authentication when connecting
       # to the master - required
       
master-user     = nayana

       # The password the slave will authenticate with when connecting to
       # the master - required
       master-password = 패스워드
       
       # The port the master is listening on.
       # optional - defaults to 3306
       master-port     = 3306
       # binary logging - not required for slaves, but recommended
       
log-bin=mysql-bin

 
 
(3) mysql 을 재시작 한후 mysql에 접속하여 동기화가 되었는지 확인한다.
동기화가 정상적으로 되었다면 아래와 같이 "Waiting for master to send event" 라는 구문이 출력된다!
 

mysql> show slave status;
+----------------------------------+----------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
| Slave_IO_State                   | Master_Host    | Master_User | Master_Port | Connect_Retry | Master_Log_File  | Read_Master_Log_Pos | Relay_Log_File          | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_Do_DB | Replicate_Ignore_DB | Replicate_Do_Table | Replicate_Ignore_Table | Replicate_Wild_Do_Table | Replicate_Wild_Ignore_Table | Last_Errno | Last_Error | Skip_Counter | Exec_Master_Log_Pos | Relay_Log_Space | Until_Condition | Until_Log_File | Until_Log_Pos | Master_SSL_Allowed | Master_SSL_CA_File | Master_SSL_CA_Path | Master_SSL_Cert | Master_SSL_Cipher | Master_SSL_Key | Seconds_Behind_Master |
+----------------------------------+----------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
| Waiting for master to send event | 192.168.1.111 | nayana      |        3306 |            60 | mysql-bin.000022 |                8385 | mysqld-relay-bin.000015 |           235 | mysql-bin.000022      | Yes              | Yes               |                 |                     |                    |                        |                         |                             |          0 |            |            0 |                8385 |             235 | None            |                |             0 | No                 |                    |                    |                 |                   |                |                     0 | 
+----------------------------------+----------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
1 row in set (0.00 sec)

mysql>

 
이제 마스터 서버에서 DB를 생성하거나 삭제하면 슬레이브 서버에서도 똑같이 동기화가 될 것이다!! 올레~!

Posted by 위너즈
|

MSSQL 2005, 2008은 데이터 베이스에서 바로 메일 발송이 가능하더라..
2000때는 프로시져 만들고 머하고 복잡하게 하는걸 본적이 있었는데 승리의 MS!!!

어쨋든 간단히 설명해 본다.


1. SQL SMS 를 열어 서버에 접속 한다.
2. 관리 -> 데이터베이스 메일을 오른클릭 -> 데이터베이스 메일 구성 으로 들어갑니다.




3. 메일 구성 마법사 시작이 나오면 그냥 다음을 누르던가 이후에 페이지 표시 안함 체크하고 어쨋든 다음!!



4. 구성 태스크 -> 다음 태스크를 수행하여 데이터베이스 메일 설치 선택


5. 아래와 같은 창이 나올 경우 "예" 를 눌러 줍니다.


6. 새 프로필 구성 
 - 프로필 이름은 이후 프로시져 호출에 사용되므로 기억하기 쉽게 작성 하자(좀더 짧게 할걸 ㅡㅡ;)
 - 설명은 알아서 적자
 - SMTP 계정에 추가 를 눌러 새로운 계정을 추가 하자



7.  계정 이름 설명은 알아서 적으시면 됩니다.
 - 전자 메일 주소 : 보내는 사람의 메일 주소
 - 표시 이름 : 메일 확인 시 표시 되는 이름
 - 회신 전자 메일  : 회신을 할 경우 이 메일 주소로 갑니다.  
 - 서버 이름 : 메일 서버 이름
  인증 방법은 기본 인증을 선택한 후  위에 입력한 메일주소의 계정과 비밀번호를 입력합니다. 
  그리고 확인 -> 확인




8. 새로운 프로필이 생성 되어 있는걸 확인 할 수 있습니다.
 - 기본프로필을  예로 할경우 아마 프로시져 호출에서 프로필 이름을 Null로 사용이 가능하다고 생각합니다.
 (메일 발송 프로시져에 Null일 경우에 대한 처리가 있더군요)



9. 설정 할 부분이 있으면 설정 하고 넘어 갑니다.



10. 자신의 설정 내용을 확인 합니다.




11. 구성 작업이 진행 됩니다.



12.  쿼리창을 띄우고 아래와 같이 입력 해봤습니다.
USE msdb
GO
EXEC sp_send_dbmail @profile_name='Database_SendMail',
@recipients=bbb@mail.co.kr',
@subject='메일 발송 테스트',
@body='이 메일은
테스트 메일 입니다.
받고 
그냥 지워 버리세요'

sp_send_mail은 시스템 테이블 중 msdb에 있습니다. 그러므로 use msdb 해주세요
@Profile_name 은 처음에 작성한 프로필의 이름입니다.  기본 프로필을 예로 할경우 필요 없는 것 같네요
@recipients 는 받는 사람 메일 주소입니다.
@subject 는 메일제목 입니다.
@body는 메일 내용입니다.




13.  위와 같이 발송해서 받은 메일 주소입니다.
쿼리에서 텍스트는 줄바꿔서 적으면 동일하게 적용됩니다.

Posted by 위너즈
|

mssql에서 테이블을 생성한 후, 속성을 변경한 뒤 다시 저장하려 하니 아래와 같은 경고창이 뜬다.

"변경 내용을 저장할 수 없습니다. 변경 내용을 적용하려면 다음 테이블을 삭제하고 다시 만들어야 합니다. 다시 만들 수 없는 테이블을 변경했거나 [테이블을 다시 만들어야 하는 변경 내용 저장 사용 안 함] 옵션을 설정했습니다." 

 

물론, 한번 만든 테이블은 수정하지 않는 것이 좋지만, 데이터가 아무것도 없는 상태라는 둥둥... 수정해도 상관없는 상태라면 다음과 같은 방법으로 에러 메세지를 없앨 수 있습니다.

도구->옵션->디자이너->"테이블을 다시 만들어야 하는 변경 내용 저장 사용 안 함." 에 체크 해제.

Posted by 위너즈
|

mssql 에서 보통 시간을 저장할 때 'YYYY-MM-DD HH:MM:SS'와 같은 형식으로 저장하게 된다.

여기서 쿼리를 할 때 주로 날짜를 기준으로 쿼리를 하게 된다. 예를 들어

"select * from table where time >= '2005-04-20' and time < '2005-04-21'"

이런식으로 말이다. 하지만 매일 오전 10시 부터 11시 까지의 데이터만 찾고 싶으면 어떻게 할까?

그 것은 아래의 쿼리와 같이 매우 간단하다.

 

"select * from table where datename(hh, time) >= 10 and datename(hh,time) < 11"

 

datename 함수를 통하여 date type에서 시간만을 뽑아 낼 수 있다. 마찬가지로

datetime(mi, time)으로 분 단위 만을 뽑아 낼수도 있다.

이러한 것은 방법을 알면 매우 간단하지만 이 방법을 모른체 기본 쿼리만을 이용하려면

매우 짜증 나기 마련이다.

출처 :  http://blog.naver.com/yondle?Redirect=Log&logNo=40012648114

Posted by 위너즈
|

SQL Server Management Studio를 실행하자.


그러면 서버에 연결 대화상자가 나타난다. 일단 인증 항목에서 Windows 인증과 SQL Server 인증이 있는데 SQL Server 인증을 사용하기위해 (만약 SQL Server 인증 사용이 설정되어 있지 않다면...) 설정하는 것 부터 시작하자. Windows 인증에 연결 버튼을 클릭하자.


서버 항목에 (1번 항목) 마우스 오른쪽 버튼을 누르고 메뉴 항목에서 2번 항목에서 속성을 클릭한다. 그러면 서버 속성 대화상자가 나타난다. 


여기서 서버 인증 항목에서 SQL Server 및 Windows 인증 모드를 선택하고 확인을 누르자. 그러면 다음과 같이 대화상자가 나타난다.


확인을 클릭하자. 일단 서버를 다시 시작하기전에 SQL Server 인증으로 로그인 할 수 있도록 sa 로그인을 가능하도록 하자.


게체 탐색기에서 보안->로그인->sa 항목을 마우스 오른쪽 클릭하여 메뉴에서 속성을 클릭하자. 그러면 로그인 속성 - sa 대화상자가 나타난다.


만약 암호를 다시 설정하고 싶으면 1번 항목을 선택하고 2번 항목에서 암호를 다시 입력하자. 다음에 SQL Server 인증으로 로그인이 되도록 설정하자.


항목에서 1번 상태 항목을 선택하고 2번, 3번을 선택한다. 그리고 확인을 누르자.


1번 데이터베이스 항목을 마우스 오른쪽 버튼 클릭하여 메뉴에서 2번 항목 다시 시작을 선택하자.


그리고 나타난 대화상자에서 예를 선택하자. 그렇면 데이터메이스가 다시 시작된다. 자 그렇면 새로운 데이터베이스 QuadraThreeDMap을 생성해보자.


개체 탐색기에서 데이터베이스를 마우스 오른쪽 버튼을 눌러 메뉴에서 항목에서 새 데이터베이스를 선택하자. 그렇면 새 데이터베이스 대화상자가 나타난다.


일단 1번 일반 항목에서 2번 데이터베이스 이름에 QuadraThreeDMap을 입력하여 확인 버튼을 누르자. 그러면 다음과 같이 데이터베이스가 추가된다.


자 인제 Quadra 사용자를 추가하자. 


보안 항목에서 로그인 항목에 마우스 오른쪽 클릭해서 메뉴에서 새 로그인 항목을 선택한다. 그러면 로그인 - 신규 대화상자가 나타난다.


대화상자에서 일반 항목을 선택한후, 로그인 이름을 Quadra라고 입력하고, 3번 처럼 SQL Server 인증을 선택한 후 암호을 입력하고 편의를 위해 암호 만료 강제 적용 체크를 없애자. 또, 4번 항목에서 기본 데이터베이스와 기본 언어를 각각 QuadraThreeDMap과 Korean으로 하자. 



다음에 사용자 매핑 항목을 선택하고, 2번 항목처럼 db_owner를 선택하고 3번 처럼 체크를 하고 확인을 누른다. 자 사용자 추가와 데이터베이스 추가를 마쳤다. 마지막으로 사용자에게 권한을 주어야 한다.




데이터베이스 속성에서 사용 권한을 위와 같이 주면 된다. 인제 모두 마쳤으므로, 확인을 위해 다시 데이터베이스 연결을 해보자.


파일 메뉴에서 개체 탐색기 연결...을 선택하자. 


서버에 연결 대화상자에서 인증, 로그인, 암호를 입력하고 연결 버튼을 누르자.


끝... ^^ KIN 


출처 :  
http://www.mahome.net/1426
Posted by 위너즈
|

저는 Visual Studio 2008 를 사용하지만은.

 

Visual Studio 2010 와 별 다른 차이가 없을거에요. 

 

 단축키

 설명

 Ctrl + F

 현재 파일에서 특정 문자를 찾아줘요.

 Ctrl + Shift + F

 파일에서 특정 문자를 찾아줘요.

 Ctrl + Space

함수이름을 치는도중 함수 이름을 완성시켜줘요.(Namespace)

 Ctrl + Shift + Space

 커서가 위치한 함수가 필요한 파라미터를 보여줘요.(Parameter)

 Home

 커서가 위치한 줄의 맨 앞으로 가요.

 End

 커서가 위치한 줄의 끝으로 가요.

 Shift + Home

 커서가 위치한 곳 부터 그 줄맨 앞까지 블록지정해요

 Shift + End

 커서가 위치한 곳 부터 그 줄 끝까지 블록지정 해요.

 Shift + 화살표(상하좌우)

 화살표를 움직이면서 블록지정을 해요.

 드래그 + Alt

현재 커서 위치부터 움직인 커서 위치까지 블록지정 해요.

 Ctrl + 화살표(좌우)

 구분단위(한 단어)로 커서를 이동해요.

 Ctrl + Shift + 화살표(좌우)

 구분단위(한 단어)로 블록을 지정해요.

 Ctrl + M + L

 전체 소스의 함수를 + 와 - 버튼으로 만들어줘요.

 Ctrl + M + M

 커서가 위치한 속한 함수를 + 와 - 버튼으로 만들어줘요.

 Shift + Delete

 커서가 위치한 줄을 삭제를 해요. 

 Ctrl + L

 커서가 위치한 줄을 삭제를 해요.

 Ctrl + K + C

 선택 영역에 주석을 씌워요.

 Ctrl + K + U

 선택 영역에 주석을 없애요.

 Alt + F8

 블록 지정된 영역의 탭을 정리해줘요.

 Ctrl + G

 줄 번호를 찾아줘요.

 Ctrl + Shift + N

새로운 프로젝트를 만들어요. 

Ctrl + Shift + A 

 새 항목을 만들어요.

Ctrl + A

소스 전체를 블록지정 해요. 

 Ctrl + End

전체 소스의 맽 끝으로 커서가 이동해요. 

Ctrl + Home 

전체 소스의 맨 처음으로 커서가 이동해요. 

Ctrl + Shift + Home 

현재 커서부터 전체 소스의 맨 처음까지 블록지정 해줘요. 

 Ctrl + Shift + End

현재 커서부터 전체 소스의 맨 끝까지 블록지정 해줘요. 

 F7

 빌딩을 해요.

 Ctrl + Alt + F7

 전체 다시 빌딩을 해요.

 F5

 빌딩 후 실행해요.

 Ctrl + F5

 빌딩 없이 실행해요.

 F9

 브레이크 포인트를 설정해요.

 Ctrl + Shift + F9

 설정된 브레이크 포인트를 모두 제거해요.

F10

 디버깅중 줄단위로 실행해요.

 F11

 디버깅중 코드 단위로 실행해요.

 F12

 커서가 위치한 함수&변수가 정의되있는 곳으로 이동해요.

 Ctrl + '-'키

 커서가 이전위치로 이동해요.

 Ctrl + Shift + '-'키

 커서가 다음 위치로 이동해요.

 Ctrl + F2

 커서가 위치한 줄에 책갈피를 설정해요.

 F2

 다음 설정된 책갈피로 커서가 이동 해요.

 Ctrl + Shift + F2

 설정된 책갈피 모두 제거 해요.

 Ctrl + F10

 커서 위치까지 실행을 해요.



 

 

 

하.... 많군요..........

 

저도 여기있는 단축키를 다 쓰는게 아니에요.

 

솔직히 포스팅 하면서 알게된 단축키가 더 많더군요! (몰라도 지장 없잔...)

 

익숙해 지려면 오래 걸리겠군요!

출처 : http://blog.naver.com/chhh92?Redirect=Log&logNo=70118120659
Posted by 위너즈
|
리틀 엔디안과 빅 엔디안의 분류를 어찌보면 시스템 프로그래밍으로 놔야할것같긴한데... 이건 C언어 소스로 표현하니 알고리즘이라 판단하여 알고리즘 C에 분류를 했습니다.
 
 
기본적으로 컴퓨터는 읽기 쓰기를 1바이트 단위로 처리하구요. 데이터를 스택에 넣을때 어떤 순서대로 넣는냐에따라 컴퓨터 종류가 달라요. 이것을 바이트오더(바이트 순서) 라고해요.
 
 
 
4바이트 짜리 정수(int) 0x12345678 를 스택에 넣을때 0x78를 먼저 넣는다면 리틀엔디안이 되는거고 반대로 0x12를 먼저 넣는다면 빅엔디안이 되는거에요.
 
 
둘이 차이점은 계산할때와 비교할때 확실이 눈에 띄어요.
 
빅엔디안으로 두 숫자를 비교한다고 생각해보세요.
보통 숫자 비교는 제일 큰자리에있는 숫자, 즉 왼쪽부터 비교하면 비교하는데 속도가 빨라요.
 
빅엔디안은 숫자를 앞에서부터 차곡차곡 스택에 집어 넣으니까요.
 
비교를 만약 리틀엔디안으로 하게된다면 리틀엔디안은 숫자 뒤에서부터 스택에 집어 넣기 때문이 빅엔디안보다 속도가 느릴수밖에 없지요.
 
그렇지만 숫자 계산을 한다면요.
 
리틀엔디안이 빅엔디안보다 속도가 빨라요.
 
두 숫자를 계산을 할 경우 가장 낮은 자리수에 있는 숫자를 계산을 해보고서 자리 올림수가 있는지 없는지 판단을 하고서 자리올림수와 다음 숫자를 계산을 하죠.
 
그렇기때문에 두 방식중 어느게 좋다 라고 확정 지을순 없어요.
 
빅엔디안은 UNIX 에서 사용하는 RISC 프로세서에서 사용 하는 바이트 오더구요. 동시에 소켓 프로그래밍에서 중요한 네트워크 바이트 오더 에요.
 
리틀엔디안은 Intel 계열의 프로세서에서 사용하는 바이트 오더에요.
 


[그림 1] Endian
 
소스는 포인터를 사용했습니다.
 
5번째 줄에 4바이트 정수형변수 a에다가 0x12345678을 넣고서
1바이트 정수형포인터변수 b에다가 a의 시작 주소를 주었어요.
 
a의 시작 주소니까 처음에 들어간 숫자가 있겟죠?
 
8번째 줄과 13번째 줄은  (*b)에 0x78인지 0x12인지 비교후 printf로 문자열을 찍는 간단한 프로그램이에요.
 
[그림 2] Endian_cmd
 
저는 리틀 엔디안이라네요.
 
리틀 엔디안과 빅 엔디안을 요약정리를 하면요.
 

빅 엔디안

리틀 엔디안 

Unix 의 RISC계열의 프로세서가 사용하는 바이트 오더링

네트워크에서 사용하는 바이트 오더링

앞에서부터 스택에 PUSH

비교연산에서 리틀 엔디안보다 속도가 빠름

Intel 계열의 프로세서가 사용하는 바이트 오더링

 

뒤에서부터 스택에 PUSH

계산연산에서 빅 엔디안보다 속도가 빠름

  

단순한 프로그래밍 할땐 빅 엔디안과 리틀 엔디안을 구분하면서할 필요가 없기에 크게 신경 쓸 필요는 없지만, 알아두면 안좋을것 없으니까요. ㅋ

출처 : http://blog.naver.com/chhh92?Redirect=Log&logNo=70118120659

Posted by 위너즈
|