제2의 비엔지니어 인생관을 꿈꾸며

Posted
Filed under MSSQL

SYNONYM 설정시 현재 (2016) 까지는
데이터베이스.스키마.개체명 까지 다 넣어야,,, 
동의어로 지정할수있다
(테이블명 까지 지정해줘야함 )

TestDb  데이터베이스에  TestSchema  에 TestTable   // FQN 접근시
→ select * from  TestDb.
TestSchema.TestTable   

create SYNONYM 동의어명 For   데이터베이서.스키마.테이블명

Create SYNONYM  SN_Test For TestDb.TestSchema.TestTable 
→ select * from SN_Test 


* 기술적으로 복잡함이 없어 FAQ로 구성해 보았다.
-------------------------------------------------------------------------------------------------------------------------
Q) 시놈님 생성은?
(위에) create SYNONYM 동의어명 For   데이터베이서.스키마.테이블명

Q) 시놈님 생성시 dB명만 해도 되나요?
Create SYNONYM  SN_Test For TestDb   만들어짐!! 오케이 된다!
 select * from SN_Test.스키마명.테이블명   -> 오류!! 안됨!!

만들어는 지나, 접근이 안됨,,
결론은 안됨!!!!!

Q) 그럼 dB명.스키마 까지... 해도 되나요?
 이거? Create SYNONYM  SN_Test For TestDb .TestSchema 
 select * from SN_Test.테이블명 오류!! 안됨!!

만들어는 지나 접근이 안됨
결론은 안됨!!!!!

Q) 시놈님 삭제는 ?   
drop SYNONYM 동의어명;

Q) 시놈님 수정은?
수정은없음 drop & Create

Q) 시놈님과 연동 동의어의 개체가 사라지면? 
    따로 drop 해줘야함  - 관리필요 (drop SYNONYM 동의어명)

Q) 테이블 새로 만들어지면 시놈님 자동생성안되나요 ? 
안됨,  따로 create 해줘야함  - 관리필요


Q) create 시놈님 안에 연결 개체를 바꿀려면(수정)?  
drop 하고 create 하삼 alter 없음

Q) 테이블 100개면 시놈님 연결하러면요?
create SYNONYM 100번해야함 해야함

Q) 프로시져도되요?  
  프로시져는 개체 , 당연됨 함수도됨 그냥 똑같음
 
 Create SYNONYM 동의어명 For sp_memberUtil
    -> exec 
동의어명

Q) 프로시저 시놈님만들었는데? 파라미터는 어떻게해야되나요?
   

   -> exec 동의어명  'C' , 'UserID'     -- 기존 프로시져와 똑같이 하면됨 
   -> 기존 프로지서 exec sp_memberUtil  'C' , 'UserID'
  
Q) 테이블 2000개 프로시져 1만개... 모두 만들려고합니다...
     쉽게 만들수있는방법은 ?  

    -- 참고 ---------------------------------
    select * from sys.tables
    select * from sys.synonyms

    아래와같이 동적으로 생성이 가능하다. :)
    
 

     declare @var nvarchar(100)
     set @var = 'create synonym '  + 시놈님명 +  ' for ' + 객체명
     EXEC SP_EXECUTESQL @var  --    EXEC(@var) 로 해도됨

     또는, 변수로 처리

     
declare @var nvarchar(1000)
     declare @tbl  nvarchar(20)
     declare @syName  nvarchar(20)

     set @syName = 'sy_t'
     set @tbl  = 'partitionDb.dbo.tbl'

     set @var = 'create synonym ' + @syName + ' for ' + @tbl

     EXEC SP_EXECUTESQL  -- 또는,    EXEC (@var)

     단, 아래와 같이 sp_executesql 생성시 파라미터로 전달은 안된다.

     set @syName = 'sy_t'
     set @tbl  = 'tbl'

     -- 파라미터로 객체명 전달시 오류 발생
     set @var = 'create synonym  @syName   for  @tbl'
     EXEC SP_EXECUTESQL @var , N'@syName  varchar(20) , @tbl  varchar(20)' , @syName , @tbl

 


Q) 전 마우스로 밖에못하는데 어디서 만들어요?
   당황하지말고 SSMS 에 DB [+] 클릭  Table 있고  View 있고 그아래쯤 SYNONYM 
   거기서 우클릭해서 해보길.



------- 2018-01-29 추가 ----------------------------------------------------------------------------------------------------
Q) 시놈님과 연결한 [A] 테이블을 drop  후 같은이름으로 테이블[A] 다시 만들었는데  어떻게 되나요?
시놈님도 다시 만들어야하나요?

결론 부터 말하면 기존에 [A] 테이블과의 연동이 끊기고 새로만든 [A] 테이블과 자동연동된다.
이는 시놈님 구조가 테이블의 object_id 가 아닌 테이블명과 연결되기때문,

-- 시놈님의 시스템 테이블
 select * from  sys.synonyms  -- base_object_name 이 실제 연동된 테이블

① 위의  sys.synonyms  테이블을 select 해보시면  base_object_name 에 연결된 테이블 명칭이있습니다.
② 시놈님의 동의어 만들때 개체의 object_id를 이용하지 않습니다. (이름(테이블명) 사용함)
③ 결론은 다시 만들어진 테이블 A 와 시놈님의 자동으로 연동 됩니다.(이유는 ②번과 같습니다.)

* 시나리오
1년전 특정 로깅을 위해 Table_X 테이블을 만들었고  Table_X 동의어로 synonym  "SY_X"를 설정하여,,,
프로시저 및 접근시 SY_X 로 모두처리하였습니다. 5년후 많이 쓰지않는 테이블 이고, 정책에 반하는 테이블이라, drop 시키고, 새로운 기획에 의해 Table_X 를 다시 만듬 SY_X  는 그대로 유효한가?



위에서 이야기한대로 object id 가 아닌 테이블명 으로 연동되어 그대로 이용가능하나, 새로만든 테이블의
구조가 기존과 다르다면, SY_X로 박혀있는 프로시져 기타 소스들은확인 & 수정 할 필요가 있다.





 
  
 
 
    
  





2018/01/18 15:52 2018/01/18 15:52
Posted
Filed under MSSQL
https://support.microsoft.com/ko-kr/help/2860024/you-cannot-toggle-the-results-pane-in-sql-server-management-studio


단축키를 누르면 작동을 하지 않고 두번째 키를 기다리는중 상태로 인하여 UI도구를 클릭해야되는 경우가 발생하여 찾아봤는데 SQL Server Management Studio.vssettings 이게 손상되었다고 합니다.  SSMS 도구 옵션에 키보드를 다시설정 초기화를 진행하면 해당문제는 사라집니다.

2018/01/10 11:36 2018/01/10 11:36
Posted
Filed under MSSQL
http://thelowlydba.blogspot.kr/2016/08 ··· g-r.html

https://docs.microsoft.com/en-us/sql/advanced-analytics/r/set-up-sql-server-r-services-in-database

단독서버에서는 문제가 없는데 Always On 에서 기본 스크립트 구문조차도 실행되지 않고 계속 멍때리는 현상때문에 난처했습니다. 공식문서에는 MSCS 구성에서는 지원불가인 반면에 Always On은 지원불가는 아니다?라는 문구가 보여서 안되는게 아니고 되는건가보네? 하다보니 위에 사이트를 찾아서 해결하였습니다.
이유가 길이가 긴 문자 경로를 인식하지 못해서 발생하는 오류라고하는데 단독서버에는 이런증상이 전혀 발생하지 않아서 아이러니 한 이슈였습니다.
도메인 환경과 아닌 환경의 차이인지는 모르겠으니 일단 해결방법은 위사이트에 설명처럼 ExtensibilityData 폴더를 생성해주고 환경설정 경로를 바꿔주면 해결이 가능합니다. 문제는 폴더만 생성하면 MSSQLSERVER01~20  계정 폴더가 없어서 또 오류를 뿜어내니 그냥 폴더 복사 붙여넣기 하고 NT Service\MSSQLLaunchpad 서비스 계정에 모든권한을 부여해주고나니 이슈가 해결되었습니다.

EXEC sp_execute_external_script  @language =N'R',
@script=N'
OutputDataSet <- InputDataSet;
',
@input_data_1 =N'SELECT 1 AS hello'
WITH RESULT SETS (([hello] int not null));
GO

샘플구문 실행하니 반가운 헬로 1 이 떨어지네요.
2017/12/15 13:30 2017/12/15 13:30
Posted
Filed under MSSQL
https://www.mssqltips.com/sqlservertip/4558/sql-server-launchpad-service-cannot-be-started/
MSSQL 2016 R 서비스 설치할때나 설치후에 이문제때문에 지웠다 깔았다는 연속으로 해서 검색해보니 링크와 같은 해결방법이 나왔었습니다.
보안설정한다고 ISMS 가이드 문서에 콘솔 로그온에 USERS 그룹이 기본값으로는 존재하는데 이걸 삭제한겁니다. NTSERVICE\MSSQLLaunchpad 를 관리자 그룹에 등록해도 에러가 발생하길레 스크립트 권한에서 막혔나 싶어서 이것저것 권한을 넣어봐도 답없음이였습니다.
그런데 실제서비스 권한은 MSSQLSERVER01부터 20까지 필요한거였었습니다.
사용자 삽입 이미지
보안 이벤트 4625를 기록하며 실패하는 로그입니다.
사용자 삽입 이미지
ISMS 보안가이드를 적용한다면 SQLRUSERGROUP 을 등록하면 해결이 됩니다.
저그룹을 관리자 그룹에 등록하는건 어떻냐고 하는데 스크립트를 사용하는 계정을 관리자로 등록하면 보안에 더큰 문제가 발생하기 때문입니다. 스크립트 하나로 시스템을 쉽게 변경하여 제어할수 있기 때문에 최소한의 권한을 유지하는것이 권고사항입니다.
사용자 삽입 이미지

ISMS 보안권고 가이드 문서에는 기본공유 제거와 RemoteRegistry 를 비활성 시키라고 하는데 이걸 반영하면 클러스터 서비스가 내려가는 재앙을 경험할수 있습니다.
ISMS 시행한지 정말 오래되었는데 문서에 클러스터 서비스는 예외처리를 권고한다고 제시하면 관리자들이 당황하는 일은 없을텐데 아직도 이런다는게 이해가 안갑니다.
4년전에도 서비스 영향을 받기 때문에 적용불가능하다는걸 일일이 체크하고 예외문서 작성한 기억이 납니다. 


2017/11/08 03:12 2017/11/08 03:12
Posted
Filed under MSSQL
https://support.microsoft.com/ko-kr/help/956176/error-message-when-you-try-to-save-a-table-in-sql-server-saving-change

테이블 다시 생성 해야 하는 변경 내용을 저장 안 함 옵션을 변경 하려면 다음과이 같이 하십시오.
1.SQL Server Management Studio (SSMS)를 엽니다.
2.도구 메뉴에서, 옵션을 클릭합니다.
3.옵션 창의 탐색 창에서 디자이너를 클릭 합니다.
4.선택 하거나 표 재작성 해야 하는 변경 내용을 저장 안 함 확인란의 선택을 취소 하 고 확인을 누릅니다.

테이블에 대해 변경 내용 추적 기능을 사용할지를 결정 하려면 다음이 단계를 수행 합니다.

1.SQL Server Management Studio 개체 탐색기에서 테이블을 찾습니다.

2.테이블을 마우스 오른쪽 단추로 클릭 한 다음 속성을 클릭 합니다.

3.표 속성 대화 상자에서 변경 내용 추적을 클릭 합니다.

변경 내용 추적 항목의 값이 True이면 테이블에 대해이 옵션이 활성화 됩니다. 값이 False이면이 옵션이 비활성화 됩니다.

변경 내용 추적 기능을 사용 하는 경우 Transact SQL 문을 사용 하 여 테이블의 메타 데이터 구조를 변경 합니다.

이 문제를 재현하는 단계

1.SQL Server Management Studio 테이블 디자이너 도구에서 기본 키를 포함 하는 테이블을 만듭니다.

2.이 테이블이 포함 된 데이터베이스를 마우스 오른쪽 단추로 클릭 한 다음 속성을 클릭 합니다.

3.데이터베이스 속성 대화 상자에서 변경 내용 추적을 클릭 합니다.

4.변경 내용 추적 항목의 값을 True로 설정 하 고 확인을 클릭 합니다.

5.테이블을 마우스 오른쪽 단추로 클릭 한 다음 속성을 클릭 합니다.

6.표 속성 대화 상자에서 변경 내용 추적을 클릭 합니다.

7.변경 내용 추적 항목의 값을 True로 설정 하 고 확인을 클릭 합니다.

8.도구 메뉴에서, 옵션을 클릭합니다.

9.옵션 대화 상자에서 디자이너를 클릭 합니다.

10.테이블 다시 생성 해야 하는 변경 내용을 저장 안 함 확인란을 선택 하려면 클릭 한 다음 클릭 확인 합니다.

11.테이블 디자이너 도구에서 기존 열에서 Null 허용 설정을 변경 합니다.

12.테이블에 변경 내용을 저장 하십시오.


사용자 삽입 이미지

권고사항은 해제하지 말라고 하는데 마우스 UI를 즐겨쓰는 필자에게는 필요한 도구입니다. 마우스로 하다보면 실수로 인해서 재앙이 올수도 있으니 애초에 저기능을 기본값을 비활성 시켰던거 같습니다. 대부분 쿼리로 수정을 할때는 tran 구문으로 되돌릴수도 있는데 UI는 바로 커밋떨어져서 작업할때 신중해야됩니다.

2017/07/05 10:10 2017/07/05 10:10