프로그래밍/DB 2010. 1. 8. 17:50


테이블 복사가 필요한 경우가 있다.

데이터 복사만 필요한 경우라면 쉽게 해결 되지만,

테이블의 제약조건등과 요소가 필요한 경우에는 여러 가지

고려해야 하는 것들이 있다.

 

그럼 테이블 복사를 해보도록 하겠다.

 

1.     테이블을 복사하는 가장 단순한 방법

SELECT  * INTO  TmpTable

FROM     OriTable

 

2.     테이블 생성 후, 데이터 + 제약조건 복사

CREATE TABLE TmpTable (

  ID INT NOT NULL PRIMARY KEY,

  Name VARCHAR(40) NOT NULL

)

 

SELECT  * INTO  TmpTable

FROM     OriTable


3.     테이블 생성 후, 데이터 + 제약조건 + IDENTITY 복사

 ‘*’를 사용할 수 없고 명시적으로 Column명을 선언해 줘야 한다.

 

CREATE TABLE TmpTable (

  ID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY,

  Name VARCHAR(40) NOT NULL

)

SET IDENTITY_INSERT TmpTable ON

 

INSERT  INTO TmpTable ( ID,  Name )

SELECT  ( ID,  Name )

FROM    OriTable


4. 테이블 + 제약조건 + 인덱스 + 트리거 복사 ( SSMS 사용 : SQL Server Management Studio )

※ 스크립트 생성 의도에 맞게 옵션을 선택하고 실행하면 되지만,
스크립트가 생성 하려는 테이블 + 제약조건 + 인덱스 + 트리거가 존재하는 경우 충돌이 일어날 수 있다.
[ 중복확인 Tip ] => 아래 확인



1. 서버의 테이터베이스 선택 > 작업 > 스크립트 생성

2. 생성한 스크립트 실행




[ 중복 확인 팁 ]

SP_DEPENDS [테이블명]          -- 테이블종속성확인

SP_HELPCONSTRAINT [테이블명]   -- 테이블제약조건확인

SP_HELPINDEX [테이블명]         -- 테이블인덱스확인

 

/* 테이블을 사용하는 프로시져 검색*/

SELECT  *

FROM    sys.procedures

WHERE   OBJECT_DEFINITION(OBJECT_ID) LIKE '%[테이블명]%'

 

/*  테이블을 사용하는 트리거 검색*/

SELECT  *

FROM    sys.triggers

WHERE   OBJECT_DEFINITION(OBJECT_ID) LIKE '%[테이블명]%'

YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST
  1. ㅇㅅㅇ 2013.02.22 13:36  댓글주소  수정/삭제  댓글쓰기

    잘 보고 가요~ 덕분에 세팅 잘 했네요

  2. 오즈마스터™ 2020.01.23 14:38 신고  댓글주소  수정/삭제  댓글쓰기

    2.번항목이 좀 잘못된듯 싶어서요.

    테이블 생성후 select * into ...... 는 안되지 않나요?
    이미 테이블이 존재하기 때문에





프로그래밍/DB 2009. 12. 24. 18:01


Access Pattern이란?
말 그대로 접근(Access) 하는 양식(Pattern) 이다.
원하는 데이터를 빠르게 얻기 위해 접근 하는 방법 정도로 이해하면 될것 같다. ( 아마도 ^^ ) 
억세스 패턴 처음 시간으로 용어 정리를 하도록 하겠다.

1.
용어정리

 

A. 페이지(Page) 

    1. 데이터를 저장하고 처리하는데 사용되는 가장 기본적인 입출력 단위이다.

    2. 저장하는 데이터와 그 내부 구성에 따라 8가지 형태로 나뉜다.

  - Data : text, ntext, image 형태를 제외한 모든 데이터 레코드

  - Index : 인덱스 데이터 저장

  - Text / Image : text, ntext, image 형태의 데이터 저장

  - GAM : Global Allocation Map, 할당된 익스텐트 정보들을 저장

  - PFS : Page Free Space, 페이지의 여유 공간 정보를 저장

  - IAM : Index Allocation Map, 테이블과 인덱스에 의해 사용되는 익스텐트 정보들을 저장


  - BCM : Bulk Changed Map, 마지막 백업 로그문 이후의 벌크 잡업에 의해 수정된 익스텐트 정보들 저장

  - DCM : Differential Changed Map, 마지막 백업 데이터베이스문 이후에 변경된 익스텐트 정보들 저장

 

B. 익스텐트(Extent)

    
1. 서버에서 테이블과 인덱스를 저장하고 관리하는데 사용되는 공간의 기본 할당 단위이다.
     2. 연속된 8개의 페이지들로 이루어져 있다.
     3. 구성된 페이지 종류에 따라 혼합 익스텐트(Mixed Extent)와 단일 익스텐트(Uniform Extent)로 나뉜다.

 

C. 인덱스

  1. 테이블에 대한 동작의 속도를 높여주는 자료 구조를 일컫는다. ( 책 뒷부분에 있는 색인과 같은 역할 )

  2. 잦은 데이터의 변경 작업 ( INSERT, UPDATE, DELETE ) 시에 성능이 나빠지는 단점이 있다.

  3. 테이블의 하나 이상의 필드를 인덱스 필드로 지정할 수 있다.

 

- 클러스터드 인덱스 : Clustered Index, 단순하게 영어사전 처럼 구성된 책과 같다.
    영어사전과 같이 책의 내용 자체가 순서대로 정렬이 되어 있어서 인덱스 자체가 책의 내용과 같다.
    클러스터드 인덱스로 만들어진 클러스터드 인덱스 테이블은 "인덱스 순서 = 물리적인 페이지 순서"
    라는 말이다. 인덱스 순서와 물리적인 데이터 페이지 순서가 동일하므로 데이터를 검색할 때 가장
    빠를 수 밖에 없다.

- 비클러스터드 인덱스 : Non-Clustered Index, 그냥 색인이 있는 일반 책과 같다. 인덱스가 별도로 있고
    인덱스를 찾은 후에 기재된 해당 페이지로 가야만 ( Lookup ) 실제 내용을 접할 수 있다.

- : Heap, 데이터를 아무런 순서 없이 저장한느 형태, 비클러스터드 인덱스를 사용하거나 인덱스가
    없는 경우, 즉 클러스터드 인덱스가 아닌 경우 이다.
    힙 형태인 경우 해당 데이터 페이지들간에 아무련 연관이 존재하지 않는다. 따라서 전체 데이터
    페이지들을 풀 스캔(Full Scan)할 수 밖에 없다.


YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST




프로그래밍/DB 2009. 9. 16. 17:54
Server 2005] OUTPUT 절(Transact-SQL)

INSERT, UPDATE, DELETE와 같은 DML작업을 수행할 때 변경된 내용만 알고 싶을때 난감할 때가 있다.

이전에는 INSERT된 결과를 구할때 IDENTITY속성의 필드를 INSERT전후로 비교하여 결과를 얻어 냈다면
(테이블에 Lock을 걸고...구차하게 ㅡㅡㅋ)

OUTPUT을 사용하면 DML문에 영향을 받은 각 행의 정보 또는 각 행을 바탕으로 한 식을 반환하여
결과를 테이블 또는 테이블 변수에 삽입할 수 있다.

자세한 설명은 참고 내용에서.. ^^;

[참고]
Microsoft.TechNet : http://technet.microsoft.com/ko-kr/library/ms177564(SQL.90).aspx
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST




프로그래밍/DB 2008. 7. 29. 14:11
A : Table Name

1) DBCC CHECKIDENT ('A', RESEED, 0)
    - A Table의 Identity를 0으로 초기화 한다.
   
2) DBCC CHECKIDENT ('A', RESEED)
    - A Table의 Identity를 현재 Row를 기준으로 초기화 한다.
    - 현재 Row가 3개 있다면 3으로 초기화
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST




프로그래밍/DB 2008. 4. 8. 15:30

출처 : ZDNet Korea


데이터셋의 성능 향상시키기
심의준(IT 테크라이터)   2005/11/14
닷넷 프레임웍 2.0 출시에 맞추어 ADO.NET도 2.0으로 변화하게 되었다. 어플리케이션을 제작할 때 ADO의 사용은 필수적이라 할 만큼 많은 곳에서 ADO를 사용하게 된다. 어느덧 ADO에서 출발하여 ADO.NET을 거쳐 2.0으로까지 발전이 되었다. 이번에는 ADO.NET 2.0 에서 어떤 변화를 갖고 왔는지에 대해 중요한 부분 몇 가지를 선택하여 살펴보고자 한다.

ADO.NET의 전반적인 부분을 소개하기에는 다소 무리가 있다는 판단에, ADO.NET에 대해 어느 정도 이해를 하고 있다는 가정하에 소개하고자 한다.

그러면 DataSet(DataTable)을 중심으로 변화를 살펴보도록 하자.

DataTable 의 구조 변화
닷넷 프레임웍의 Data Provider와 Data Set 은 아래와 같은 구조를 가지고 있다.

Data Provider와 DataSet (출처: MSDN)

DataSet은 ADO.NET의 가장 핵심적인 객체로써 비연결 기반의 데이터 모델을 말한다. 즉, 메모리 내에서 운영되는 작은 데이터베이스라고 이해할 수 있다. DataSet을 통해 Data에 대한 처리가 가능하게 된다. <그림1>의 DataSet의 구조도에서 알 수 있듯이 내부적으로는 DataTable을 포함하게 된다.

ADO.NET 2.0으로 넘어오면서 DataSet(DataTable)은 향상된 성능을 갖게 되었다. 이번 버전에서는 DataTable의 인덱싱 엔진이 새롭게 구현되었으며, 이로 인해 데이터를 처리할 때 이전버전과 비교하여 월등한 성능을 나타내게 되었다. MSDN에 소개된 성능 비교 샘플을 확인해 보면 직접 그 차이를 확인해 볼 수 있다. 이제는 DataTable의 엔진 변화로 인해 데이터에 대한 Insert, Update 및 Delete 작업을 보다 신속하게 처리할 수 있게 되었다.

Binary Serialize
이전 버전(닷넷 1.1)에서는 DataSet을 Serialize하는 경우 항상 XML로만 Serialize가 가능하였다. XML로만 가능하였던 가장 큰 이유는 데이터 호환성 때문이었다. 하지만, XML의 경우 호환성은 좋지만 다량의 데이터의 경우 무겁다라는 단점을 갖게 되었다. 따라서, 닷넷간의 통신에서 굳이 XML로 해야 할 필요가 있을까라는 의문을 갖게 되었으며, 이를 보완하기 위해 닷넷 2.0에서는 Binary 로 Serialize가 가능하도록 설계가 되었다.

다음과 같은 속성 지정을 통해 Binary로 Serialize가 가능하게 된다.

DataSet.RemotingFormat = SerializationFormat.Binary

이렇게 Binary 를 이용하는 경우 XML에 비해 빠르고 가벼우며, 다량의 데이터에서는 XML과 비교하여 좋은 성능을 가져오게 된다. 데이터 양이 줄어들면 처리에 따른 시스템 리소스가 절약 되며 네트워크 소통량이 줄어들게 되므로 더 나은 성능을 얻을 수 있게 된 것이다.

독립적인 DataTable
ADO.NET 2.0 이 갖는 큰 변화 중 하나는 독립적으로 DataTable을 사용할 수 있다는 것이다. 이전 버전에서 Serialize하기 위해서는 DataSet 내부에 DataTable이 포함되어야만 했다. 하자만, 일반적으로 하나의 DataTable을 처리하기 위해서 DataSet에 포함시킬 때 효율적이지 못한 경우가 종종 발생하였다. 이는 DataSet에서 시작하여 완료가 되어야 하는 구조였기 때문이다다. 이로 인해 많은 이들이 유연하면서도 편리한 독립적인 DataTable을 필요로 하게 되었으며 이번 버전에 이를 반영하여 DataTable을 독립적으로 Serialize할 수 있게 되었다.

독립적인 DataTable 지원을 통해 우리는 Web Service와 Remoting에서 DataTable을 사용(리턴)할 수 있게 되었으며, DataSet에서 수행했던 것들을 독립적인 DataTble 만으로도 수행이 가능하게 되었다. DataTable은 DataSet 처럼 XML에 대한 기본 메쏘드(ReadXML, ReadXMLSchema, WriteXML, WriteXMLSchema)를 지원한다.

DataTable의 새로운 메쏘드
새로운 DataTable은 이전에 비해 많은 메쏘드를 제공해 준다. 새로운 메쏘드 중 유용한 메쏘드 몇 개를 살펴보도록 하자.


ADO.NET 2.0 의 DataTable이 새롭게 제공하는 메쏘드 중 필자가 생각하는 주요 메쏘드를 간략히 정리해 보았다. 이 외에도 유용하게 사용될 수 있는 다양한 메쏘드가 제공이 되므로 MSDN등을 통해 찾아보길 바란다.

오늘 소개한 내용은 DataSet 및 DataTable이 갖는 새로운 변화 중 일부에 불과하다. 개인적으로 중요하다고 생각되는 부분을 소개한 것이며, ADO.NET 이라는 부분이 워낙 광범위하며 또한 중요하기 때문에 VB.NET 2005를 소개하면서 ADO.NET 2.0을 짚고 넘어가자는데 의미를 두었다. ADO.NET의 변화와 의미에 대해 다음 회에 계속하여 연재하도록 하겠다.

필자 심의준님은 MCSD .NET이며 웹젠에서 개발자로 근무 중이다.
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST