SQL Server 2000까지는 없던 내용이라 SQL Server 사용자는 생소할 만한 object에 대해 간단히 소개해 볼까 합니다.

SYNONYM : 동의어, 유의어

아직 제대로 번역된 글을 보지 못해 한글로는 어떻게 표현해야 할지 궁금하지만... 유사객체(?)ㅋㅋ (인포믹스에서는 동의어라고 하나보네요. - 출처)
뜻만으로 미뤄 짐작해보면 alias(별칭)과 유사한 그런 개념입니다.
엔진 차원에서 이렇게 만들어진 object를 어떻게 관리하는지를 정확히는 모르는 관계로 deep한 내용은 건너뛰고...

일단 MSDN 문서에서 CREATE SYNONYM에 대한 도움말 링크는 여기

문법은 간략히 설명하자면
CREATE SYNONYM name FOR objectName
object에 올 수 있는 것은 도움말을 참조하시고... 대략 stored procedure류, view, table 등이 올 수 있습니다.

유의할 점은... 생성시 대상이 되는 object가 존재하지 않아도 된답니다. 실행 시 object의 여부를 check한다고 하네요.

SYNONYM은 local, remote object 모두에 만들 수 있습니다.

그럼 이런 넘은 어디에 쓰라고 만들었을까?? 함 고민해 봤는데..
처음엔 원격 DB table에 check constraint(관계설정)을 걸 수 있을 줄 알았는데, 여기를 보니 그건 안된다고 나와있네요 --;; 해보진 않아서 아는 사람한테 해 보라고 부탁만 해 놨지만..



그럼 도대체 어디에 쓸까???
함 생각해봤는데...

이미 구축된 database를 물리적으로 여러대로 분산할 때, program source를 전혀 고치지 않고 분리가 가능할거 같더라구요. 분리된 database object에 대해 실제 program에 사용되는 database object name과 동일한 synonym만 만들어 주면 되니까요.

또 뭐가 있을까???
생각나는게 없네요 --;; 오라클에는 원래 있었던 기능이라니 혹시 또 다른 좋은 쓰임새를 아시는 분은 덧글 부탁드립니다.  

(추가) Synonym의 쓰임새
SQL Server 2005 adds the capability to create synonyms for database objects, which simplifies the readability of the queries that use objects outside of their own schema (that is, objects with multipart names). Synonyms can also be used to create a level of abstraction over their base objects, thus enabling the easy switching of base objects without affecting the code that references them.
(출처 : http://www.informit.com/articles/article.asp?p=364263&seqNum=3&rl=1)

1. 가독성을 높혀준다.
2. 쉽게 실제 object를 교체 가능하므로 해당 object를 참조하는 코드에 영향을 주지 않는다.
라는 이점이 있다네요.


(추가2) 글 쓰고나니 계속 더 찾아지는 article들...
이 기사에서는 'Synonyms as an Abstraction Layer'라고 표현하는데.. 아주 적절한 표현인 것 같네요.
갑자기 예전에 써 놓은 글이 생각나서 찾아보다 여기에 다시 옮기게 됐네요.

예전에 써 놓은 글 입니다.

실제 글 주소는 트랙백으로 걸기로 하고...

다시 살펴보다보니 SQL Server 2005로 넘어오면서 병행 제어 방법이 변경되었네요. ^^''
이름은 그럴싸하게 만들었던데, 왠지 oracle쪽과 약간 유사해진 느낌이...
원문 주소는 여기
역시 원문 사라질 걸 대비해서 파일로 남깁니다.




간단하게 위 문서에 아래와 같은 부분이 있는데..

Historical Behavior

Historically, the concurrency control model in SQL Server at the server level has been pessimistic and based on locking. While locking is still the best concurrency control choice for most applications, it can introduce significant blocking problems for a small set of applications.

The biggest problem arises when locking causes the writer-block-reader or reader-block-writer problem. If a transaction changes a row, it holds exclusive locks on the changed data. The default behavior in SQL Server is that no other transactions can read the row until the writer commits. Alternatively, SQL Server supports ‘read uncommitted isolation’, which can be requested by the application either by setting the isolation level for the connection or by specifying the NOLOCK table hint. This nonlocking scan should always be carefully considered prior to use, because it is not guaranteed to return transactional consistent results.


간단히 정리해 보면...
"SQL Server는 병행제어 모델로 비관적 알고리즘인 locking을 사용해 왔다. locking은 아직까지 대부분의 application에서 병행제어 방법으로는 가장 좋은 방법이긴 하지만 작은 규모의 application에서 중요한 blocking 문제를 야기시킬 수 있다.
가장 큰 문제점은 locking이 writer-block-reader 혹은 reader-block-writer의 원인이 되는 것이다. 기본적으로 SQL Server에서는 writer가 commit하기 전까지 어떤 트랜잭션도 row를 읽을 수 없다. 대신 application에서 isolotion level을 지정하거나 NOLOCK 테이블 힌트를 이용해 요청할 수 있는 'read uncommitted isolation'을 지원한다. 일관성 있는 결과를 보장하지 않으므로 이런 방법으로 locking하지 않은 채 사용하는 것은 주의해야 한다."

대략 정리했는데, 큰 틀은 맞겠지만 소소하게 틀린 부분은 많을테니 잘못된 부분 지적해 주시면 감사하고 이해하고 보시거나 ㅋㅋ
나머지는 시간날 때 날 잡고...

그리고 Oracle 최신 버전에는 혹시 다른 변화가 있는지도 같이 한번...

Oracle 10i의 메뉴얼 중 Concurrency Control 관련 부분 메뉴얼은 여기
파일은

MS SQL만 하다가 MySQL, Oracle을 조금은 알아야만 할 입장이 되어 버렸네요...
이것 저것 비교해 보면 재미있던데, 기본적으로 datatype 부터...
알아 가면서 하나씩 정리해 보면 재미있을 것 같네요.


Oracle 10g Release 2
http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements001.htm#i54330

SQL Server 2005
http://msdn2.microsoft.com/en-us/library/ms187594.aspx

MySQL
http://dev.mysql.com/doc/refman/5.1/en/data-types.html



SQL Server에서 tsql test framework입니다.

 

http://tsqlunit.sourceforge.net/index.html

 

일단 tdd에 대한 개념이 있어야 쉽게 사용 가능 할 것 같은데...

tdd에 대한 개념은 이곳(http://www.xper.org/wiki/xp/TestDrivenDevelopment?action=show&redirect=TDD)을 참고하세요

 

전 사용을 해 볼 상황이 안되는 관계로..

사용해 보신 분 후기 부탁드려요

링크 : http://www.sqlservercentral.com/Scripts/

 

정말 많네요..

공부하기도 좋을 듯..~

휴...

 

오늘 이 문제 해결하는데 자그마치 5시간 걸렸다.

중간에 거치는 과정이 워낙 복잡해서 더 찾기 힘들었지만...

사실 정확히 이 문제를 해결하는데는 얼마 안걸렸지만.. 중간에 다른 것 다 확인하는데 오래 걸려서... --;;

 

결론부터 말하자면... 사용자 계정의 default language가 Thai로 되어 있어, 날짜 연산하는데 오류가 있었습니다.

 

날짜 연산을 하는 Stored procedure가 있는데, 이 sp를 호출할 때 default language가 English인 계정과 Thai인 계정의 결과가 다르게 나왔습니다.

 

내부 로직이 '2005-11-01' 이런 형식을 가정하고 스트링으로 앞의 형식을 만들어 CONVERT하는 부분도 있고, '2005-11-1' 이런 형식의 값과 대소비교하는 로직도 있고 그랬습니다.

 

그래서 결과도 틀리고 심지어 CONVERT하다가 오류가 나기도 했습니다.

 

부디 이런 문제로 고생하지는 분이 없기를...

 

 

'programming > MSSQL' 카테고리의 다른 글

유용한 SQL Server Script들...  (0) 2005.12.02
T-SQL로 레지스트리 조작하는 방법  (0) 2005.10.08
데이터베이스 관련 면접 질문...  (0) 2005.08.12

뭐.. 왠만한게 다 될꺼라는 생각은 갖고 있지만... 레지스트리 조작하는 코드는 첨 보네요..

 

혹시라도 쓸 일이 있을지 몰라 소개합니다.

 

출처 : http://codebetter.com/blogs/sahil.malik/archive/2005/09/13/131900.aspx

 

팀장님이 적당한 질문들 만들어 보라고 해서 찾아봤습니다. ㅋㅋ

다들 한 번 대답 해 보시죠~~

 

Question:What is SQL?  
Question:What is SELECT statement?
Question:How can you compare a part of the name rather than the entire name?
Question:

What is the INSERT statement?

Question:How do you delete a record from a database?
Question:How could I get distinct entries from a table?
Question:How to get the results of a Query sorted in any order?
Question:How can I find the total number of records in a table?
Question:What is GROUP BY?
Question:What is the difference among "dropping a table", "truncating a table" and "deleting all records" from a table?
Question:What are the Large object types suported by Oracle?
Question:Difference between a "where" clause and a "having" clause ?
Question:What's the difference between a primary key and a unique key?
Question:What are cursors? Explain different types of cursors. What are the disadvantages of cursors? How can you avoid cursors?
Question:What are triggers? How to invoke a trigger on demand?
Question:What is a join and explain different types of joins.
Question:What is a self join?

 


>더보기


우연히 sqler.pe.kr에 갔다가 아래와 같은 질문을 보았습니다.

 

----------------------------------------

OS : Microsoft Windows 2000 Server / Advanced Server SQL : Microsoft SQL Server 2000 Standard / Enterprise Edition 그동안 Oralce을 많이 이용했었습니다. 저의 개념으로 이해가 안되는 부분이 있어서 질문드립니다. 현재 제가 아는 System이 MS SQL Server 2000 Standard를 사용하고 있는데 원인은 정확히 파악할 수 없으나 수시로(LOCK)이 걸린다고 합니다. Strored Procedure는 몇개 이용하고 있습니다. 이 SP는 스케쥴러(작업)에 의해 Call되어지고 있구요... 해결책으로 애플리케이션이든 SP든 모든 Query에 (NOLOCK)을 추가해 주었더군요. DB를 알고있는 관계자들이 "MS SQL Server는 기본적으로 Select문을 날리면 Lock이 걸린다" "Default다" 라고들 합니다. 책을 찾아보고 인터넷을 뒤져봐도 이런내용은 없는것 같은디... 맞는 이야기인지, 맞다면 왜 단순 Select문을 던지는데 기본적으로 Lock을 잡아야 하는지 답변 좀 부탁 합니다.
----------------------------------------

 

대학원에서 간단히 테이블 한 두개 만들어 놓고 VB로 연결해서 DB Programming을 해 본게 전부라 오라클에 대한 지식이 거의 없는터라 오라클에서 왜 그렇게 동작하는지 정말 그런지 뭐 그런건 잘 모른채 SQL Server의 격리 수준에 대한 내용이 생각나서 답변해 주기위해 좀 더 검색해 보며 내가 알고 있는 내용을 정리하던 중, 오라클과 SQL Server의 병행제어 방법이 다르다는 것을 알게 되었다.

 

혹 관심이 있는 분들이나 나 자신을 위해 간단히 정리해 보려 합니다.

 

 


..more


켄 헨더슨씨가 쓴 '강력한 SQL 프로그래밍을 위한 T-SQL'이라는 책에 보면, 제목에 해당하는 글이 나온다.

 

identity가 걸린 pk컬럼에 index를 생성하는 것은 최적화된 방법이 아닌데, 그 이유는

 

1. 특정 범위의 키 값에 대하여 테이블을 쿼리할 수 없고 순차적 pk 컬럼에 대하여 ORDER BY를 수행할 수 없기 때문이다.

2. clustered identity pk는 사용자들이 테이블에 로우를 추가할 때 데이터베이스의 동일한 영역에 대하여 경합이 벌어지게 할 수 있는데, 이를 'hot sopt'이라 한다.

 

라고 기술하고 있습니다.

 

이 글을 읽다가... 저는 그런 단점말고 아래와 같은 다른 장점도 있다는 생각을 평소에 하고 있었습니다.

 

a. clustered identity pk는 순차 증가하므로, index 및 data page의 재정렬 작업이 마지막 페이지에서만 일어난다.

b. clustered identity pk는 update가 발생하지 않는다. (물론 identity가 아니더라도 update가 발생하진 않겠지만, 발생할 수도 있다는 가정하에..) 그러므로 1번과 마찬가지로 index 및 data page의 재정렬 작업이 발생하지 않는다.

 

그래서 이런 내용에 대한 논의가 있을거라는 생각에 웹에서 검색을 해 봤습니다.

 

 

 

 


..more


SET XACT_ABORT ON

문 사용 중.

 

실행 에러가 아닌 사용자 정의 에러를 처리하는 부분에 대한 내용을 보다가 또 찾게된 좋은 글. 아래 글에서 따라 가서 알게 되었습니다.

역시 첨부하고.. 특별히 제가 오늘 알게되서 알려 드리고 싶은 부분은 따로 소개합니다.

 

 

Beware, though, that even when XACT_ABORT is ON, not all errors terminate the batch. Here are the exceptions I know of:

  • Errors you raise yourself with RAISERROR.
  • Compilation errors (which normally terminate the scope) do not terminate the batch.
  • Error 266, Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing.

 

저는 XACT_ABORT ON 문 사용시, RAISERROR문을 만나면 당연히 자동 rollback이 될거라 생각했는데.. 아니더군요..

위 문단은 저자가 알고 있는 자동 rollback이 되지 않는 예외 사항들에 대한 내용입니다.

혹시 사용하시는 분은 참고로 알고 계셔야 할 듯..

 

 

저장 프로시저 안에서의 트랜잭션 처리와 실행 중 오류와 임의 오류 처리에 대한 부분을 보다가 찾게된 내용인데 좋은거 같아 퍼 왔습니다.

 

스크롤이 생겨 부득이하게 파일로 첨부합니다. 클릭하시면 바로 볼 수 있습니다.

좋은 내용이니 꼭 한번 읽어보세요

 

출처 : http://www.sommarskog.se/error-handling-II.html

 

'programming > MSSQL' 카테고리의 다른 글

Error Handling in SQL Server – a Background  (0) 2005.04.11
[펌]Concurrency control mechanism  (0) 2005.03.29
Two Phase Commit Protocol  (0) 2005.03.29

2PC(2 phase commit) protocol에 대한 글을 찾다가 CC(Concurrency control)에 대한 그림을 발견해서 퍼 옴

 

 


Figure 3: Classifications of concurrency control mechanisms
 
 

..more


2단계 커밋 프로토콜...

얘기는 많이 나오는데 자세히 모르는 분들이 많을 것 같다.

컴퓨터 공학을 전공했다면, 물론 수업시간에 배웠을 내용이겠지만...

 

쓸만한 자료가 있어서 퍼 왔다.

 

-------------------------------------

 


..more


MSDN에서 퍼온 글입니다.

 

개인적으로는 좀 다른 방식을 선호하는데...

글을 읽는 여러분들의 T-SQL 코딩 표준 양식에 대해서 얘기하 보는 것도 좋을 것 같네요..

 

저는 이런 방식을 선호합니다.

 

 

       SELECT C.Name , E.NameLast, E.NameFirst, E.Number

                  , ISNULL(I.Description,'NA') AS Description
       FROM tblCompany AS C
             JOIN tblEmployee AS E ON C.CompanyID = E.CompanyID

             LEFT JOIN tblCoverage AS V ON E.EmployeeID = V.EmployeeID

             LEFT JOIN tblInsurance AS I ON V.InsuranceID = I.InsuranceID
       WHERE C.Name LIKE @Name AND V.CreateDate > CONVERT(smalldatetime,'01/01/2000')
       ORDER BY C.Name, E.NameLast, E.NameFirst, E.Number
            , ISNULL(I.Description,'NA')

 

* 키워드는 모두 대문자로..

* SELECT와 ORDER BY 뒤에 기술되는 컬럼을 한 줄에 하나씩 두어도 괜찮지만 쿼리가 넘 길어져서 한 눈에 안들어오면 더 불편한 것 같더라구요.

* JOIN문은 ON 구문까지 한 줄로... : 주석처리하며 디버깅 하기도 좋고 보기도 괜찮은 듯..

* 나머지는 길어질 경우 적당한 부분에서 줄바꿈..

 

이 정도의 룰을 가지고 작성하고 있답니다.

 

예전에도 한 번 소개한 적이 있는데... http://blog.naver.com/goodfeel/80009479241

제가 간단히 만든 쿼리 정렬해 주는 도구입니다.

중첩쿼리는 아직 지원하지 않습니다. ^^;;

 

출처 : http://msdn.microsoft.com/sql/default.aspx?pull=/library/en-us/dnsqlpro04/html/sp04l9.asp

 

아래는 기사 원문입니다.

-----------------------------------------------

 


..more


DTC에서 RPC를 이용하는데...

 

방화벽 사이에서의 RPC를 위한 setup 방법이 나온 MS 문서

 

 


..more


http://down.clubbox.co.kr/sqlserver/aevh

 

 

여기서 다운 받으시면 됩니다.

 

Windows 2003 standard edition

SQL Server 2005 Yukon standard edition

Visual Stdio 2005 beta 1(?)

 

이 설치된 virtual pc 이미지 파일과 Lab 메뉴얼이 들어 있습니다.

 

virtual pc 테스트 버젼도 같이 들어 있으니, virual pc만 설치하시면 바로 yukon 테스트를 하실 수 있습니다.

 

ISO파일입니다. 가상 CD 프로그램을 설치해서 이용하시면 됩니다.

 

 

요약

본 보고서는 Oracle 마케팅 부서의 대대적인 홍보 전략과 함께 최근 출시된 Oracle의 주력 데이터베이스 제품의 최신 버전인 Oracle Database 10g에 대한 1차 분석 결과입니다. Oracle은 이 새로운 버전을 그 동안 악명이 높았던 자사 데이터베이스 제품의 복잡성을 해결한 혁신적인 제품으로 내세우고 있으며, Windows 기반 서버를 사용하는 중소, 중견 기업을 겨냥하고 있습니다. 이들 중소, 중견 기업들은 현재 Microsoft의 SQL Server가 주도하고 있는 시장으로서, Oracle이 전통적으로 강세를 나타내고 있는 하이엔드 고객들에 비해 사용 편이성에 대한 요구가 훨씬 높은 것이 특징입니다.

또한, 본 보고서에서는 대대적으로 홍보가 된 이 제품의 기능 및 가치 제안을 설명하고 분석합니다. 보고서의 초점은 Oracle이 Microsoft SQL Server 2000에게 강력하게 도전하고 있는 다섯 가지 기술 분야에 맞추어져 있으며, 많은 경우 Microsoft SQL Server 2000와 비교해 설명합니다. 또한 향후 두 제품에 대한 심층적인 연구를 통해 두 제품의 차이점을 분명하게 밝히고 보다 세부적으로 논의하는 한편, Microsoft SQL Server 2000과 Windows 운영 체제에서 훨씬 경쟁력있는 RDBMS 솔루션으로서 확고하게 그 입지를 고수할 수 있도록 빈틈없이 정의할 것입니다.

소개

  • 전체 요약
  • 그리드 컴퓨팅
  • Oracle RAC
  • 관리 용이성
  • Business Intelligence
  • 총소유비용
  • 결론

 

--------------------------------------------------------

 

MS 사이트의 자료입니다.

 

출처 : http://www.microsoft.com/korea/sql/evaluation/compare/Oracle10g.asp

정규식을 이용하여 쿼리문을 정렬해 주는 넘을 함 만들어 봤습니다.

제 홈페이지에 간단하게 ASP .Net으로 만들어 놓았습니다.

현재는 간단한 수준의 정렬만 가능합니다.

 

중첩쿼리 지원이 가장 큰 관건입니다만, 일단 아쉬운데로 이 정도면 보기에 보다 편하게 정렬은 해 주니까요.

 

아래는 주소입니다.

 

혹시 버그나 원하시는 기능 있으면 덧글 달아주세요.

버그는 가급적 수정하겠지만 원하시는 기능은 봐서 추가가 될껍니다. ㅋㅋ

버그가 있더라도 이해 바랍니다. ^^''

 

http://goodfeel.pe.kr/sqlutilweb/sqlarranger.aspx

 

일단 아래 예제 문장을 그대로 붙여서 정렬해 보시면 됩니다. ^^''

 

아래 문장은 보안(?) 상의 이유로 컬럼 및 테이블 이름을 임의대로 변경한 쿼리 예제입니다.

 

아래와 같이 임의의 공백과 줄바꿈 탭들로 인해 가독성이 떨어지는 SQL문장의 예제입니다.

  (SELECT sum(-t.cashAmount) as aunt, p.prodd, c.chareId,  cc.deript, p.produme, 0, t.cpId, count(*) as tCount
   FROM tblTran t WITH(READUNCOMMITTED)
      JOIN tblO o
WITH(READUNCOMMITTED) on t.trnId = o.traId 
     JOIN
tblU u WITH(READUNCOMMITTED) on t.usmber = u.usember


      LEFT JOIN tblRe r  WITH
(READUNCOMMITTED) on t.psactionId  = r.tactionId

    WHERE trad = 6

AND t.registDt >= @startDt AND t.registDt < @endDt


     AND sc.seeId = 1  AND r.refund IS NULL

   GROUP BY p.prd, c.chard, cc.descript, p.productName, t.cpId)

 

 

ASP코드에서 직접 쿼리를 사용할 경우 디버깅을 위해 response.write로 출력할 경우 쫘~악 붙어 나오는 쿼리의 예제입니다.

SELECT sum(-t.cashAmount) as aunt, p.prodd, c.chareId,  cc.deript, p.produme, 0, t.cpId, count(*) as tCount FROM tblTran t WITH(READUNCOMMITTED) JOIN tblO o WITH(READUNCOMMITTED) on t.trnId = o.traId JOIN tblU u WITH(READUNCOMMITTED) on t.usmber = u.usember LEFT JOIN tblRe r  WITH(READUNCOMMITTED) on t.psactionId  = r.tactionId WHERE trad = 6 AND t.registDt >= @startDt AND t.registDt < @endDt AND sc.seeId = 1  AND r.refund IS NULL GROUP BY p.prd, c.chard, cc.descript, p.productName, t.cpId

 

 

보니까 SQL Server 2005에서 사용할 수 있는 API들인가보네요.. 글도 2004년 12월에 올라왔고...

내용은 제목대로 SQL Server를 tracing하고 재실행 할 수 있는 API라...

 

프로파일러를 만들 수 있겠네요. ^^;;

꽤 재미있을 듯...

Trace and Replay Objects: A New API for SQL Server Tracing and Replay

Slavik Krassovsky
Microsoft Corporation

December 2004

Applies To:
   Microsoft SQL Server 2005

Summary: This paper introduces Trace and Replay objects, a new feature in Microsoft SQL Server 2005. Trace and Replay objects is a new managed API for tracing, trace manipulation, and trace replay. (12 printed pages)

Contents

Introduction
Trace Objects
Replay Objects
Conclusion

 


..more


'programming > MSSQL' 카테고리의 다른 글

정규식을 이용한 쿼리문 정렬유틸(?)  (3) 2005.01.18
Data Access Technologies Road Map  (0) 2005.01.14
Google에서 제공하는 뉴스 그룹  (0) 2005.01.12

영문 자료이긴 하지만 전반적인 데이터 접근 기술들의 전반적인 동향이나 간략한 설명으로 전반적인 이해에 도움이 될 것 같습니다.

 

Data Access Technologies Road Map

Prash Shirolkar, Author
Alyssa Henry, Contributor
Stephen Pepitone, Contributor
Acey J. Bunch, Contributor
Microsoft Corporation

Created: January 2002
Revised: December 2004

Summary: Learn about the past, present, and future of the Microsoft data access technologies. (8 printed pages)

Contents

Introduction
Microsoft Data Access Components (MDAC)
Current MDAC Architecture
Current MDAC Components
Deprecated MDAC Components
MDAC ReleasesSQL Native Client
ADO.NET
Obsolete Data Access Technologies
For More Information

 


..more


현재 beta인거 보니 테스트 중인가본데...

뉴스그룹을 google 사이트에서 사용할 수 있습니다.

 

검색도 빠르고 괜찮은거 같던데...

 

아래 주소는

 

microsoft.public.sqlserver.programming에 대한 주소이고,

왼쪽 상단 이미지를 누르면 google newsgroup main으로 가서 다른 것도 이용하실 수 있습니다.

 

http://groups-beta.google.com/group/microsoft.public.sqlserver.programming

 

카페 왼쪽 아래 Link 부분에 추가해 두겠습니다.

 

많이 활용해 보세요~

error message

The server process has lost its connection with MS-DTC. This is expected if MS-DTC has stopped, or if MS-DTC failover has occurred on a cluster.

Server Application ID: {02D4B3F1-FD88-11D1-960D-00805FC79235}
Server Application Instance ID:
{D9197A81-84FB-4051-8AA9-F1156151D6C0}
Server Application Name: System Application
The serious nature of this error has caused the process to terminate.
Error Code = 0x8004d01c : A connection with the transaction manager was lost.

 

------------------------------------

 

출처 : http://weblogs.asp.net/rhurlbut/archive/2004/01/02/47211.aspx

 


..more


t는 SQLDMO의 Table 객체입니다.

 

QueryResults qr = t.EnumDependencies(SQLDMO_DEPENDENCY_TYPE.SQLDMODep_Children);
              
for(int i=1;i<=qr.Rows; i++)
{
    if(qr.GetColumnLong(i, 1) ==

        (long)SQLDMO_OBJECT_TYPE.SQLDMOObj_StoredProcedure)
    {
        string spName = qr.GetColumnString(i,2);
        Console.Out.Write("spName = {0}", spName);
}

'programming > MSSQL' 카테고리의 다른 글

windows 2003에서 이런 에러 발생 시  (0) 2005.01.11
[Ref]SQLDMO QueryResults  (0) 2004.12.28
Essential SQL Server 2005 For Developers #6  (0) 2004.12.23

SQLDMO를 사용하다 보면 특정 method의 결과가 QueryResults인 경우가 있다.

 

QueryResult는 다음과 같이 구성된다.


..more


Transact-SQL in SQL Server 2005

-         Exception Handling

-         Common Table Expressions

-         PIVOT

-         Ranking and Partitioning

-         Cross-Outer Apply

-         TOP enhancements

-         Auto output

 


..more


'programming > MSSQL' 카테고리의 다른 글

[Ref]SQLDMO QueryResults  (0) 2004.12.28
Essential SQL Server 2005 For Developers #5  (0) 2004.12.22
Essential SQL Server 2005 For Developers #4  (0) 2004.12.21

3일차

 

SQL Server Engine Features

 

-         New Data Types

-         Snapshot Isolation

-         Extended Triggers and Norifications

-         Revised BULK INSERT syntax

 


..more


.Net Types in SQL Server 2005

 

SQL Server 2000에서 사용되었던 UDT와 유사하지만 많이 다른 개념입니다.

그럼 UDT를 왜 사용해야 하는가?

è     기본적으로 제공되는 데이터 타입으로는 표현이 불가능한 부분을 데이터 타입화 하기 위한 방법으로, 예를 들어 위도, 경도 같은 값의 표현을 할 수 있게 됩니다.

 

SQL Server 2000 UDT와의 차이점

-         복수의 값을 표현할 수 있다

-         접근자(프로퍼트)를 이용하거나, 복잡한 로직처리를 mulators(일종의 method) 로 처리할 수 있다.

-         written in compiled language (.Net language로 구현)

 

Cataloging a UDT

UDF와 동일하게 UDT 역시 catalog에 등록을 해야 합니다.

순서도 동일합니다.

먼저 Assembly를 등록한 후, CREATE TYPE을 통해 등록을 합니다.

 

Working with UDTs

Type은 다음과 같은 곳에서 이용할 수 있다.

-         테이블의 컬럼을 정의할 때

-         변수나 파라미터를 정의할 때

-         UDF의 리턴값으로

 

사용예 : PointCls 라는 타입이 추가 된 경우

 

CREATE TABLE point_tab(

             Id int primary key,

             Thepoint PointCls)

 

INSERT INTO point_tab VALUES (1, 100:200)

 

 

Accessors and Mutators

-         property method로 이해하면 쉽습니다.

실제 UDT Accessors and Mutators를 정의할 때 .Net 코드로 property method를 구현하면 됩니다.

 

SELECT thepoint.X, thepoint.U FROM point_tab

와 같이 사용 가능합니다.

 

 

UDT state

UDT를 정의 할 때 일반적으로 두 가지의 Format으로 만들 수 있습니다.

-         Native : 단순한 형태. 일반적인 UDT를 만들 때 사용

-         UserDefined : 복잡한 형태로 구현해야 할 method가 많다. 보다 세밀한 제어가 필요할 때 사용

n         예를 들어 order by 같은 것을 할 경우 Native를 선택했을 경우에는 order by 뒤에 나온 값을 기준으로 정렬하되, 같은 값이 존재할 경우 UDT에 정의된 순서에 의해 정렬하게 되는데, 임의로 아니면 원하는 형태의 정렬방식 대로 정렬하고 싶다면 UserDefined로 만들어 세부적으로 제어할 수 있는 코드를 추가해야 한다.

 

UDG (user defined Aggregate)

-         간단하게 설명만 하면

-         UDT로 만든 컬럼을 SUM, AVG와 같은 작업을 하게 될 경우나 특별한 형태의 Aggreation 함수를 만들 경우 예를 들면

        SELECT MyFunc(lastname) FROM authors GROUP BY ReportsTo

 

         id           name

         1            a, b, c

         2            d, e

         3            null

 

              이런 식으로 출력하기 위한 함수를 정의하거나 할 때 사용한다.

2일차

 

The SqlServer Data Provider

 

ADO 프로그래밍을 해 보신 분이라면 SqlClient에 대해서 잘 아실껍니다.

이와 유사한 SqlServer라는 Data Provider가 있습니다.

SqlServersqlaccess.dll를 참조하여 사용하실 수 있습니다.

 

 

SQL Server programming models

-         SQL Server 2005 includes two data providers

n         System.Data.SqlServer

n         System.Data.SqlClient

 

SqlServer.Net로 만든 procedural code에서 사용할 수 있습니다. 이 전 게시물에도 이미 나온 내용이지만

-         UDF (User Define Function)

-         SP (Stored Procedure)

-         Trigger

등에서 사용할 수 있습니다.

 

일반적인 사용법은 SqlClient와 유사합니다.

차이점은 SqlClientSqlConnection을 사용하고,

SqlServerSqlContext를 사용한다는 점입니다.

또한, SqlServer를 사용하여 만든 procedural codeSQL Server내에서 실행되므로, 별도의 connection을 맺거나, 데이터가 네트웍을 통해 이동하거나 하지 않습니다.

 

SqlContext

-         SqlContext는 현재 실행중인 context를 나타냅니다.

n         GetConnection() : 현재 connection을 얻을 때

n         GetCommand() : 새로운 command를 얻을 때

n         GetTransaction() : 현재 transaction을 얻을 때

n         GetPipe() : output TDS streampipe를 얻을 때

u       Pipe는 메시지나 결과를 보낼 수 있다.

 

 

SqlDefinition/SqlExecutionContext

-         SqlCommand는 제목과 같이 두 가지로 쪼개질 수 있다.

n         SqlDefinition은 요청에 대한 정의를 나타낸다.

n         SqlExecutionContext는 명령을 실행한다.

 

아주 많이 쓰는 쿼리가 있을 경우, SqlDefinitionSqlExecutionContext 두 부분으로 나누어 SqlDefinition을 한 번만 정의한 후 실행 시 SqlExecutionContext만 실행하므로써, 보다 나은 성능을 기대할 수 있다.

물론 자세한 성능 비교는 SQL Server 2005 beta 3에서 할 수 있다고 한다.

 

자세한 코드는 생략

 

Command results

-         ADO 프로그래밍을 해 본 사람이라면 모두 쉽게 알 만한 내용들이다.

n         Scalar result

n         Single row result

n         Multi-row result

 

SqlTransaction

-         SqlContext.GetTransaction()으로부터 SqlTransactoin을 얻어와서 현재 트랜잭션이 있는지 유/무 등을 판별할 수는 있지만, 만약 진행 중인 Transaction이 있는 경우, 내부에서 그 트랜잭션을 commit, rollback 및 새 중첩 transaction을 시작할 수는 없다. 지원하지 않는다.

 

SqlTraggerContext

-         SqlContext.GetTriggerContext()를 통해 얻어온 SqlTriggerContext를 이용하여 Trigger를 만들 수 있다.

n         Tc.TriggerAction : 1(update), 2(insert), 4(delete)

 

 

오전에 배운 내용 정리 끝~

 

 

.Net Procedural Code

 

여기서 다룰 내용들

- Procedural code or Transact-SQL

- Writing .Net procedural code

- .Net data types and System.Data.SqlTypes

- Arrtibutes

 

 

어떤 .net language로든 SQL Server 2005 다음과 같은 것들을 만들 수 있다.

- stored procedure

- user defined functions

- triggers

 

 

.Net Code VS Transact-SQL

- Transact-SQL code는 data-access centric code에 보다 낫다

   * .net runtime을 로드할 필요가 없다.

   * 데이터 레이어에 직접 접근할 수 있다

   * 절차적 프로그래밍이다.

 

- .Net code는 non-data access code에 보다 낫다

   * 수학적인 연산

   * SQL Server 외부의 시스템 리소스에 접근이 필요한 경우

   * 객체지향 프로그래밍이다.

 

Limitions on functions (.net code로 function을 만들 때의 제약 사항)

- class는 반드시 public 이어야 한다.

- public static인 method 이어야 한다.

- nested class는 지원하지 않는다.

- method overloading도 지원하지 않는다.

- ref, out을 지원하지 않는다.

- datatype은 가급적 SqlTypes을 사용하는 것이 좋다.

 

몇 가지 내용이지만.. 간략히 정리하기엔 어려움이 좀 ^^''

그래서 여기까지만

 

 

+ Recent posts