이 블로그 검색

2011년 4월 25일 월요일

mdf , ldf 파일 위치 변경

1. 사용자 DB
-- services restart
use DBNAME
-- 파일위치확인
exec sp_helpfile      
-- detach db
exec sp_detach_db 'DBNAME'

-- 변경하고자하는위치로mdf / ldf 파일이동

-- 변경한위치로경로변경 후 attach db
exec sp_attach_db @dbname ='DBNAME'
,       @filename1 = 'D:\MSSQL\DBNAME\DBNAME.mdf'
,       @filename2 = 'D:\MSSQL\DBNAME\DBNAME2.mdf'
,       @filename3 = 'D:\MSSQL\DBNAME\DBNAME3.mdf'
,       @filename4 = 'D:\MSSQL\DBNAME\DBNAME4.mdf'
,       @filename5 = 'D:\MSSQL\DBNAME\DBNAME_log.ldf'
...




2. TEMPDB
TEMPDB는 ALTER DATABASE명령으로 변경가능하다.
ALTER명령 후 서비스를 재시작 해야 해당위치에 새로운 MDF,LDF파일이 생성된다. 
--- tempdb 위치변경
use tempdb
exec sp_helpfile

USE master
ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'D:\MSSQL\DBNAME\tempdb.mdf' )
ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'D:\MSSQL\DBNAME\templog.ldf' )
-- services restart
use tempdb
exec sp_helpfile



3. MASTERDB
use master
-- 파일위치 확인
exec sp_helpfile


SQL Server Configuration Manager 실행
















서비스 중지 후 mdf/ldf파일 위치 이동 후 서비스 재시작.

2011년 4월 22일 금요일

메타데이터 관리자 오류 / Errors in the metadata manager.



>> 에러메세지 
메타데이터 관리자에서 오류가 발생했습니다. 트랜잭션의 작업으로 인해 ID큐브ID’이고 이름이 큐브명 CUBE() 무효화되었습니다.
Errors in the metadata manager. The cube with the ID of ‘CUBE_ID', Name of 'CUBE_NAME' was invalidated by operations in the transaction. 





이미 Processing이 완료된 차원의 특성관계(Attribute Relationships)를 수정하고 저장, 또는 처리시 위와같은 에러메세지를 띄우고 저장 및 처리를 하지 못한다.


이러한 경우 해당 차원파일을 삭제(또는 이름변경) 후 다시 저장하면 된다.
C:\Program Files\Microsoft SQL Server\MSAS10.MSSQLSERVER\OLAP\Data\DBName.0.db\
위의 위치에서 차원명과 동일한 xml 파일 , 폴더를 삭제또는 이름변경하고 차원을 저장 & 처리한다.
(보통 xml파일은  차원명.0.dim.xml  폴더명은 차원명.0.dim 와같은 형태임)

Development Edition에서 되었으나, Server Standard Edition에서는 가능하지 않았다.

2011년 4월 21일 목요일

SQL Server에서 특정 컬럼 Collation 변경


SQL Server 기본 Collation Korean_Wansung_CI_AS 구성되어 있다.
Korean / 한글
Wansung / 완성형
CI / Case Insensitive (대소문자 구분하지 않음)
AS / Accent Insensitive (악센트 구분하지 않음)

Korean_Wansung_CI_AS 구성에서는 Primary Key 컬럼에 NAME , name
데이터를  적재할 경우 PK중복 오류를 낸다.
오라클에서 데이터를 이관할때 대소문자 구분때문에 PK중복 오류를 많이 내기도 하는데
특정 컬럼만 대소문자 구분을 하도록 있다.

ALTER TABLE [TABLE_NAME] ALTER COLUMN [COLUMN_NAME] VARCHAR(16) COLLATE KOREAN_WANSUNG_CS_AS



2011년 4월 20일 수요일

sysobjects 의 xtype

 C  = CHECK 제약 조건
 D  =
기본 값 또는 DEFAULT 제약조건
 F = FOREIGN KEY
제약조건
 L  =
로그
FN =
스칼라 함수
 P  =
저장 프로시저
PK = PRIMARY KEY
제약 조건(유형은 K)
RF =
복제필터 저장 프로시저
 S  =
시스템 테이블
TF =
테이블 함수
TR =
트리거
 U  =
사용자 테이블
UQ = UNIQUE
제약 조건(유형은 K)
 V  =

 X  =
확장 저장 프로시저

임시테이블 존재여부 확인 후 삭제


테이블 존재여부 확인 후 삭제 

If Exists(Select Name From TempDB..SysObjects where name like '#TEMP_TABLE%' and type = 'u')
Begin  drop table #TEMP_TABLE End



2011년 4월 18일 월요일

0으로 나누기 오류로 인한 -1.#INF 값 표시하지 않기.



0으로 나누기 오류로 인해 그리드에 -1.#INF로 표시되는 데이터는
다음과 같이 처리한다.
EX) 매출수량에 0이 포함된 경우가 있을 경우.
IIF([Measures].[매출수량] = 0, Null,  [Measures].[매출금액]/[Measures].[매출수량])


2011년 4월 11일 월요일

Moving the tempdb


기본적으로 tempdb는 master의 위치와 동일한 곳에 생성되지만 퍼포먼스 향상을 위해 tempdb의 파일을 다른 물리드라이브로 변경시키기도한다. 변경사항은 서비스 재시작 후 적용된다.


-- 현재 tempdb파일 위치 확인
USE tempdb
EXEC sp_helpfile

-- 파일위치변경 
USE master
ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'D:\MSSQL\Data\tempdb.mdf')
ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'D:\MSSQL\Data\tempdb.ldf')



Restarting SQL Server , Analysis Services (Batch Script)



배치파일을 작성하여 SQL Server 및 Analysis Services를 재시작할 수 있다.
SQL Server Agent 에 Job으로 등록하여 사용가능.

ECHO OFF
NET STOP "SQL Server (MSSQLSERVER)" 
NET START "SQL Server (MSSQLSERVER)" 


NET STOP  "SQL Server Analysis Services (MSSQLSERVER)"
NET START  "SQL Server Analysis Services (MSSQLSERVER)"






The size specified for a binding was too small


Error : 
Warning 1 Errors in the back-end database access module. The size specified for a binding was too small, resulting in one or more column values being truncated.


해결 : 차원테이블과 팩트테이블간의 Key Column간의 데이터타입이 일치하도록 조정.

xp_cmdshell 을 사용한 패키지 실행


파일시스템 내의 패키지 실행
master..xp_cmdshell 'DTEXEC /FILE "C:\패키지.dtsx" /CHECKPOINTING OFF /REPORTING E '

실행시 변수를 할당하여 패키지 실행
master..xp_cmdshell 'DTEXEC /FILE "C:\패키지.dtsx" /CHECKPOINTING OFF /SET "\Package.Variables[User::사용자변수].Properties[Value]";변수값 /REPORTING E '

연결된 서버의 패키지 실행 
[연결된서버명].master..xp_cmdshell 'DTEXEC /FILE "C:\패키지.dtsx" /CHECKPOINTING OFF /SET "\Package.Variables[User::사용자변수].Properties[Value]";변수값 /REPORTING E '

서버상에 올린 패키지 실행
master..xp_cmdshell  'dtexec /DTS "\MSDB\패키지명" /SERVER 서버명 /DECRYPT 패키지암호 /CHECKPOINTING OFF  /REPORTING V '


Expression 내의 Double Quotation 또는 \ 표기

Expression 내에서는 Double Quotation 으로 문자열을 묶고 이를 사용하므로 문자열내에 Double Quotation 포함 시켜야 경우 "   \" 으로 표현한다.
FileSystem Connection 스트링으로 자주 사용될 \또한  \\ 표기한다.

)
@[User::Excel2007Files] + "\\XLS_Test_Type_T.xlsx;Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=\"Excel 12.0;HDR=YES\";"

"C:\\A Folder \\B Folder\\" + @[User::strFileName]

프로세스 실행 태스크를 사용하여 Unzip




Executable : unzip.exe

Arguments : "D:\unzip.exe " -o  "C:\zipFilePath\file.zip" -d "D:\unzipFolderPath\"

폴더명에 공백이 포함된 경우 Double Quotation 으로 묶어줘야 하며
Argument 값에 에서 Double Quotation   \"  으로 입력한다.