Large Object data types
SQL Server 2000에서는 varchar 같은 경우는 사이즈에 제한이 있었습니다. 2005에서는 그 제한이 2G로 늘어나 사실상 무제한이나 다름이 없게 되었습니다.
- VARCHAR(MAX), NVARCHAR(MAX)
- VARBINARY(MAX)
와 같은 것들입니다.
또한 기존의 text data type의 경우는 concatenation이나 len, substring과 같은 작업이 불가능했지만, 새로 나온 데이터 타입들은 모두 지원합니다.
Snapshot Isolation
Isolation level에 대한 사전 지식이 있어야 할거 같은데…
2005에서 새로 등장한 isolation으로, 자질구래 한 설명 보다는 MSDN의 표를 참고하는 게 나을 거 같습니다.
Isolation level | Dirty read | Nonrepeatable read | Phantom | Concurrency Control |
Read uncommitted | Yes | Yes | Yes | Pessimistic |
Read committed (locking) | No | Yes | Yes | Pessimistic |
Read committed (snapshot) | No | Yes | Yes | Optimistic |
Repeatable read | No | No | Yes | Pessimistic |
Snapshot | No | No | No | Optimistic |
Serializable | No | No | No | Pessimistic |
단.. Snapshot Isolation을 사용하려면, DATABASE의 SNAPSHOT_ISOLATION을 Allow하겠다고 속성 변경을 해 줘야 합니다.
‘ALTER DATABASE pubs SET ALLOW_SNAPSHOT_ISOLATION ON’ 입니다.
Snapshot Isolation은 Serializable 레벨과 동일하게, 각종 폐해(dirty read, Phantom read, repeatable read)를 막아주지만, 병행제어(concurrency control) 방법이 낙관적이라는 차이만 있습니다.
낙관적 병행제어, 비관적 병행제어는 데이터베이스 수업이나 교재를 참고하시면 보다 자세한 내용을 아시겠지만… 간단히 설명 드리자면 명칭 그대로입니다. 낙관적은 병행제어를 낙관적으로 하겠다. 즉, 양쪽에서 같은 데이터를 서로 update해서 발생하는 문제는 많이 없을 거라고 가정하고 충돌 검사를 하는 방식이고, 비관적 병행제어는 update로 인한 충돌이 많이 발생할 것이라는 가정하에 충돌을 검사하는 방식입니다.
Snapshot Isolation level에서는 데이터를 versioning하여 세션 별도의 데이터를 control하게 됩니다. Copy set이 생기는 거죠. 그래서 한쪽 세션에서 update완료 후 commit해도 다른 세션에선 update된 내용을 볼 수 없습니다. 만약 양쪽에서 update 후 commit을 하면 늦게 commit한 세션에서는 에러 메시지를 만나게 됩니다.
실무에 그다지 도움이 될 만한 기능은 아니라고 생각되는데 혹시 생각이 다르신 분 계시면 덧글을…
Extended triggers
이건 꽤 유용한 기능이 되지 않을까 싶네요.
기존에 DML문장에만 trigger가 걸렸었는데, 이제는 DDL 문장에도 trigger를 걸 수가 있습니다. 뿐만 아니라, 각종 system event에도 비슷한 효과를 낼 수 있습니다.
System event는 기존의 create trigger를 통해 만들 수 있는 것은 아니고, event notification이라는 걸 이용하게 됩니다.
이 정도만 알고.. 자세한 내용은 추후 BOL이나 기타 자료를 참고하시기 바랍니다.
BULK INSERT simplification
BULK INSERT 같은 경우 제가 거의 이용해 본 적이 없어, 정확히는 잘 모르겠지만…
Query문을 이용해 외부 파일의 내용을 BULK INSERT할 수 있습니다.
자세한 설명은 없어서.. 걍 예제 구문만 소개하고 이만..
BULK INSERT AdventureWorks.Sales.SalesOrderDetail
FROM 'f:\orders\lineitem.tbl'
WITH
(
FIELDTERMINATOR =' |',
ROWTERMINATOR =' |\n'
)