데이터 정렬 충돌 문제가 발생했단 말이지...


SELECT *

  FROM TABLE_A EI

RIGHT OUTER JOIN TABLE_B URO ON URO.BODY = EI.INFO_BODY

INNER JOIN TABLE_C UMFSD ON URO.FSC = UMFSD.FSC

 WHERE URO.YYYYMMDD = '20120807'

ORDER BY URO.CarDate ASC


위의 쿼리를 날려보니... 아래와 같이 데이터 정렬 충돌했다는 메세지가 뜬다.


Msg 468, Level 16, State 9, Line 4

Cannot resolve the collation conflict between "Chinese_PRC_CI_AI" and "Chinese_PRC_CI_AS" in the equal to operation.


생각없이 내가 DB를 만든 결과이다. 사실 뭐... 어떻게 만들어야한다는 지시가 없었기 때문에 아무생각없이 Default로 DB를 만들었다.
데이터정렬확인하는 것이 기본이긴 하겠지만... 누가 잘못했는지 잘 모르겠다... 그치만 누구의 잘잘못을 떠나 문제 해결이 우선이므로
일단 구글링했다. 답인지는 모르겠지만 결과적으로 해결을 하게 돼 현재까지는 이게 최선의 방법이라고 생각한다.

SELECT *
  FROM TABLE_A EI
RIGHT OUTER JOIN TABLE_B URO ON URO.BODY = EI.INFO_BODY collate Chinese_PRC_CI_AS
INNER JOIN TABLE_C UMFSD ON URO.FSC = UMFSD.FSC
 WHERE URO.YYYYMMDD = '20120807'
ORDER BY URO.CarDate ASC

위의 쿼리에 'collate Chinese_PRC_CI_AS' 이 부분을 추가하여 간단하게 해결했다.


WRITTEN BY
테네시왈츠
항상 겸손하게 항상 새롭게 항상 진실하게

,

나는 오늘 다시 한번 깜짝 놀란다. VIEW에 Index를 걸수있다니? 

DB구조설계의 관점에서 봤을때 과연 View에 index를 건다는 것이 과연 옳은 것은 아니라고 생각하나

헹여나 View테이블의 속도의 영향을 미치기 위해 필요할 수도 있겠다란 생각을 해 본다.

단, Enterprise Edition 버전에서만 가능하다고 한다.


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

다른 여러개의 테이블을 하나의 테이블 처럼 보여주는 View...


참 사용하기 편한데 많은 정보를 가져오다 보면 속도가 참 느려지네요...


그래서 View에 인덱스를 걸려고 하니까..


뷰 'View'이(가) 스키마 바인딩되지 않았으므로 이 뷰에 인덱스을(를) 만들 수 없습니다.   <---  요런 에러가 나타나시네...


그래서 열심히 찾아본 결과....


View 생성시 WITH SCHEMABINDING 요거 한줄 작성해 주시면됩니다..


View 생성 쿼리


CREATE VIEW SHOW_VIEW

WITH SCHEMABINDING

AS

SELECT NAME, NICK FROM SHOW_TABLE


Index 생성 쿼리


CREATE UNIQUE CLUSTERED INDEX svIndex01 ON SHOW_VIEW(NAME)

[출처] MS-SQL View Index 만들기...|작성자 다스누렁

http://blog.naver.com/PostView.nhn?blogId=nuricle&logNo=80129155686&redirect=Dlog&widgetTypeCall=true

'030. Database > 02. MS_SQL' 카테고리의 다른 글

[MSSQL] Merge Table  (0) 2012.08.17
[MSSQL] 데이터 정렬관련  (0) 2012.08.12
[MSSQL] 달력 테이블 만들기  (0) 2012.06.22
[MSSQL] MSSQL Linked Server  (0) 2012.06.15
[MSSQL] 파티션 테이블  (0) 2012.06.14

WRITTEN BY
테네시왈츠
항상 겸손하게 항상 새롭게 항상 진실하게

,


-- drop table CheckDayOff

create table CheckDayOff

(dt char(10) primary key, flag bit default '0')


insert into CheckDayOff (dt)  select a.* from (

select convert(char(10),dateadd(d,number,'2012-01-01'),120) dt

from master..spt_values

where type = 'P' and number <= datediff(d,'2012-01-01','2012-12-31')

) a



'030. Database > 02. MS_SQL' 카테고리의 다른 글

[MSSQL] 데이터 정렬관련  (0) 2012.08.12
[MSSQL] View 테이블에 index를 걸자  (0) 2012.07.11
[MSSQL] MSSQL Linked Server  (0) 2012.06.15
[MSSQL] 파티션 테이블  (0) 2012.06.14
[MSSQL] 인덱스 조각화 정보  (0) 2012.06.14

WRITTEN BY
테네시왈츠
항상 겸손하게 항상 새롭게 항상 진실하게

,

MSSQL Linked Server

Linked Server
분 산 쿼리를 사용하면 여러 SQL Server 인스턴스에 저장된 분산 데이터 및 관계형 및 비관계형 데이터 원본에 저장되어 OLE DB 공급자를 통해 액세스되는 유형이 다른 데이터 까지 데이터 원본에 대해 분산 쿼리, 업데이트, 명령, 트랜잭션 등을 수행할 수 있습니다


/* mssql

 Linked Server 만듬

*/


exec sp_addlinkedserver
 @server='linkDB_Server',           -- 연결할 서버 이름 생성(아무거나)
 @srvproduct = '',                      -- 연결된서버의 제품이름(공백처리)
 @provider = 'SQLOLEDB',         -- SQL 서버면 그대로
 @datasrc = '111.111.111.111',     -- 연결할 서버 아이피      
 @provstr='',                             -- 공급자문자열(공백-필요하다면적음)
 @catalog='Northwind'               -- 특정카탈로그(데이터베이스명)                                
go



-- linkDB_Server에 접속할수 있는 계정을 생성한다.
exec sp_addlinkedsrvlogin 'linkDB_Server', 'false', null, 'login_id', 'login_password' 
go


select * from linkDB_Server.Northwind.dbo.Orders -- 링크디비명.데이터베이스명.소유자.테이블명

select * from openquery(linkDB_Server, 'select * from Northwind.dbo.Orders')


/*

제대로 등록되어있는지 확인
use master
go

-- sp_addlinkedserver의 구성을 살펴보면 Linked Server의 정보가 sysserver 테이블에 있음을 알 수 있다.
exec sp_helptext sp_addlinkedserver


-- 등록이 되었나 확인해보자.
select * from sysservers


*/


-- 등록된 Linked Server의 정보를 지운다.
exec sp_droplinkedsrvlogin @rmtsrvname = 'linkDB_Server' , @locallogin = NULL

---------------------------------- 원격서버 삭제하기
exec sp_dropserver @server = 'linkDB_Server'



기타

/* Oracle

dblink

*/
EXEC sp_addlinkedserver 
  @server = 'INSIDER'
  , @srvproduct = 'oracle'
  , @provider = 'MSDAORA'
  , @datasrc = '211.169.***.***'
Go

EXEC sp_addlinkedsrvlogin 
  'INSIDER'
  , 'false'
  , NULL
  , 'scott'
  , 'tiger'
Go



/* File Linked */
-- Create File Linked Srv
exec sp_addlinkedserver FileSrv, 'Jet 4.0',
'Microsoft.Jet.OLEDB.4.0',
'c:\',
null,
'Text'

-- Login At File Linked Srv
exec sp_addlinkedsrvlogin FileSrv, false, sa, null

-- Drop File Linked Srv Drop
exec sp_droplinkedsrvlogin 'FileSrv', null
exec sp_dropserver FileSrv

-- Show TxtTable File Linked Srv
exec sp_tables_ex FileSrv



[참조] http://syynice.egloos.com/10624085


WRITTEN BY
테네시왈츠
항상 겸손하게 항상 새롭게 항상 진실하게

,

[참조] http://blog.eloitcube.co.kr/7


이 기능은 SQL2005 Enterprise Edition , Developer Edition에서만 지원됩니다.


SQL2005의 파티션 기능을 이용하여 대용량 테이블 혹은 인덱스를 특정 컬럼의 값을 기준으로 분할하여, DB에 정의된 여러개의 파일그룹에 분산하여 저장이 가능하고, 이를 통하여, 데이터베이스 백업, 복원, 데이타 조회등을 보다 더 효율적으로 할 수 있습니다.


분할된 테이블 또는 인덱스를 만드는 단계는 아래와 같습니다.

1. 파티션 함수 생성 (테이블 또는 인덱스를 분할하는 방법을 지정)

2. 파티션 스키마 생성 (파티션 함수에 의해 생성된 파티션을 사용자가 정의한 파일 그룹 집합에 매핑)

3. 테이블 혹은 인덱스 생성시 파티션 스키마 지정


그럼 테스트를 통해서 데이터 파티셔닝에 대한 이해를 좀 더 쉽게 해보도록 하죠.


우선 아래와 같은 테스트 DB (PartitionTestDB) 를 하나 생성하겠습니다.

여기서 중요한 부분은 파일그룹을 여러개로 하여 생성하는데 있습니다.


USE master

GO


IF  EXISTS (SELECT name FROM sys.databases WHERE name = N'PartitionTestDB')

DROP DATABASE PartitionTestDB

GO


CREATE DATABASE PartitionTestDB

      ON PRIMARY

       (NAME='Primary FG',

        FILENAME=

          'C:\MSSQL\Data\Primary\Primary FG.mdf',

        SIZE=5,

        MAXSIZE=500,

        FILEGROWTH=1 ),

      FILEGROUP PartitionTESTDB_FG1

       (NAME = 'PartitionTESTDB_FG1',

        FILENAME =

         'C:\MSSQL\Data\FG1\PartitionTESTDB_FG1.ndf',

        SIZE = 5MB,

        MAXSIZE=500,

        FILEGROWTH=1 ),

      FILEGROUP PartitionTESTDB_FG2

       (NAME = 'PartitionTESTDB_FG2',

        FILENAME =

         'C:\MSSQL\Data\FG2\PartitionTESTDB_FG2.ndf',

        SIZE = 5MB,

        MAXSIZE=500,

        FILEGROWTH=1 ),

      FILEGROUP PartitionTESTDB_FG3

       (NAME = 'PartitionTESTDB_FG3',

        FILENAME =

         'C:\MSSQL\Data\FG3\PartitionTESTDB_FG3.ndf',

        SIZE = 5MB,

        MAXSIZE=500,

        FILEGROWTH=1 )

GO


SP_HELPDB PartitionTestDB

GO


자 이렇게 해서 3개의 파일그룹으로 분할한 데이터베이스 PartitionTestDB를 만들었습니다.


이제, 파티션 함수를 생성할 차례입니다.

앞서 설명한 것처럼 파티션 함수는 테이블 혹은 인덱스를 어떤 기준으로 분할할 것인가에 대한 정의를 하는 것 입니다.

생성 구문은 아래와 같습니다.


CREATE PARTITION FUNCTION partition_function_name ( input_parameter_type )

AS RANGE [ LEFT | RIGHT ]

FOR VALUES ( [ boundary_value [ ,...n ] ] )

[ ; ]


여기서 input_parameter_type 은 분할에 사용되는 컬럼의 데이타 형식입니다.

참고로 text, ntext, image, xml, timestamp, varchar(max), nvarchar(max), varbinary(max), 별칭 데이터 형식 또는 CLR 사용자 정의 데이터 형식은 분할기준 컬럼으로 사용할 수 없습니다.


자 그럼 파티션 함수를 만들어 보도록 하지요.


USE PartitionTestDB

GO

CREATE PARTITION FUNCTION pf_DataRange (int)

    AS RANGE LEFT FOR VALUES (100,200)

GO


위 파티션 함수는 함수명은 pf_DataRange, 파티션 기준 컬럼의 형식은 int형식, 그리고 파티션 수는 3개로 분할하겠다고 정의를 하였으며, 3개의 파티션에는 각각 100보다 작거나 같은 수, 100보다 크고 200보다 작거나 같은 수, 200보다 큰 수로 분류되어 저장되게 됩니다.


여기서 RANGE LEFT로 구성한 것과 RANGE RIGHT로 구성한 것의 차이를 잠깐 살펴보겠습니다.


예) RANGE LEFT FOR VALUES (100,200)

파티션 1 : 컬럼값 <= 100

파티션 2 : 100 < 컬럼값 <= 200

파티션 3 : 200 < 컬럼값


예) RANGE RIGHT FOR VALUES (100,200)

파티션 1 : 컬럼값 < 100

파티션 2 : 100 <= 컬럼값 < 200

파티션 3 : 200 <= 컬럼값


이제 다음 단계인 파티션 스키마를 생성해 보도록 하겠습니다.


생성구문

CREATE PARTITION SCHEME partition_scheme_name

AS PARTITION partition_function_name

[ ALL ] TO ( { file_group_name | [ PRIMARY ] } [ ,...n ] )

[ ; ]


USE PartitionTestDB

GO

CREATE PARTITION SCHEME ps_DataRange

    AS PARTITION pf_DataRange

    TO (PartitionTESTDB_FG1,PartitionTESTDB_FG2,PartitionTESTDB_FG3);

GO

파티션 스키마는 분할된 테이블 및 인덱스를 어떤 파일 그룹에 매핑 할지를 정의 합니다.

앞서 생성한 파티션 함수와 비교해보면 각 파티션 그룹에 아래 조건을 기준으로 데이타들이 저장되게 됩니다.

PartitionTESTDB_FG1 : 컬럼값 <= 100

PartitionTESTDB_FG2 : 100 < 컬럼값 <= 200

PartitionTESTDB_FG3 : 200 < 컬럼값


이제 파티셔닝을 할 테이블을 만들고 샘플 데이타를 입력하여 실제로 지정한 기준대로 분할되어 저장되는지 확인을 해보도록 하겠습니다.


--테스트 테이블 생성. ON구문을 주의해서 보자!!

CREATE TABLE TBL_User

(

    idx int not null,

    name varchar(20),

    regdate smalldatetime,

    salary int

) ON ps_DataRange (idx);

GO


SET NOCOUNT ON

GO


-- 샘플데이타 400개 입력

DECLARE @i INT

SET @i = 1

WHILE (@i <= 400)

BEGIN

    INSERT INTO TBL_User VALUES (@i,'TEST',GETDATE(),@i*100)

    SET @i = @i + 1

END

GO


--입력된 결과 보기

SELECT * FROM TBL_USER

GO


idx         name                 regdate                 salary

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

1           TEST                 2006-12-20 20:45:00     100

2           TEST                 2006-12-20 20:45:00     200

3           TEST                 2006-12-20 20:45:00     300

4           TEST                 2006-12-20 20:45:00     400

5           TEST                 2006-12-20 20:45:00     500

6           TEST                 2006-12-20 20:45:00     600

....

....

391         TEST                 2006-12-20 20:45:00     39100

392         TEST                 2006-12-20 20:45:00     39200

393         TEST                 2006-12-20 20:45:00     39300

394         TEST                 2006-12-20 20:45:00     39400

395         TEST                 2006-12-20 20:45:00     39500

396         TEST                 2006-12-20 20:45:00     39600

397         TEST                 2006-12-20 20:45:00     39700

398         TEST                 2006-12-20 20:45:00     39800

399         TEST                 2006-12-20 20:45:00     39900

400         TEST                 2006-12-20 20:45:00     40000


자 이렇게 해서 400개의 데이타가 삽입되었습니다.

그러면, 우리가 앞서 지정한 대로 파일그룹에 분할되어 저장되었는지 확인해 봅시다.


select * from sys.partitions where object_name(object_id)='TBL_USER'

GO


partition_id              object_id   index_id    partition_number      hobt_id              rows

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

72057594038517760    2105058535  0           1                72057594038517760    100

72057594038583296    2105058535  0           2                72057594038583296    100

72057594038648832    2105058535  0           3                72057594038648832    200


3개의 파티션에 각각 100개,100개,200개의 row가 저장된 것을 확인 할 수 있습니다.


예제에서는 파일그룹들을 모두 동일한 디스크에 생성하였지만, 테스트 환경의 문제로 이해하셔야 하구요

분리한 파일그룹들이 각각의 디스크로 분리되어야 디스크IO에 대한 동시성이 향상된다고 볼수 있겠습니다.


WRITTEN BY
테네시왈츠
항상 겸손하게 항상 새롭게 항상 진실하게

,

[참조] http://tiger5net.egloos.com/5030239


지정한 테이블이나 뷰의 데이터와 인덱스에 대한 조각화 정보를 표시한다.

DBCC SHOWCONTIG는 SQL Server 2005/2008에서 일부 새로운 기능을 지원하지 않는다. 
예를 들면 다음과 같다.

1) 지정된 테이블이나 인덱스가 분할되는 경우 DBCC SHOWCONTIG는 지정된 테이블이나 인덱스의 첫 번째 파티션만 표시 
2) DBCC SHOWCONTIG는 행 오버플로 저장소 정보와 nvarchar(max), varchar(max), varbinary(max) 및 xml과 같은 새로운 행 외부 데이터 형식을 표시하지 않음

SQL Server 2005/2008의 모든 새로운 기능은 sys.dm_db_index_physical_stats 동적 관리 뷰에서 완벽히 지원.

예) 
DBCC SHOWCONTIG (Table)
DBCC SHOWCONTIG (Table, Index)
DBCC SHOWCONTIG (Table) WITH FAST 

WITH FAST -- 인덱스의 고속 검색과 최소 정보 출력 수행 여부를 지정합니다. 
                     고속 검색은 인덱스의 리프 또는 데이터 수준 페이지를 읽지 않습니다.
WITH NO_INFOMSGS -- 심각도가 0에서 10 사이인 모든 정보 메시지를 표시하지 않습니다.

추가) 실행결과 값 해석 (출처 : http://databaser.net/moniwiki/wiki.php/DBCCShowContig%ED%95%B4%EC%84%9D)


DBCC SHOWCONTIG
    [     ( { table_name | table_id | view_name | view_id }
             [ , index_name | index_id ]
        ) 
    ] 
     [ WITH { ALL_INDEXES
                 | FAST [ , ALL_INDEXES ]
                 | TABLERESULTS [ , { ALL_INDEXES } ]
                 [ , { FAST | ALL_LEVELS } ] 
            }
    ]

DBCC ShowContig('test_table')

DBCC SHOWCONTIG이(가) ' test_table ' 테이블을 스캔하는 중...
테이블: 'nexen' (677577452); 인덱스 ID: 1, 데이터베이스 ID: 5
TABLE 수준 스캔이 수행되었습니다.
- 스캔한 페이지................................: 100
- 스캔한 익스텐트..............................: 17
- 전환된 익스텐트..............................: 16
- 익스텐트 당 평균 페이지 수........................: 5.9
- 스캔 밀도[최적:실제].......: 76.47% [13:17]
- 논리 스캔 조각화 상태 ..................: 0.00%
- 익스텐트 스캔 조각화 상태 ...................: 82.35%
- 페이지 당 사용 가능한 평균 바이트 수.....................: 138.6
- 평균 페이지 밀도(전체).....................: 98.29%
DBCC 실행이 완료되었습니다. DBCC에서 오류 메시지를 출력하면 시스템 관리자에게 문의하십시오.

항목설명
스캔한 페이지1페이지 = 8KB 이므로 스캔한 페이지는 800KB
스캔한 익스텐트익스텐트 = 1페이지 * 8 이므로 17 * 8KB * 8 = 1088 KB
전환된 익스텐트익스텐트를 스캔하면서 익스텐트와 익스텐트 사이를 옮겨간 횟수를 의미.
익스텐트 당 평균 페이지 수하나의 익스텐트는 8개의 페이지라고 볼 수 있는데 익스텐트가 조각나서 하나의 익스텐트에 평균 5.9개의 페이지가 있는 것
스캔밀도스캔밀도가 100% 이면 조각난 상태가 아니며 100% 미만이면 그 만큼 조각난 상태. 그러므로 위의 경우 약 25%가 조각난 상태라고 볼 수 있다.|
논리 스캔 조각화 상태논리적인 조각화 상태를 의미합니다. 삽입, 갱신 등의 DML문에 의해서 인덱스의 트리구조가 전환된 것을 의미.
익스텐트 스캔 조각화 상태인덱스의 잎 페이지 스캔에서 순서가 바뀐 익스텐트의 비율.
페이지 당 사용 가능한 평균 바이트 수하나의 페이지는 최대 8060바이트가 저장될 수 있다. 이것은 페이지들이 사용할 수 있는 가용 페이지의 공간을 의미.
평균 페이지 밀도(전체)스캔한 페이지의 조각화 상태. 100%이면 조각난 상태가 아니며, 100% 미만이면 조각난 상태.

[출처] 인덱스 조각화 정보|작성자 빡스


WRITTEN BY
테네시왈츠
항상 겸손하게 항상 새롭게 항상 진실하게

,




[참고] http://superad.tistory.com/212


WRITTEN BY
테네시왈츠
항상 겸손하게 항상 새롭게 항상 진실하게

,

> 중지

net stop mssqlserver



> 시작

net start mssqlserver








WRITTEN BY
테네시왈츠
항상 겸손하게 항상 새롭게 항상 진실하게

,

프로세스 마스터를 구성해 보았다.

쓰레드 기반의 각 프로세스별 구동하기 위한 마스터 개념이다.

혹시 각 프로세스별 모니터링이 필요할지 몰라 모니터링에 관련에 항목도 포함시켜 보았다.

향후 사용하면 더 필요한 부분 필요하지 않은 부분을 보완해 나가면서 사용해 나가야겠다.



-- CREATE TABLE PROCESS_MASTER


CREATE TABLE PROCESS_MASTER

(

     PROCESS_ID         VARCHAR(020) NOT NULL

   , PROCESS_DESC      VARCHAR(200)     NULL

   , PROCESS_STATUS    CHAR(1)      DEFAULT 'Y'

   , PROCESS_CYCLE    INT          DEFAULT 1000

   , PROCESS_TYPE      CHAR(1)      DEFAULT 'A'

   , PROCESS_AUTOSTART CHAR(1)      DEFAULT 'N'

   , EXECUTE_CYCLE    INT          DEFAULT 30000

   , EXECUTE_TIME      DATETIME         NULL

   , MONITOR_USE      CHAR(1)      DEFAULT 'Y'

   , MONITOR_STATUS    CHAR(1)      DEFAULT 'A'

   , MONITOR_MSG      VARCHAR(200)     NULL

   , RESERV01          VARCHAR(020)     NULL

   , RESERV02          VARCHAR(020)     NULL

   , RESERV03          VARCHAR(020)     NULL

   , RESERV04          VARCHAR(020)     NULL

   , RESERV05          VARCHAR(020)     NULL

   , INPUT_DATE        DATETIME         DEFAULT GETDATE()

   , INPUT_USER        VARCHAR(020)     NULL

   , UPDATE_DATE      DATETIME         NULL

   , UPDATE_USER        VARCHAR(020)     NULL             

   , CONSTRAINT PK_PROCESS_MASTER PRIMARY KEY CLUSTERED 

    (

    PROCESS_ID

    )

)


--SELECT *  INTO PROCESS_MASTER_BK FROM PROCESS_MASTER



WRITTEN BY
테네시왈츠
항상 겸손하게 항상 새롭게 항상 진실하게

,

SELECT a.*

FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','excel 8.0;database=c:\book1.xls;admin;', Sheet1$) 

AS a

GO


-- 아래의 그림과 같이 확인할 수 있다.

-- 단, 엑셀파일이 OPEN 상태에서는 


Msg 7399, Level 16, State 1, Line 1

The OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)" reported an error. The provider did not give any information about the error.

Msg 7303, Level 16, State 1, Line 1

Cannot initialize the data source object of OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)".


-- 위와 같은 에러메세지가 나오니 엑셀파일을 닫고 테스트 해야함.






-- 다음 예에서는 모든 구성 옵션을 설정하고 나열하는 방법을 보여 줍니다. 먼저 show advanced option을 1로 설정하면 고급 구성 옵션이 표시됩니다. 

-- 이 옵션을 변경한 다음 매개 변수 없이 sp_configure를 실행하면 모든 구성 옵션이 표시됩니다.

sp_configure 'show advanced options', 1  

RECONFIGURE  

GO  


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

--메시지 15281, 수준 16, 상태 1, 줄 1

--구성 요소 'Ad Hoc Distributed Queries'이(가) SQL Server 보안 구성의 일부로 해제되었으므로 

--이 구성 요소의 문 'OpenRowset/OpenDatasource'에 대한 액세스가 차단되었습니다.

-- 시스템 관리자는 sp_configure를 사용하여 'Ad Hoc Distributed Queries'의 사용을 활성화할 수 있습니다. 

-- 'Ad Hoc Distributed Queries' 활성화 방법은 SQL Server 온라인 설명서의 "노출 영역 구성"을 참조하십시오.

 

[ 해결방법 ]

 

sp_configure 'show advanced options',1;

go

reconfigure ; 

go

sp_configure  'Ad Hoc Distributed Queries', 1

go 

reconfigure ;

go

[출처] MS-SQL OPENROWSET 사용하기|작성자 불가사리

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

 







WRITTEN BY
테네시왈츠
항상 겸손하게 항상 새롭게 항상 진실하게

,