OPENQUERY

IT/MS-SQL 2011. 5. 18. 16:19

예제)

SET @sql = N'SELECT * FROM OPENQUERY(['+@InstanceName+'],
''SELECT DISTINCT  D.referenced_major_id,D.object_id
 FROM ['+@DatabaseName+'].sys.objects AS O
 JOIN ['+@DatabaseName+'].sys.sql_dependencies AS D ON O.object_id=D.referenced_major_id
 WHERE O.[TYPE] in (''''IF'''',''''P'''',''''FN'''',''''TF'''')'



지정한 연결된 서버에서 지정한 통과 쿼리를 실행합니다. 이 서버는 OLE DB 데이터 원본입니다. OPENQUERY는 테이블 이름처럼 쿼리의 FROM 절에서 참조될 수 있습니다. 또한 OPENQUERY는 INSERT, UPDATE 또는 DELETE 문의 대상 테이블로 참조될 수도 있습니다. 이것은 OLE DB 공급자 기능에 종속됩니다. 쿼리는 여러 결과 집합을 반환할 수 있지만 OPENQUERY는 첫 번째 것만 반환합니다.

구문

OPENQUERY ( linked_server ,'query' )

인수

linked_server

연결된 서버의 이름을 나타내는 식별자입니다.

' query '

연결된 서버에서 실행된 쿼리 문자열입니다. 문자열의 최대 길이는 8KB입니다.

주의

OPENQUERY는 변수를 인수로 받아들이지 않습니다.

SQL Server 2000 이상 버전에서는 연결된 서버에서 확장 저장 프로시저를 실행하는 데 OPENQUERY를 사용할 수 없습니다. 그러나 확장 저장 프로시저는 네 부분으로 된 이름을 사용하여 연결된 서버에서 실행할 수 있습니다. 예를 들면 다음과 같습니다.

EXEC SeattleSales.master.dbo.xp_msver

사용 권한

모든 사용자가 OPENQUERY를 실행할 수 있습니다. 원격 서버 연결에 사용되는 사용 권한은 연결된 서버에 대해 정의된 설정에서 가져옵니다.

예)

1. SELECT 통과 쿼리 실행

다음 예에서는 Microsoft OLE DB Provider for Oracle을 사용하여 Oracle 데이터베이스에 대해 OracleSvr이라는 연결된 서버를 만듭니다. 그런 다음 이 연결된 서버에 대해 SELECT 통과 쿼리를 사용합니다.

참고:
이 예에서는 ORCLDB라는 Oracle 데이터베이스 별칭이 생성되어 있다고 가정합니다.

EXEC sp_addlinkedserver 'OracleSvr', 
   'Oracle 7.3', 
   'MSDAORA', 
   'ORCLDB'
GO
SELECT *
FROM OPENQUERY(OracleSvr, 'SELECT name, id FROM joe.titles') 
GO

2. UPDATE 통과 쿼리 실행

다음 예에서는 예 1에서 만든 연결된 서버에 대해 UPDATE 통과 쿼리를 사용합니다.

UPDATE OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE id = 101') 
SET name = 'ADifferentName';

3. INSERT 통과 쿼리 실행

다음 예에서는 예 1에서 만든 연결된 서버에 대해 INSERT 통과 쿼리를 사용합니다.

INSERT OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles')
VALUES ('NewTitle');

4. DELETE 통과 쿼리 실행

다음 예에서는 DELETE 통과 쿼리를 사용하여 예 3에서 삽입된 행을 삭제합니다.


'IT > MS-SQL' 카테고리의 다른 글

결과에 영향을 주는 SET 옵션  (0) 2011.05.17
SP 실행 권한 문제  (0) 2011.03.08
MSSQL 단축키  (0) 2011.03.02
내부 프로시저 실행시킬 때 EXECUTE 주의점  (0) 2011.02.28
MSSQL SELECT절에서 두번째로 높은 값 찾기  (0) 2011.02.24
AND

계산 열의 인덱싱된 뷰와 인덱스는 나중에 참조하기 위해 데이터베이스에 결과를 저장합니다. 저장된 결과는 인덱싱된 뷰 또는 인덱싱된 계산 열을 참조하는 모든 연결이 해당 인덱스를 만든 연결과 동일한 결과 집합을 생성할 수 있는 경우에만 유효합니다. 저장된 결과가 올바르게 유지 관리되도록 하고 일관된 결과를 반환하도록 하려면 다음 조건이 발생할 때마다 다음 표의 SET 옵션을 필요한 값 열에 표시된 값으로 설정해야 합니다.

  • 뷰 또는 계산 열에 대해 인덱스가 생성됩니다.

  • 계산 열이 정의되었고 PERSISTED가 지정되었습니다.

  • INSERT, UPDATE 또는 DELETE 연산에 따라 인덱싱된 뷰 또는 인덱싱된 계산 열에 저장된 데이터 값이 수정됩니다. 여기에는 BCP, DTS, 복제 및 분산 쿼리와 같은 연산이 포함됩니다.

  • 쿼리 최적화 프로그램에서 쿼리 실행 계획의 인덱스를 사용합니다.

  • 인덱싱된 뷰의 경우 ANSI_NULLS 및 QUOTED_IDENTIFIER 옵션은 뷰 메타데이터와 함께 저장되기 때문에 뷰를 만들 때 ON으로 설정되어야 합니다.

    SET 옵션

    필요한 값

    기본 서버 값

    기본
    OLE DB 및 ODBC 값

    기본
    DB-Library 값

    ANSI_NULLS

    ON

    OFF

    ON

    OFF

    ANSI_PADDING

    ON

    ON

    ON

    OFF

    ANSI_WARNINGS*

    ON

    OFF

    ON

    OFF

    ARITHABORT

    ON

    ON

    OFF

    OFF

    CONCAT_NULL_YIELDS_NULL

    ON

    OFF

    ON

    OFF

    NUMERIC_ROUNDABORT

    OFF

    OFF

    OFF

    OFF

    QUOTED_IDENTIFIER

    ON

    OFF

    ON

    OFF

    *데이터베이스 호환성 수준이 90 이상으로 설정된 경우 ANSI_WARNINGS를 ON으로 설정하면 암시적으로 ARITHABORT가 ON으로 설정됩니다. 데이터베이스 호환성 수준이 80 이하로 설정된 경우에는 명시적으로 ARITHABORT 옵션을 ON으로 설정해야 합니다.

SET 옵션을 잘못 설정하면 다음 상황이 발생할 수 있습니다.

  • 데이터베이스 엔진에서 오류를 생성하고 인덱스에 저장된 데이터 값을 변경하는 INSERT, UPDATE 또는 DELETE 문을 롤백합니다.

  • 쿼리 최적화 프로그램에서 Transact-SQL 문의 실행 계획에 있는 인덱스를 고려하지 않습니다.

  • 인덱싱된 뷰 또는 계산 열을 만들 수 없습니다.

OLE DB 및 ODBC 연결의 SET 옵션 설정

SQL Server Management Studio, Integration Services, 복제 및 대량 복사 작업을 비롯한 대부분의 응용 프로그램에서는 SQL Server용 OLE DB 공급자나 SQL Server ODBC 드라이버를 사용하여 SQL Server 인스턴스에 연결합니다. OLE DB 및 ODBC 기본 설정은 뷰 또는 계산 열의 인덱스에 필요한 6개의 SET 옵션에 대해 올바릅니다. OLE DB 및 ODBC의 기본값은 위의 표를 참조하십시오. 또한 이러한 설정은 ISO 표준 규칙에 따르므로 SQL Server에 권장되는 설정입니다. 자세한 내용은 클라이언트 네트워크 구성참조하십시오.

참고

SQL Server의 일부 유틸리티는 하나 이상의 ANSI 설정을 OFF로 지정하여 이전 버전의 유틸리티와 호환되도록 합니다.

DB-Library 및 C 언어용 Embedded SQL 연결을 위한 SET 옵션 설정

DB-Library 및 C 언어용 Embedded SQL 응용 프로그램에서는 기본적으로 세션 옵션을 설정하지 않습니다. 이러한 API를 사용하는 시스템에서는 적절한 SET 문을 실행하도록 응용 프로그램을 코딩하거나 데이터베이스 또는 서버의 기본값을 올바른 설정으로 변경해야 합니다.

옵션 설정의 우선 순위

SET 옵션의 ON 또는 OFF 설정은 여러 수준으로 지정할 수 있습니다. 각 세션 옵션의 마지막 설정은 옵션을 설정하는 우선 순위가 가장 높은 작업에 의해 결정됩니다. 세션 설정 작업의 우선 순위는 다음과 같습니다. 우선 순위가 가장 높은 작업이 목록의 맨 위에 있습니다.

  • 응용 프로그램이 서버에 연결한 다음 SET 문을 실행하여 기본 설정을 명시적으로 덮어쓸 수 있습니다. SET 문은 이전의 모든 설정을 덮어쓰므로 응용 프로그램이 실행될 때 옵션을 동적으로 설정하고 해제하는 데 사용할 수 있습니다. 이러한 옵션 설정은 현재 연결 세션에만 적용할 수 있습니다.

  • OLE DB 및 ODBC 응용 프로그램은 연결 문자열에서 옵션 설정을 지정하여 연결 시 적용되는 옵션 설정을 지정할 수 있습니다. 이러한 옵션 설정은 현재 연결 세션에만 적용할 수 있습니다.

  • 제어판의 ODBC 응용 프로그램 또는 ODBC SQLConfigDataSource 함수를 사용하여 SQL Server ODBC 데이터 원본에 대해 지정한 SET 옵션

  • 데이터베이스의 기본 설정. ALTER DATABASE 또는 SQL Server Management Studio의 개체 탐색기를 사용하여 이 값을 지정할 수 있습니다.

  • 서버의 기본 설정. sp_configure 또는 SQL Server Management Studio의 개체 탐색기를 통해 user options라는 서버 구성 옵션을 설정하여 이 값을 지정할 수 있습니다.

예를 들어 ANSI_NULLS에 대한 ODBC 기본값은 ON이지만 ODBC 연결 문자열에서 이 옵션을 OFF로 설정하거나 데이터베이스에 연결한 후 SET 문을 사용하여 이 값을 무시할 수 있습니다.


저장 프로시저 및 트리거

저장 프로시저와 트리거는 뷰 및 계산 열의 인덱스를 지원하는 데 필요한 6개의 SET 옵션과 작동하도록 작성해야 합니다. SET 옵션이 잘못 설정된 경우에는 쿼리 최적화 프로그램에서 저장 프로시저 또는 트리거에 의해 실행된 SELECT 문의 뷰 또는 계산 열의 인덱스를 사용하지 않습니다. 인덱싱된 뷰 또는 계산 열에 저장된 데이터 값을 수정하는 저장 프로시저 또는 트리거의 INSERT, UPDATE 또는 DELETE 문은 오류를 생성합니다.


고려 사항

SET 문은 세션 옵션을 동적으로 변경하므로 뷰 및 인덱싱된 계산 열에 인덱스가 있는 데이터베이스에서 SET 문을 실행할 경우에는 주의해야 합니다. 예를 들어 응용 프로그램은 인덱싱된 뷰 또는 인덱싱된 계산 열이 참조되도록 허용하는 기본 설정으로 연결을 수립할 수 있습니다. 그러나 이 연결에서 첫 번째 문이 SET ANSI_WARNINGS OFF인 저장 프로시저나 트리거를 호출하면 SET 문은 ANSI_WARNINGS에 대한 이전의 기본값 또는 설정을 덮어쓰게 됩니다. 이 경우 최적화 프로그램에서는 저장 프로시저 또는 트리거의 문을 처리할 때 인덱싱된 뷰나 인덱싱된 계산 열을 모두 무시합니다.

결과 집합에 영향을 줄 수 있는 세 가지 세션 옵션으로는 DATEFIRST, DATEFORMAT 및 LANGUAGE가 있습니다. 이들 옵션의 변경에 영향을 받는 결과를 갖는 함수는 확정적이지 않은 함수로 분류되므로 인덱싱된 뷰 또는 인덱싱된 계산 열에서 사용할 수 없습니다.

'IT > MS-SQL' 카테고리의 다른 글

OPENQUERY  (0) 2011.05.18
SP 실행 권한 문제  (0) 2011.03.08
MSSQL 단축키  (0) 2011.03.02
내부 프로시저 실행시킬 때 EXECUTE 주의점  (0) 2011.02.28
MSSQL SELECT절에서 두번째로 높은 값 찾기  (0) 2011.02.24
AND


SP를 실행하는데 다음과 같은 에러가 발생할 경우

229\rThe EXECUTE permission was denied .......
OR
서버: 메시지 229, 수준 14, 상태 5 프로시저 xp_mapdown_bitmap, 선 45
EXECUTE 권한이 개체 'xp_mapdown_bitmap', '마스터' 데이터베이스, 소유자 'dbo' 거부되었습니다
.

<Solution>
SP 실행 권한 없기 때문에 생기는 문제.
쿼리 분석기를 사용하여 수동으로 부여 공개 권한을 다음과 같이 실행:

USE master
GO
GRANT EXECUTE ON xp_mapdown_bitmap TO public
GO

'IT > MS-SQL' 카테고리의 다른 글

OPENQUERY  (0) 2011.05.18
결과에 영향을 주는 SET 옵션  (0) 2011.05.17
MSSQL 단축키  (0) 2011.03.02
내부 프로시저 실행시킬 때 EXECUTE 주의점  (0) 2011.02.28
MSSQL SELECT절에서 두번째로 높은 값 찾기  (0) 2011.02.24
AND

위로

From Soo/to everything 2011. 3. 4. 00:59

외롭다 말을 해봐요
다 보여요 그대 외로운 거
힘들다 말해도 돼요
....

세상엔 많은 사람들이
슬퍼도 울지 못한 채 살죠
눈물 흘려요
그대는 힘들만큼 힘들었죠
....





AND

MSSQL 단축키

IT/MS-SQL 2011. 3. 2. 13:37

[쿼리]
- 실행: Ctrl+E 또는 F5
- 실행 취소: Alt+Break
- 쿼리 구문 분석, 검사: Ctrl+F5

[DB]
- DB 연결: Ctrl+O
- DB 연결 끊기 및 하위 창 닫기: Ctrl+F4
- DB 개체 정보: Alt+F1
- DB 선택: Ctrl+U

[편집]
- 창 내용 지우기: Ctrl+Shift+Del

- 주석 달기(블럭): Ctrl+Shift+C
- 주석 제거(블럭): Ctrl+Shift+R

- 복사(블럭): Ctrl+Ins 또는 Ctrl+C
- 잘라내기(블럭): Shift+Del 또는 Ctrl+X
- 붙여넣기(블럭): Shift+Insert 또는 Ctrl+V

- 줄 내용 삭제: Ctrl+Del
- 줄 삭제: Ctrl+Y

- 찾기: Ctrl+F
- 다음 찾기: F3
- 줄 번호로 이동: Ctrl+G

- 들여쓰기(블럭): Tab
- 내어쓰기(블럭): Shift+Tab

- 소문자로 변환(블럭): Ctrl+Shift+L
- 대문자로 변환(블럭): Ctrl+Shift+U

- 바꾸기: Ctrl+H
- 모두 선택: Ctrl+A
- 실행 취소: Ctrl+Z

[창]
- 쿼리와 결과 창 사이 전환: F6 또는 Shift+F6
- 창 선택기: Ctrl+W
- 새 쿼리 창 열기: Ctrl+N
- 창 내용 저장: Ctrl+S

- 개체 브라우저 표시(토글): F8
- 개체 검색: F4

[결과]
- 결과 창 표시(토글): Ctrl+R

- 쿼리 실행 후, 표 형태로 결과 표시: Ctrl+D
- 쿼리 실행 후, 텍스트 형식으로 결과 표시: Ctrl+T
- 쿼리 실행 후, 파일로 결과 저장: Ctrl+Shift+F

- 쿼리 실행 후, 실행 계획 표시(토글): Ctrl+K
- 쿼리 실행 후, 클라이언트 통계 표시(토글): Ctrl+Shift+S
- 서버 추적 표시(토글): Ctrl+Shift+T

- 결과 창 크기 조절: Ctrl+B

[튜닝]
- 예상 실행 계획 표시: Ctrl+L
- 인덱스 튜닝 마법사: Ctrl+I

[템플릿]
- 템플릿 삽입: Ctrl+Shift+Insert
- 템플릿 매개 변수 바꾸기: Ctrl+Shift+M

[책갈피]
- 모든 책갈피 지우기: Ctrl+Shift+F2
- 책갈피 삽입, 제거(토글): Ctrl+F2
- 다음 책갈피로 이동: F2
- 이전 책갈피로 이동: Shift+F2

[도움말]
- QA 도움말: F1
- 선택한 T-SQL 문에 대한 도움말: Shift+F1

[기타]
- 옵션: Ctrl+Shift+O
- 인쇄: Ctrl+P

AND


프로시저 내부에서 다음과 같은 형식으로 실행을 시키면 에러가 나고 실행이 안되게 된다.

DECLARE @PROC NVARCHAR(MAX)
set @t_str = REPLACE(@t_str,'''','''''')
Set @PROC = N'EXEC ['+@vLinkedServerName+'].['+@TDatabaseName+'].dbo.up_DW2_SM_SpecialDeploy 
                        '''+@ObjectName+''', '''+@t_str+''', '''+@ObjectType+''''

EXEC @PROC        <==  이 부분이 문제


<Solution>
내부 프로시저를 실행시킬 때 위 부분을 EXEC (@PROC) 로 실행하면 된다.
 
<WHY>
EXECUTE를 실행할 때 다음과 같이 실행문을 실행할 때는 괄호를 붙이지 않는다.
SET @PROC = 'up_DW2_DPM_SendMailDeployResult_02 @SInstanceName, @SDatabaseName, @ObjectName'
EXEC @PROC
하지만 위와 같이 동적쿼리를 사용하든가 하는 경우에는 스트링이 넘어가기 때문에 EXEC (@PROC) 같이 괄호를 붙여서 실행해야 에러가 나지 않는다.

'IT > MS-SQL' 카테고리의 다른 글

SP 실행 권한 문제  (0) 2011.03.08
MSSQL 단축키  (0) 2011.03.02
MSSQL SELECT절에서 두번째로 높은 값 찾기  (0) 2011.02.24
MSSQL Cursor in Stored Procedure  (0) 2011.02.22
MSSQL 특정 단어가 포함된 프로시저 찾기  (0) 2011.02.22
AND


SELECT MAX([Version])
FROM DeployDtl AS a JOIN DeployLog AS b ON a.DeployID = b.DeployID
WHERE a.ObjectName = @ObjectName 
            AND a.[Version] < (SELECT MAX(Version) FROM DeployDtl
WHERE DeployID = @DeployID AND ObjectName = @ObjectName)
 

'IT > MS-SQL' 카테고리의 다른 글

SP 실행 권한 문제  (0) 2011.03.08
MSSQL 단축키  (0) 2011.03.02
내부 프로시저 실행시킬 때 EXECUTE 주의점  (0) 2011.02.28
MSSQL Cursor in Stored Procedure  (0) 2011.02.22
MSSQL 특정 단어가 포함된 프로시저 찾기  (0) 2011.02.22
AND


CREATE PROC [dbo].[up_DW2_DPM_DeployDtl_R01]
 @DeployID INT,
 @LandScapeName VARCHAR(50)
 
as
 
BEGIN
 
 DECLARE @RESULT BIT = 1
 
 DECLARE vCursorPtn CURSOR FAST_FORWARD
 FOR
SELECT ObjectName, [Version]
          FROM DeployDtl
          WHERE DeployID = @DeployID AND LandScapeName = @LandScapeName
          ORDER BY [Version] ASC

 
 OPEN vCursorPtn
 
 
DECLARE @vObjectName VARCHAR(50)
 DECLARE @vVersion INT
 
 
FETCH NEXT FROM vCursorPtn INTO @vObjectName, @vVersion
 
 
WHILE @@FETCH_STATUS = 0
 
BEGIN
     
  IF EXISTS (SELECT ObjectName
                  FROM DeployDtl
                  WHERE LandScapeName = @LandScapeName
                             AND ObjectName = @vObjectName AND @vVersion > [Version])

BEGIN
  
   IF EXISTS (SELECT a.DeployID
                   FROM DeployLog AS a
                            JOIN (SELECT ObjectName, MAX([Version]) AS [Version], DeployID, LandScapeName
                                     FROM DeployDtl
                                     WHERE LandScapeName = @LandScapeName AND ObjectName = @vObjectName
                                     GROUP BY ObjectName, DeployID, LandScapeName
                                     HAVING @vVersion > MAX([Version])) AS b
                                     ON a.DeployID = b.DeployID AND a.LandScapeName = b.LandScapeName)
   
   BEGIN
       SET @RESULT =1
   END
    
   ELSE
   BEGIN
       SET @RESULT = 0
   END
   
  END
  
  ELSE 
  BEGIN
      SET @RESULT = 0
  END
  
  FETCH NEXT FROM vCursorPtn INTO @vObjectName, @vVersion 
 END
 
 CLOSE vCursorPtn
 DEALLOCATE vCursorPtn
 
 SELECT @DeployID AS DeployID, @RESULT AS Result
 
END

AND


How can I find stored procedure by search text in MS-SQL

SELECT ROUTINE_NAME
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%Search_Text%'
AND ROUTINE_TYPE='PROCEDURE'
order by ROUTINE_NAME


추가: varchar(4000) 보다 큰 sp까지 찾는 방법
SELECT so.name FROM dbo.sysobjects so,dbo.syscomments sc
WHERE so.id=sc.id AND type = 'P' 
AND sc.text LIKE '%Search_Text%' ORDER BY so.name





'IT > MS-SQL' 카테고리의 다른 글

SP 실행 권한 문제  (0) 2011.03.08
MSSQL 단축키  (0) 2011.03.02
내부 프로시저 실행시킬 때 EXECUTE 주의점  (0) 2011.02.28
MSSQL SELECT절에서 두번째로 높은 값 찾기  (0) 2011.02.24
MSSQL Cursor in Stored Procedure  (0) 2011.02.22
AND

춘천 당일치기 여행

Travel 2010. 5. 22. 02:37

어느 날, 하늘도 쾌청하고 바람도 솔솔 불고..무언가를 해야만 될거 같은 날..
또는 뭘 해야 될지 모르거나 괜히 울적해지는 날..
그냥 훌쩍 바람 쐬러 다녀오기에 가장 대표적인 장소 중 하나가 춘천이 아닐까 싶다.

1. 버스타고 춘천으로..
무엇보다 춘천 여행의 낭만이라고 하면 춘천 가는 기차라고 할 수 있겠지만..
사실상 갑자기 마음이 동해서 떠나는 경우 기차표를 구하기는 거의 어렵다. 특히 날씨가 좋을 때는..
또 강남에 살면 청량리까지 가야 되니 그 시간만 해도 당일치기의 절반이 지날지도 모른다.
하지만 센트럴시티와 동서울터미널에서 춘천 가는 버스가 자주 있으니 걱정할 것도 없다.
센트럴시티에서도 주말에 현장 발매를 할 경우 바로 떠나는 버스는 구하기 힘들다.
대략 한시간에서 한시간 반정도 후에 떠나는 버스를 예매할 수 있을 듯..
그 정도 커피 한잔, 과자 한봉지 먹고 있으면 충분히 기다릴 수 있다..

2. 급 여행도 계획은 필요..
당일치기 여행이 대부분 그렇듯 춘천도 비록 갑자기 떠나는 여행이라도 대략적이나마
다녀올 경로를 생각한 후에 출발하는 것이 좋다. 그냥 길거리에서 시간만 소비하고 지쳐 돌아오지 않을려면..
당일치기로 바람 쐬기 가장 좋은 코스는 많은 블로그에 있듯이 소양호에 청평사 코스가 아닐지..
단순히 소양호만 돌아보길 원해도 12시 전에는 버스를 타는 것이 좋다.
청평사까지 다녀오려면 9시 전엔 버스를 타는 것이 좋다. 여행의 참맛은 그래도 여유일테니..

3. 버스를 타고 소양호로..
센트럴시티에서 버스를 타고 서울춘천고속도로를 쌩하고 달리면 1시간 반정도 후에 춘천에 도착한다.
버스에서 내려 소양호로 가기 위해 터미널과 이마트 앞으로 나와 좌측으로 약 250미터 정도 걸어가면
온의사거리라고 큰 사거리가 나온다. 사거리에서 오던 방향 직진으로 신호등을 건넌 다음 좌측으로
조금 가면 버스 정류장이 있다. 그곳에서 11번 버스를 타면 소양호에 갈 수 있다.(40~50분 정도 소요)
(참고로 기차를 타고 남춘천역에 내렸을 경우 12-1번을 타면 소양호에 간다.)


4. 춘천에서 닭갈비는 필수..
춘천에 왔으니 춘천닭갈비를 안 먹고 그냥 갈 수는 없다.
여러 춘천 관련 블로그를 보면 맛있는 닭갈비집 중에 '통나무집 닭갈비'를 아주 많이 볼 수 있다.
11번 버스를 타고 창 밖 춘천 풍경들을 감상하며 바람에 머리를 흩날리다 보면..
'다음 정류장은 윗샘밭종점입니다.'라는 안내 방송을 들을 수 있다.
'윗샘밭종점'에서 내리면 바로 길 건너편에 '통나무집 닭갈비'와 많은 차들, 대기 손님들을 볼 수 있다.
서울에서 12시 정도에 출발 했으면 이 곳에 도착했을 시간이 대략 2시 반정도가 될 것이다.

'통나무집 닭갈비'는 손님이 많기로 유명하다. 대기 장소가 식당 밖에 따로 있다.
보통 식사 시간 때는 1시간 이상, 식사 시간 때가 아니라도 기다렸다가 먹어야 한단다.
그래도 먹어봐야지 일단 왔으니..도착하자마자 카운터에서 대기번호 먼저 적어야 한다.
닭갈비를 먹어본 결과..솔직히 정말 맛있다 이런 생각은 안 든다.
일반 동네나 대학가의 춘천 닭갈비라고 파는 곳과 유x네 같은 곳보다는 훨씬 나은게 사실..
그렇다고 딱히 와~ 이런 정도는 아님. 대전에 있는 5.5닭갈비와 매우 흡사한 맛과 모양이다.

그냥 입소문이 잘 퍼져서 대박난 듯..그래도 맛있게 먹을만 하다. 양은 딱! 남녀 한 커플이 적당히 먹을 정도..
닭갈비를 다 먹은 후 볶음밥이 별미지만 여기선 개인적으로 별로였음..
막국수는 안 먹어봤지만 양이 푸짐한게 맛있어 보이긴 하던데..어쨌든 밥 볶는건 비추..
조금 기다렸다치고 닭갈비 먹고 하면 대략 1시간 반정도 흐른다고 볼 수 있다.
다 먹은 후에는 배부르니 소화도 시킬겸 소양댐 주차장까지 몇 분 안 걸리니 걸어가는 것도 좋다..
꽃도 있고 놀이터도 있고 운동 기구도 있다~

5. 소양호의 바람..
소양댐 주차장에서 소양댐 정상으로 가는데 걸어가는 건 무리이니 시도는 노노~2킬로 정도 걸리던가..인도도 없다~
소양댐 주차장에서 11번이나 12-1번을 타면 정상에 갈 수 있다.

정상에 도착하면 전망이 좋다~시원하고 탁 트였다~바람 쐬러 오길 잘했다는 생각이 바람을 타고 든다..
(개인적으로 소양댐보단 대청댐이 훨씬 훨~씬 더 전망도 좋고 잘 꾸며놨다는 생각이..드라이브 코스도 훨씬 좋고..
 일정만 잘 짜면 대청댐도 소양호 다녀오는 것과 비슷한 시간이 걸린다. 서울에서 당일치기가 가능하다는 것!)

소양댐 정상에서 선착장 쪽으로 내려가다 보면 옥수수 등등을 파는 노점상들이 있다.
간식으로 먹어도 좋지만 닭갈비 먹고 왔으면 배불러서 생각이 안 날 듯..
선착장에서 막배가 4시 반이기 때문에 서울에서 12시 이후에 출발 했으면 배를 타긴 힘들다.
그냥 천천히 걸으며 바람 쐬는 것도 좋다..선착장에서 색소폰 소리가 들리기도 한다..
천천히 바람 쐬며 여유를 즐기다 산 너머로 붉은 기운이 돌기 시작하면 돌아오기 위해 출발하면 된다.
소양댐 정상에선 저녁 7시 30분이 막차이다.
올 때와 똑같이 11번 버스를 타고 '전자랜드/시외터미널' 정류소에서 하차해서 터미널로 걸어가면 된다.

5-1. 청평사를 들를려면..
청평사를 다녀오고 싶다면 아침 9시 이전엔 출발해야 여유가 좀 있다.
춘천에 도착해서 먼저 소양호로 가서 배를 타고 청평사까지 다녀온 후 돌아오며 닭갈비를 먹으면
뱃시간에 쫓기지도 않고 터미널로 돌아오는 시간은 대략 비슷해진다.


6. 다시 일상으로..
다시 일상으로 돌아가는 길은 꼭 버스를 타라고 권하고 싶다.
주의할 것은 하루종일 돌아다녀서 피곤하지만 버스 안에서 고속도로를 달리는 딱 30분만 잘 것!
터미널에서 8시 이후에 출발하는 센트럴시티행 버스를 타고 꼭 오른쪽에 앉아야 된다.
우등고속을 타면 오른쪽이 1인석이지만 꼭 오른쪽에 타길 강추!
8시 이후 버스를 타면 이미 해가 지기 시작해서 고속도로를 들어서면 오른쪽으로 멀리 춘천의 야경이 보인다.
그리고 고속도로를 빠져 나오면서부터는 절대 놓칠 수 없는 춘천 여행의 보너스!!
올림픽대로를 달리는 버스 안은 조명이 꺼지고 사람들이 거의 다 잠들어 있어 조용하다.
그리고 창밖으로 보이는 광진교부터 한남대교까지 이어지는 한강의 야경은..
여행의 마무리로 이보다 더 좋을 수 없다는 생각이 든다.
하루종일 들떠 있던 마음.. 또는 일상으로 돌아가는 무게감을..
빛나는 한강의 야경이 차분하게 가라앉혀 준다..
그리고 여행을 마무리하며 자신을 돌아보게도 해준다..
그렇게 야경에 푹 빠져 있다 보면 센트럴시티 터미널.. 나의 일상으로 돌아와 있다..



AND