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

Posted
Filed under MSSQL
생성된 파일그룹 안에 포함된 파일이 삭제가 안될때.,,

 Alter database [partitionDB] remove file [partitionDB_FG5]  -- 파일  삭제시도
파일그룹
'partitionDB_FG5'(비어있지않으므로제거할수없습니다
. -- 오류발생
 

-- DB 축소실행 ,
DBCC SHRINKFILE ('partitionDB_FG5' ,EMPTYFILE);  -- 그룹의  파일명(물리 파일명 아님)
 
-- 삭제 재시도,
Alter database [partitionDB] remove file [partitionDB_FG5]  -- 삭제 완료

삭제완료, 이제  [FG5] 파일그룹에 [partitionDB_FG5] 를 다시 추가해보자
-- DB 축소 명령어 후 partitionDB_FG5 파일을 FG5그룹에 다시 추가하려고하는데, 

Alter DataBase [partitionDB] add FileGroup [FG5]
Alter DataBase [partitionDB] add File  (Name ="partitionDB_FG5", FileName = "물리파일") 
                                                                                                              To FileGroup  [FG5]

Backup log 를 실행하여  .. 어쩌구 저쩌구 ... LSN .... 오류발생

그럴땐, Log 파일 까지 비워줘야 한다. 로그파일 축소 (MSSQL 2008 이전과 이후 버전 방법이 다르다 아래참고)

[ MSSQL 2008 이전 ]
---------------------------------------------------------------------------------------------------------------------------------------------
BACKUP LOG [DB명] WITH TRUNCATE_ONLY -- DB 로그 축소
BACKUP LOG [DB명] WITH NO_LOG -- DB 로그 삭제

[MSSQL 2008 이후]
---------------------------------------------------------------------------------------------------------------------------------------------
ALTER DATABASE
 [partitionDBSET RECOVERY SIMPLE  -- 복구모델 SIMPLE 로변경

DBCC SHRINKFILE([partitionDB_log])  -- 로그 축소 (로그명)
ALTER DATABASE [partitionDBSET RECOVERY FULL -- 복구모델 다시 FULL 로 변경




-- 다시 파일그룹에 추가해보자 
Alter DataBase [partitionDB] add FileGroup [FG5]
Alter DataBase [partitionDB] add File  (Name ="partitionDB_FG5", FileName = "물리파일") 
                                                                                                              To FileGroup  [FG5]

sp_helpfile
go
sp_helpfilegroup

 잘 된다..
 
2018/03/22 17:51 2018/03/22 17:51
Posted
Filed under C#

간혹 출력한 엑셀데이터를 서버에 다른 환경에서 사용해야 할 경우 아무래도 시트명으로 읽어 들여야
하기 때문에 서로 업무상, 시트명을 통일하거나 아니면 입맛에 맞게 바꿔야하는경우 가 있다.
(지정하지 않으면,일반적으로  파일명이 시트명이 된다.)

기본 서버객체를 이용하지 않는 이상, 시트명은 지정이안된다, 그럼 서버객체를 이용하면 되지 않느냐?
이용해도 되지만 , 서버에 설치 와 권한 설정 등..귀차니즘 발동, 물론 업무에따라 중요도에 따라 서버객체를
를 이용해도된다. 

(아래는 서버 객체를 이용하지 않고 http header를 이용해서 웹문서를 엑셀문서로 출력시킨다.)

아래는 Http Header 를 excel 로 지정하고 ,  xml로 문서의 포맷을 정하고 html로 출력하여 Excel 문서로 인식하게끔 fake? 하게한다.



<%   
     //  Classic ASP  , ASP.Net , PHP , JAVA 등  서버단 코드에 맞게 엑셀 헤더 설정 
     //  아래 파랑색 코드 그대로 복사 붙이기한후 맨 아래는 기존에 Table 그대로 출력해준다
     //  아래 빨강색 sheet1 부분만 필요한 이름으로 수정
%>
<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">
<head>
<!--[if gte mso 9]><xml>
 <o:DocumentProperties>
  <o:LastAuthor>JUBOB</o:LastAuthor>
  <o:Created>2999-09-02T07:46:35Z</o:Created>
  <o:LastSaved>2999-09-02T07:46:35Z</o:LastSaved>
  <o:Version>10.2625</o:Version>
 </o:DocumentProperties>
 <o:OfficeDocumentSettings>
  <o:DownloadComponents/>
  <o:LocationOfComponents HRef="file:///I:\"/>
 </o:OfficeDocumentSettings>
</xml><![endif]-->
<!--[if gte mso 9]><xml>
 <x:ExcelWorkbook>
  <x:ExcelWorksheets>
   <x:ExcelWorksheet>
    <x:Name>sheet1</x:Name>
    <x:WorksheetOptions>
     <x:DefaultRowHeight>270</x:DefaultRowHeight>
     <x:Selected/>
     <x:DoNotDisplayGridlines/>
     <x:ProtectContents>False</x:ProtectContents>
     <x:ProtectObjects>False</x:ProtectObjects>
     <x:ProtectScenarios>False</x:ProtectScenarios>
    </x:WorksheetOptions>
   </x:ExcelWorksheet>
  </x:ExcelWorksheets>
  <x:WindowHeight>12720</x:WindowHeight>
  <x:WindowWidth>24960</x:WindowWidth>
  <x:WindowTopX>120</x:WindowTopX>
  <x:WindowTopY>30</x:WindowTopY>
  <x:ProtectStructure>False</x:ProtectStructure>
  <x:ProtectWindows>False</x:ProtectWindows>
 </x:ExcelWorkbook>
</xml><![endif]-->
</head>
<body>
      <Table> 
         <tr>
                <td> 테이블로 만든 데이터 그대로 출력</td>
         </tr>
      <Table>
</body>
</html>
2018/03/21 14:31 2018/03/21 14:31
Posted
Filed under MSSQL
WITH  [임의의명칭] AS ( 사용하고픈 쿼리 ) 
select * from [WITH 에 서 만들어진 임시테이블 활용]


여러 쿼리 WITH 로 쓸경우 ( 컴마로 구분하여 연속적으로 작성한다 마치 WITH 만 생략된 느낌)
WITH [임시테이블명칭] AS (  ~ 사용하고픈  쿼리 ~ )
, [임시테이블 별칭] AS ( ~ 사용 하고픈 쿼리 ~)  
, [임시테이블 별칭] AS ( ~ 사용 하고픈 쿼리 ~)
select * from [WITH 에 서 만들어진 임시테이블 활용]
select * from [WITH 에 서 만들어진 임시테이블 활용]
→ 여기 (다음) 쿼리에서 활용하면 오류남 (WITH 마지막 쿼리만 유효)


1개의 테이블에서 쿼리된 집합결과를 별칭으로 사용
WITH USER1 AS
(
      select * from t_user where regDate = '2018-01-01'
)
select * from USER1


2개의 쿼리를 연결해서 각각의 별칭의 테이블로 사용하기
WITH USER1 AS
(
          select top 10 * from t_user where RegDate > '2018-01-01' and RegDate < '2018-02-01'
) , USER2 AS
(
          select top 10 * from t_user where RegDate > '2018-02-01' and RegDate < '2018-03-01'
( select * from USER1 )
   union
( select * from USER2 )




2개의 쿼리를 연결해서 각각의 별칭의 테이블로 사용 후 조인
WITH USER1 AS
(
          Select top 10 userid from t_user where RegDate > '2018-01-01' and RegDate < '2018-02-01'
) , USER2 AS 
(
     Select top 10 userid from t_user where RegDate > '2018-02-01' and RegDate < '2018-03-01'
) , USERTOT AS 
(
     (select * from USER1)
         union all
     (select * from USER2)
)
 select  UserName  from t_user A  right outer join USERTOT B on A.UserId = B.UserId 

WITH 로 만들어진 별칭에 대해서는  집합의 개념으로 테이블과 같이 다루어 질수있다.
목적에 따라 다르겟지만, 임시 데이터 활용을 위해 임시테이블(세션,메모리,뷰) 을 더 이상 안만들어도 되겟다.
2018/03/20 17:10 2018/03/20 17:10