레이블이 MS-SQL인 게시물을 표시합니다. 모든 게시물 표시
레이블이 MS-SQL인 게시물을 표시합니다. 모든 게시물 표시

2019년 3월 12일 화요일

MS-SQL : MS SQL 2017 Express 설치


개발자들이 개발용으로 쓸수 있는 무료 데이터베이스 "SQL Server 2017 Express" 를 설치해보자.

배포처 : https://www.microsoft.com/ko-kr/sql-server/sql-server-editions-express 

마이크로소프트 홈페이지 에서 검색하면 다운로드 링크가 나오니 그곳에서 다운받으면 된다.


실행하면 설치 옵션이 나오는데 일반적으로 "기본" 설치를 하면 별다른 설정 없이 설치할 수 있다. 하지만, 이번에는 "사용자 지정" 을 사용해 설치를 해보자.


하지만, 사용자 설치라고 해서 별다른것은 없다. 그냥 저장 위치만 지정하게 되어 있는데, 오해하지 말아야 할 것은 "미디어 위치" 이지 "설치 위치" 가 아니다. 여기서 저장되는 것은 설치 프로그램을 저장할 위치를 지정하는 것이므로 설치 위치는 나중에 따로 지정하게 된다.


"설치" 를 실행하면 본격적으로 설치 파일을 다운 받는다.


설치 파일을 모두 다운 받으면 "설치 센터" 가 실행되는데, 만약 설치 센터가 자동으로 실행되지 않는다면 조금전에 지정한 디렉토리에 설치 파일이 다운 되어 있으므로 그 곳의 실행 파일을 실행 시키면 된다.


설치는 이전 버젼 프로그램과 별다를게 없으므로 그냥 기본적인 설정값을 사용해 설치하면 된다.


그러면 중간에 설치 위치를 묻는데, 여기서 지정한 위치가 실제 프로그램이 설치될 위치이므로 주의해서 지정한다.


그 뒤로도 별다른 특이사항이 없다면 그냥 디폴트 설정값으로 진행하면된다. 


다만, 가능하면 인증모드를 "혼합 모드" 로 지정하는게 좋다. 보안상으로는 "Window 인증모드" 가 좋다지만, Express 를 사용할때는 테스트용이나 간단한 시스템일 경우가 대부분이므로 그때는 원격접속같은 잡다한 설정이 쉬운 혼합 모드로 그냥 속편하게 사용하는 편이 좋다.


그 뒤로도 기존 버젼 설치와 별다른게 없지만, 이번에는 특이하게 "파이선" 이나 "R" 같은 항목의 설치 동의를 받는다. 물론 설치 항목을 지정할때 뺐다면 묻지 않을 것이나 디폴드 값으로 설정이 되어 있이기에 기본 설정값으로 설치를 했다면 동의 할 것을 요구한다. 


그리고 그대로 쭈욱 진행하면 설치는 간단히 끝난다. 참고로 마지막 과정에서 설치 프로그램이 죽은게 아닐까 싶을 정도로 오랫동안 멈춰있는데, 1~20 분 정도 그냥 놔두면 문제없이 설치가 진행 된다.

이렇게 MS SQL 2017 Express 설치 끝!!!

... 인줄 알았는데...


설치된 항목을 보니 그냥 서버 셋팅 관련 항목밖에 없다? 응? 이러면 데이터 조회하고 편집하는 것은 어떻게 하라는 것인지?

당황... 당황... 당황 스럽다.

이럴대는 다ㅇ황하지않고...


처음에 다운 받았던 설치 프로그램을 다시 실행시켜본다. 그러면 그 곳에 "SQL Server 관리도구 설치" 라는 항목이 있는 것을 알수 있다. 이걸 클릭해 보자.


그러면 "SSMS(SQL Server Management Studio" 라는 것을 다운 받을 수 있는 웹페이지로 이동한다. 여기서 SSMS 설치 파일을 다운 받는다. 이걸 설치하면 우리가 일반적으로 알고 있는 MS SQL 관리 프로그램을 띄울 수 있다.

정말이지... 기술이 발전 하면 할 수록 이런 프로그램 설치가 쉬워지는게 아니라 점점더 어렵고 귀찮고 번거롭게 바뀐다는것은 나만의 착각인 걸까?

하여간 이걸 다운 받아 실행시켜 보자. 다운 받은 파일을 대략 800MB 정도.


설치 과정은 간단하다. 그냥 프로그램 실행시키고 "설치" 버튼만 눌러주면 끝. 


그럼 묻지도 따지지도 않고 "C 드라이브 (시스템 드라이브)" 에 설치해 준다.

사용자에게 설치 위치 따위는 묻지 않고 다짜고짜 그냥 냅다 설치를 해 버리니 시스템 드라이브의 여유공간이 적은 경우는 설치에 주의 할 필요가 있다.


이것까지 설치를 하면 드디어 "SQL Server Management" 가 메뉴에 뜬다.


요걸 실행 시키면...


드이어 익숙한 MS SQL 관리 콘솔이 실행된다. 


이후로는 기존 버젼의 MS SQL 관리 콘솔과 크게 다를 것은 없으므로 그냥 사용하면 되겠다.


2017년 6월 14일 수요일

MS-SQL : 테이블 '***' 에 있는 열 '***' 의 유형이 인덱스에서 키 열로 사용하기에 적합하지 않습니다


MS-SQL 에서 특정 필드에 인덱스를 걸려고 하니, "테이블 '***' 에 있는 열 '***' 의 유형이 인덱스에서 키 열로 사용하기에 적합하지 않습니다" 오류가 발생한다.


이것은 인덱스를 걸려고 하는 필드가 너무 크기 때문.
인덱스를 걸수 있는 컬럼의 크기는 900 바이트 이하만 가능하다.


그러니 컬럼의 크기를 적당히 낮추어 주고 다시 한번 쿼리를 실행해 보면...


이렇게 정상적으로 실행 되고...


인덱스 항목 쪽에도 찾아 보면 정상적으로 인덱스가 생성된 것을 확인해 볼수 있을 것이다.


2017년 4월 28일 금요일

MS-SQL : 조인 테이블 업데이트 하기

가끔 특정 항목을 일괄 업데이트 하려고 하는데, 그 조건이 다른 테이블에 있는 경우가 있다.
즉, 조인을 해서 검색 조건을 지정하는 경우인데, 검색 조건이 있는 테이블이 업데이트 할 테이블과 달라서 업데이트가 좀 까다롭다.

하지만, MS-SQL 에선 간단하게 업데이트를 할 수 있다.


예를 들면 회원의 특정 아이디의 비번을 초기화 하고 싶다.
단, 사용여부가 "1" 로 지정된 아이디만...
다시말해 업데이트 할 테이블과 저한 사항이 서로 다른 테이블에 있는 경우다.


UPDATE T_MEMBER_LIST
SET
   strLoginPwd = ''
FROM T_MEMBER_LIST as A
INNER JOIN T_MEMBER_LIST_SUB as B
   ON A.strLoginID = B.strLoginID
WHERE
   B.bitUseYn = '1'

그냥 간단히 업데이트 구문 작성하고, 그 아래에 각 테이블들이 조인 내용만 추가로 기록해 주면...


이렇게 그 검색 조건에 해당하는 항목만 딱 업데이트를 시켜 준다.


2017년 3월 3일 금요일

MsSQL : Try Catch & Error Message 사용


MS-SQL 에선 다른 프로그램 언어 처럼 Try ~ Catch 문을 이용할 수 있다.

declare @Number as int

begin try
set @Number = 'TEXT'
end try

begin catch
SELECT
ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage;
end catch


에러가 발생시 Catch 구문내에선 ERROR_MESSAGE() 구분을 이용해 에러 메시지를 확인 할 수 있으므로, 받은 에러 메시지를 적당히 활용하면 된다.

MsSQL : 트랜잭션 적용


MsSQL 에서 트랜젝션 적용하는 법.
간단히 쿼리 시작에 "BEGIN TRAN" 으로 시작하고 
끝날때 "COMMIT TRAN 혹은 ROLLBACK TRAN" 으로 끝나면 된다.

begin tran
--- (업데이트 쿼리)
commit tran (혹은 RollBack Tran)


이런 테이블이 있을 때...


 "BEGIN TRAN" 으로 시작하고 업데이트 쿼리를 실행 해보면, 지정한 값이 바뀐것을 확인 할 수 있다.


 하지만, 아직 트랜젝션이 걸려 있으므로, 다른 쿼리창에서는 트랜젝션이 걸려 있는 영역을 조회 하지 못하게 된다.


 업데이트가 정확히 되었다면, "COMMIT TRAN" 을 해서 트랜젝션을 끝낸다.


그러면 다른 쿼리 창에서도 변경한 데이터를 조회 할 수 있다.


 만약 "ROLLBACK TRAN" 으로 롤백을 했을 경우, 업데이트 쿼리를 사용해 데이터를 변경 했더라도 롤백을 하면 데이터가 복구 되며...


이렇게 다른 곳에서는 변경하기 이전 데이터를 조회 할 수 있다.

2017년 2월 28일 화요일

MsSql : 저장프로시져, 트리거에 특정 문자열이 있는지 검색

디비의 저장프로시져나 트리거에 특정 문자열이 있는지 검색하는 쿼리.

select distinct a.xtype, a.name
from sysobjects a with(Nolock)
join syscomments b with(Nolock)
      on a.id = b.id
where a.xtype = 'P' and b.text like '%검색문자열%'
order by a.xtype, a.name


[ xtype ]
P : 저장프로시져
TR : 트리거
V : 뷰
FN : 함수

2016년 5월 9일 월요일

MSSql : 디비를 복원 하는데 "비상 로그 백업이 수행되지 않았습니다." 라는 오류가 뜬다.

 디비를 복원 하는데 "비상 로그 백업이 수행되지 않았습니다." 라는 오류가 뜬다.


뭔가 백업 작업 중에 오류가 발생시 복구를 위한 로그를 백업 해야 하는데, 그 작업이 안되었을 경우 발생한다고 하는데...

정상적으로는 로그 백업을 수행하고 하는게 좋겠으나, 그냥 바로 복구를 진행 할 수 있다.


그냥 이렇게 복원 옵션에서 "기존 데이터베이스 덮어쓰기" 항목을 체크해주고 복구를 진행하면, 로그 백업 없어도 백업 파일만으로 복원 해 준다.


MsSql : 데이터베이스 복원중 "데이터베이스가 사용 중이어서 배타적으로 액세스할 수 없습니다." 오류.

데이터베이스 복원중 "데이터베이스가 사용 중이어서 배타적으로 액세스할 수 없습니다." 오류가 뜬다.



이건 말그대로 다른 누군가가 데이터 베이스를 사용 중이라서 그런거니, 다른 사용자를 쫒아 내면 된다.

다른 사용자를 쫒아 내는 것은, 작업하고자 하는 데이터 베이스를 선택하고, "속성" 으로 간다.


여기서 "옵션 > 엑세스 제한 > RESTRICTED_USER" 를 지정 후, 확인.
이렇게 하면...



지정한 데이터베이스는 "제한된 사용자" 라는 메시지가 뜨며 다른 사용자는 모두 쫒겨나게 된다. 이제 백업 하면 된다.








2016년 1월 5일 화요일

node.js 에서 MS-SQL 접속

node.js 는 대게 MySql 이나 몽고DB 를 많이 쓰지만, 다른 DB 도 쓸때는 쓴다.

일단 MS-SQL.

MySql 과 별로 다를 건 없다.
그냥 MS-SQL 모듈 설치하고 사용하면 끝.


커맨드 창에서 'npm install mssql' 명령어를 실행해 모듈 설치.


제대로 설치 되었다면, 명령을 실행 시켰던 디렉토리의 node_modules 폴더에 mssql 폴더가 생성되고 소스가 추가 되었을 것이다.
그럼, 이제 그냥 쓰면 된다.


var sql = require('mssql');
 
var config = {
    user: 'sa',
    password: '$',
    server: 'localhost',
    port: '20500',
    database: 'master',
    stream: true
}
 
sql.connect(config, function(err) {
    var request = new sql.Request();
    request.stream = true;
    request.query('select top 10 * from sys.all_objects');
 
    request.on('row', function(row) {
        console.log('name      : '+ row.name); 
        console.log('object_id : '+ row.object_id); 
        console.log(''); 
    });
 
    request.on('error', function(err) {
        console.log(err); 
    });
 
    request.on('done', function(returnValue) {
        console.log('Data End'); 
    });
});

요렇게...
일단 한가지 방법만을 시도해 보았지만, DB 연결 방법은 여러가지가 있다.

https://www.npmjs.com/package/mssql

위의 페이지에 mssql 모듈 사용법에 대한 내용들이 있으니, 각자 사용하기 편한 것을 골라 쓰면 된다.

암튼 위의 소스를 실행해 보면...


이렇게 DB 의 내용을 출력 할 수 있다.





2015년 6월 16일 화요일

VisualStudio 2013 : SQL Server Database 프로젝트의 쿼리가 "SQL71006: 일괄 처리당 문 하나만 사용할 수 있습니다. 'GO'와 같은 일괄 처리 구분 기호를 문 사이에 사용해야 할 수 있습니다." ... 라고 오류가 날때.

VisualStudio 2013에 SQL Server Database 프로젝트에다 쿼리를 등록하고 컴파일을 하니


 "SQL71006: 일괄 처리당 문 하나만 사용할 수 있습니다. 'GO'와 같은 일괄 처리 구분 기호를 문 사이에 사용해야 할 수 있습니다."

... 라고 오류가 난다.
이전 버전에선 아무런 문제 없이 잘만 되더니만...

검색해보니 뭔가 구구절절한 이유가 있지만... 난 그런거 모르겠고...
SQL 파일 속성에서...


"빌드 동작" 이 "빌드" 라고 지정되어 있는 것을...


"PostDeploy" 혹은 "없음" 이라고 지정하면, 오류가 발생하지 않는다.


VisualStudio 2013 에서 SQL Server Database 프로젝트를 등록하여 컴파일시 오류가 날때. (SSDT 오류)

요즘은 DB 작업을 할 때, 거의 저장 프로시저를 사용하다 보니, 아예 프로젝트에 DB 를 등록해 놓고 쓰는 경우가 대부분이다.


이렇게, 데이터 베이스 프로젝트를 등록하여 ...


사용할 디비를 등록해 놓으면 VisualStudio 에서 저장 프로시저및 테이블을 관할 수 있는데...
유독 VisualStudio 2013 에서는 이렇게 하면, 오류가 난다.


이렇게 오류는 나는데, 뭐가 문제인지는 알려 주지는 않는다.
아몰랑... 정말 답답하다.

결론은 SSDT(SQL Server Data Tools) 문제...
버그인지... 아니면... 뭔가 다른 문제인진 모르겠지만, 저걸 업데이트 해주면 된다.

"확장 및 업데이트" 에서...


"업데이트 > 제품업데이트 > 데이터베이스 도구용..." 을 업데이트 한다.


말이 업데이트지, 사실 그냥 파일 다운로드임... 다운 로드된 파일을 실행해야만 설치가 됨.


다운 받은 파일을 실행 하면...


이렇게 SSDT 가 재 설치가 됨.
이걸 설치하고 VisualStudio 를 재시작하면 정상적으로 컴파일이 됨.

어차피, 업데이트 파일을 다운 받아 설치하는 거라서,
http://go.microsoft.com/fwlink/?linkid=393521&clcid=0x409 (영문)
https://msdn.microsoft.com/ko-kr/dn864412 (다국어)
... 여기서 다운 받아 설치해도 된다고 함...

만약....

업데이트를 해도 안된다면 ...
(작업하는 컴중 하나가
"SqlModelResolutionTask" 작업이 잘못 선언 또는 사용되었거나, 생성 중에 실패했습니다.
... 라는 에러를 뱉으며 빌드가 안된다. 쒩... )

그럼, 재설치를 시도 해본다.
다운 받은 SSDTsetup.exe 를 실행시키면 나오는 "제거" 기능을 이용해 지우면 되는데...



아마도 경고 창이 나오겠지만, "제거" 기능을 이용해 지워도 다 지워지지는 않는다.


알림창에 나와있는 URL을 잘 기억하고 있자.
일단 그대로 진행해 기존에 설치되어 있는 SSDT 를 삭제하고...

http://go.microsoft.com/fwlink/?linkid=257900

... 로 이동해보면...


SSDT 삭제 기능으로는 지워지지 않는 관련 패키지들이 나와 있다.
이중에...

Microsoft SQL Server Data Tools(SSDT.msi)
Microsoft SQL Server Data Tools 빌드 유틸리티(SSDTBuildUtilities.msi)
SSDT의 필수 구성 요소(SSDTDBSvcExternals.msi)

... 이 세가지를 제어판의 "프로그램 제거 또는 변경" 을 이용해 지워준다.


프로그램을 여러종류를 반복해서 설치했던 컴퓨터라면, 저 패키지가 중복으로 여러개 설치되어 있을 수도 있다.
그냥 모두 다 지워 준다.

그런다음, SSDT 를 새로 설치한다.
그럼 아마도 될것이다.

만약... 그래도 안된다면... ?

... 아몰랑... 난 이렇게 하니까 됐어...