sql2012 설치에서 좋은 점?! 애매한 점!
설치 중에 최신 업데이트를 자동으로 받는다!!
문제는 DB서버에 누가 인터넷을 그리 연결 해놓느냐는 점 -ㅅ-;;
좋은 기능인데 쓸모가 과연 얼마나 있을까 싶은 기능임;;
/re:how to be a dolphin?
Posts tagged ‘sql’
설치 중에 최신 업데이트를 자동으로 받는다!!
문제는 DB서버에 누가 인터넷을 그리 연결 해놓느냐는 점 -ㅅ-;;
좋은 기능인데 쓸모가 과연 얼마나 있을까 싶은 기능임;;
갑자기 공부 바람이 불어서 🙂
일하느냐고 어찌 시간을 낼 수가 없다라는 핑계로 몇 년 책 안보고 그냥 있는거 가지고 살아왔더니 이제 그나마 가지고 있는 것들도 다 써버려서 바닥이 드러나기에 다시 좀 채워넣어보는 기간을 두기로 결정..
…아주 잡다하게-_-;; 책을 질러버렸음;;
실무에서는 거의 사용되지 못할 postgresql이라던가;; IDC관리자도 아니면서 시스코 네트워킹이라던가 -ㅅ-
예전에 잠깐 보고 지금까지 그냥 버려두고 있었던 Java를 위해 jdk를 다 설치하고 이건 왜 계속 흥미가 있는건지 모르겠는 python까지..
연말까지 모든 주말을 반납해도 이거 다 볼 수 있을까 싶은데 주말마다 잠 자고 놀러다니기 바빠서 책은 언제 볼지 모르겠다라는 ㅎ
그냥 이런저런 장난감 대신에 다른 사람들이 ‘보기에 좋은’ 책을 산 것이 아닌가 싶은 느낌이랄까 ㅎ
그래도 뭔가 안하던가 하니까 재미는 있다 🙂
압축 백업 기능.. Backup compression 임..
1. 일일이 카운트 한다 – 정확도 100%
2. System table 에 저장되어있는 row count 를 참조 한다 – 정확도 1번과 비교하면 약간 떨어짐
물론 정확해야한다면 1번으로..
다만.. 데이터의 증감 또는 분위기 파악 정도로 할 때에 테이블 한 두개면 모를까.. 많으면 1번의 경우 토나오는 작업이 되는 것이 현실..
그래서 2번을 사용하는 경우가 있는데.. 이 때 사용하는 쿼리
——————————————
select B.name, A.rowcnt
from sysindexes AS A with (nolock)
JOIN sys.tables as B with (nolock)
ON A.id = B.[object_id] and A.indid < 2
order by [name] asc
——————————————
시스템 테이블에 저장되어있는 row count와 table 이름을 조합하여 테이블의 row 갯수를 반환 받을 수 있음..
가끔은 편리함 🙂
1. Cal
MS제품을 쓰다보면.. 사실 돈 값은 한다라는 느낌이 강하게 드는 편이다..
DB서버 두 대가 있음
Linked server 로 묶어도 놨음
다른 쪽 서버의 데이터를 불러오긴 해야함..
select *
from SERVER.DB.SCHEMA.TABLE
vs
select *
from OPENQUERY(SERVER, ‘SELECT * from DB.SCHEMA.TABLE’)
지금까지의 내가 느낀 것으론 승자는 OPENQUERY
이 기종에서도 동일 기종 동일 네트워크에서도 속도 차이는 좀 많이 나는 편..
특별한 상황이 아닌 이상 OPENQUERY를 더 많이 쓰게 되었다라는..
문제는 작성하는게 귀찮다라는거 -ㅂ-;;
물론 몇 일 전에-_-;;
몇 일 수준을 넘어가 몇달.. 그리고 햇수까지 넘어가서 작년에 벌어진 일이긴 하지만 ㅋ
전자제품, 컴퓨터, 자동차 등 하드웨어의 스펙은 죽어라 읽고 익히고 하면서도 정작 소프트웨어 스펙은 ‘그냥 깔고 쓰면 되지’ 라는 생각이 워낙 강해서-_-;; 당시 베타였던 SQL 2008이 CTP버전으로 제공이 되고 있을때 깔아서 써보고 가장 맘에 들었던 기능중의 하나인 압축백업! compressed backup 이 기능 하나만으로도 SQL 2008은 살 만한 가치가 있다라고 생각했고 정식판이 나오기를 아기다리고기다렸는데..
정식판이 나와서 깔고 두둥~ 압축백업 시작~했는데 안된다.. 메시지가 나왔는데…
‘너가 깐 에디션에서는 안됨(ㅋㅋ), 설명서 좀 읽어보셈’ ← 이렇게 보였음-_- 물론 공손한 말로 적혀있었지만
그래요.. 전 Standard edition을 깔았었지요
저 좋은 기능을 그냥 제공하기는 싫었던 모양;;
사용조건이 Enterprise edition 이었으나.. 소프트웨어 스펙을 제대로 읽어보지 않고 그냥 맘대로 덤빈것이 화근..
후우..
mp3 하나 살때도 8기가짜리네 16기가 짜리네.. 싸구려 이어폰을 볼때도 음역대역이 이건 이렇네 같이 이상한것들은 봤으면서 정작 내가 정말 쓰고 싶은 기능에 대한 요구사항은 제대로 알아보지 못한.. 케이스..
결론 : 압축백업 기능은 SQL 2008 Enterprise edition에서 지원됩니다.. 돈을 바르세요! 싫으면 알아서 압축 하던가 -ㅂ-;
이를 해결 하기 위해서는 모든 서버들은 도메인으로 – 액티브디렉토리를 사용하여 도메인 구조로 묶게 되면 해결이 되지만 DBMS하나 깔아서 쓰는 것도 귀찮고 힘들어 죽겠는데 액티브 디렉토리까지 신경쓰기 싫을 경우에 나름의 꼼수로 ㅎ 쓸 수 있는 방법..
나도 IDC에 액티브 디렉토리의 설정을 들여놓긴 싫어서 같은 방법을 쓰고 있으며 뭐 잘 돌아가니 🙂
OS 는 Windows server 2003 이상이면 되고 DBMS는 SQL 2005 이상이면 동작한다
다만 SQL 2005의 서비스팩은 반드시 적용하시길~ SQL 2005의 경우 현재(2009/01/30) SP3 까지 나와있으니 download 페이지에서 받으시면 준비는 끝날듯~
미러링을 위해서는 총 세개의 인스턴스가 설치가 되어있으면 되며 물리적으로 분리가 되어있어도 되며 그게 아니라면 추가 인스턴스로 되어있어도 동작하는데는 문제가 없음..
이제 작업 리스트
내 경우에는 총 3대의 서버에서 진행을 했으며 마스터DB와 미러DB는 SQL 2005 Standard edition 그리고 감시용으로는 SQL 2005 express edition을 사용했음
1. Host file의 수정
172.10.10.10 db1.database.server.hugyou.net
172.10.10.11 db2.database.server.hugyou.net
172.10.10.12 db3.database.server.hugyou.net
뒤에 도메인 네임은 쓰고 싶으신 걸로 🙂 dbserver1.google.com 이라고 해도 상관없음 -_-;;
2. Full backup & Transaction log backup
마스터 DB에서 하나의 Full backup 그리고 그 이후에 생성된 Transaction log backup 을 생성한 후 해당 백업 파일을 미러DB에 복사해놓음
3. 2번에서 생성된 백업 파일을 복원
복원을 할 때 with nocovery 옵션으로 DB를 열어놓은 상태로 만들어 놓는다
4. DB서버 별 인증서 파일 생성
— 마스터DB
create master key encryption by password = ‘마스터DB 비밀번호’;
GO
create certificate DATABASE_A_Cert with subject = ‘DATABASE A Certificate’, start_date = ‘2009/01/01’, expiry_date = ‘2020/12/31’;
GO
Create endpoint endpoint_mirroring state = started
as tcp(listener_port = 7123, listener_ip = all)
for database_mirroring (authentication = certificate DATABASE_A_Cert, encryption = REQUIRED, role = all);
GO
Backup certificate DATABASE_A_Cert to file = ‘c:\DATABASE_A_Cert.cer’;
GO
— 미러DB
create master key encryption by password = ‘미러DB 비밀번호’;
GO
create certificate DATABASE_B_Cert with subject = ‘DATABASE B Certificate’, start_date = ‘2009/01/01’, expiry_date = ‘2020/12/31’;
GO
Create endpoint endpoint_mirroring state = started
as tcp(listener_port = 7123, listener_ip = all)
for database_mirroring (authentication = certificate DATABASE_B_Cert, encryption = REQUIRED, role = all);
GO
Backup certificate DATABASE_B_Cert to file = ‘c:\DATABASE_B_Cert.cer’;
GO
— 감시DB
create master key encryption by password = ‘감시DB 비밀번호’;
GO
create certificate DATABASE_C_Cert with subject = ‘HOST_W certificate’, start_date = ‘2009/01/01’, expiry_date = ‘2020/12/31’;
GO
Create endpoint endpoint_mirroring state = started
as tcp(listener_port = 7123, listener_ip = all)
for database_mirroring (authentication = certificate DATABASE_C_Cert, encryption = REQUIRED, role = witness);
GO
Backup certificate DATABASE_C_Cert to file = ‘c:\DATABASE_C_Cert.cer’;
GO
인증서 생성시 유효 기간은 알아서 적당하게 진행하면 되며 내 경우에는 다시 설정하기 귀찮으니–;; 10년정도 뒤로 -ㅅ-;; 설마 2020년까지 이 시스템을 사용하지는 않겠지 ㅎ
5. 생성된 인증서 파일을 각 서버에 전부 카피 한다
서버는 다른 두 서버에서 생성된 인증서를 가지고 있어야 함
6. 로그인 계정 생성 및 Endpoint 설정 – 가장 긴 부분 🙂
— 마스터DB
create login DATABASE_B_login with PASSWORD = ‘미러DB 로그인 암호’;
GO
create user DATABASE_B_user from login DATABASE_B_login;
GO
Create certificate DATABASE_B_Cert
Authorization DATABASE_B_user
From file = ‘c:\DATABASE_B_Cert.cer’;
GO
Grant CONNECT ON Endpoint::endpoint_mirroring to [DATABASE_B_login];
GO
——
create login DATABASE_C_login with PASSWORD = ‘감시DB 로그인 암호’;
GO
create user DATABASE_C_user from login DATABASE_C_login;
GO
Create certificate DATABASE_C_Cert
Authorization DATABASE_C_user
From file = ‘c:\DATABASE_C_Cert.cer’;
GO
Grant CONNECT ON Endpoint::endpoint_mirroring to [DATABASE_C_login];
GO
— 미러DB
create login DATABASE_A_login with PASSWORD = ‘마스터DB 로그인 암호’;
GO
create user DATABASE_A_user from login DATABASE_A_login;
GO
Create certificate DATABASE_A_Cert
Authorization DATABASE_A_user
From file = ‘c:\DATABASE_A_Cert.cer’;
GO
Grant CONNECT ON Endpoint::Endpoint_mirroring to [DATABASE_A_login];
GO
——-
create login DATABASE_C_login with PASSWORD = ‘감시DB 로그인 암호’;
GO
create user DATABASE_C_user from login DATABASE_C_login;
GO
Create certificate DATABASE_C_Cert
Authorization DATABASE_C_user
From file = ‘c:\DATABASE_C_Cert.cer’;
GO
Grant CONNECT ON Endpoint::Endpoint_mirroring to [DATABASE_C_login];
GO
— 감시DB
create login DATABASE_A_login with PASSWORD = ‘마스터DB 로그인 암호’;
GO
create user DATABASE_A_user from login DATABASE_A_login;
GO
Create certificate DATABASE_A_Cert
Authorization DATABASE_A_user
From file = ‘c:\DATABASE_A_Cert.cer’;
GO
Grant CONNECT ON Endpoint::Endpoint_mirroring to [DATABASE_A_login];
GO
——-
create login DATABASE_B_login with PASSWORD = ‘미러DB 로그인 암호’;
GO
create user DATABASE_B_user from login DATABASE_B_login;
GO
Create certificate DATABASE_B_Cert
Authorization DATABASE_B_user
From file = ‘c:\DATABASE_B_Cert.cer’;
GO
Grant CONNECT ON Endpoint::endpoint_mirroring to [DATABASE_B_login];
GO
7. 미러링 설정 하기
— 미러DB
alter database [DB이름] set partner = ‘TCP://db1.database.hugyou.net:7123’;
GO
— 마스터DB
alter database [DB이름] set partner = ‘TCP://db2.database.hugyou.net:7123’;
GO
alter database [DB이름] set witness = ‘TCP://db3.database.hugyou.net:7123’;
GO
이걸로 미러링 끝~ 🙂 뭐 오타 있을 수 있지만 그건 그 때 알아서 고치면 될 것 같고;;
이제 도메인 걱정없는 미러링을 즐겨봅시다~
마스터가 죽으면 자동으로 미러로 서비스가 옮겨지지만 ip 주소가 다를 경우 어플리케이션 들은 DB가 변경이 되었는지 알길이 없으니 연결을 시도해보고 마스터가 죽었으면 미러로 접속을 하는 설정을 해놓으면 마스터DB의 시간을 벌 수 있을듯~
MSSQL 2005에서 지원되는 dbmail을 사용하기 위한 방법 을 그냥 나열
일단 준비단계
——————————————————
EXECUTE msdb.dbo.sysmail_add_account_sp
@account_name = ‘계정이름 – hugyou’,
@description = ‘계정설명 – 전지전능하지 못한 hugyou’,
@email_address = ‘메일주소 – [email protected]’,
@display_name = ‘보여질 이름 – 메일 받을때 발신인에 찍힐 이름’,
@username=’메일주소 – [email protected] or other’,
@password=’비밀번호 – 비번’,
@mailserver_name = ‘SMTP 서버 주소 – smtp.smtp.com’
go
EXECUTE msdb.dbo.sysmail_add_profile_sp
@profile_name = ‘계정이름’,
@description = ‘Profile used for 계정이름’
go
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
@profile_name = ‘계정이름’,
@account_name = ‘계정이름’,
@sequence_number = 1
go
EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
@profile_name = ‘계정이름’,
@principal_name = ‘public’,
@is_default = 1 ;
go
——————————————————
이제 보내봅시다
——————————————————
declare @body1 varchar(100)
set @body1 = ‘서버 :’[email protected]@servername+ ‘ 첫 메일!’
EXEC msdb.dbo.sp_send_dbmail @recipients=’보낼메일 주소 [email protected] 등등..’,
@profile_name = ‘계정이름’,
@subject = ‘메일 테스트’,
@body = @body1,
@body_format = ‘HTML’ ;
——————————————————
다른 옵션은 books online의 sp_send_dbmail 을 찾아보시면 쿼리 결과를 그대로 보내는 법 등이 나와있음 입니다 🙂
——————————————————