TABLESPACE와 DATAFILE
- TABLESPACE : 논리적 데이터 저장 공간
- DATAFILE : 물리적 데이터 저장 공간, 즉 실제 데이터가 저장되는 Disk영역을 말 함
TABLESPACE 생성 Script
- DATAFILE 1개
1 2 3 | CREATE TABLESPACE TABLESPACE_NAME DATAFILE 'D:\ORACLE\ORADATA\ORCL\TEST_TS01' SIZE 100M AUTOEXTEND ON NEXT 2M MAXSIZE 500M; | cs |
- DATAFILE 1개 이상
1 2 3 | DATAFILE 'D:\ORACLE\ORADATA\ORCL\TEST_TS01' SIZE 30G AUTOEXTEND OFF , 'D:\ORACLE\ORADATA\ORCL\TEST_TS02' SIZE 30G AUTOEXTEND OFF , 'D:\ORACLE\ORADATA\ORCL\TEST_TS03' SIZE 30G AUTOEXTEND OFF | cs |
AUTOEXTEND
- DATAFILE SIZE 자동확장 여부, ON/OFF로 설정
- AUTOEXTEND가 OFF로 설정할 경우, NEXT, MAXSIZE의 크기는 0으로 설정해야 한다.
NEXT, MAXSIZE를 기술하지 않으면 Default 값(0)으로 설정됨
NEXT
- 초기설정 값(100M)보다 많은 공간이 요구될때 자동으로 확장되는 디스크 공간크기
- K(킬로 바이트), M(메가 바이트)단위 사용
MAXSIZE
- 확장 될수 있는 최대 크기 입니다.
- K(킬로 바이트), M(메가 바이트)단위 사용
- MAXSIZE가 명시되지 않았으면 데이터 파일의 최대 크기는 디스크 공간과 OS에서 지원되는 최대 파일 크기로 제한 된다.
ex) Windows 32bit : 16G
Windows 64bit : 32G
TABLESPACE 수정 Script
1 2 3 4 5 6 7 8 9 10 | 1) TABLEPACE에 수동으로 DATAFILE 추가 ALTER TABLESPACE DQ_MAN_TS ADD DATAFILE 'D:\ORACLE\ORADATA\ORCL\DQ_MAN_TS02.DBF' SIZE 30G; 2) 기존 DATAFILE 속성 변경 - 수동으로 SIZE증가 ALTER DATABASE DATAFILE 'D:\ORACLE\ORADATA\ORCL\DQ_MAN_TS01.DBF' resize 2G; 3) 기존 DATAFILE 속성 변경 - 자동으로 SIZE증가 ALTER DATABASE DATAFILE 'D:\ORACLE\ORADATA\ORCL\DQ_MAN_TS01.DBF' AUTOEXTEND ON NEXT 5M MAXSIZE 30G; | cs |
TABLESPACE 용량 및 사용량 확인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | SELECT A.TABLESPACE_NAME AS "테이블스페이스" , ROUND(SUM(A.TOTAL)/1024/1024,1) "전체(MB)" , ROUND(SUM(A.TOTAL)/1024/1024,1)-ROUND(SUM(A.FREE_SPACE)/1024/1024,1) "사용(MB)" , ROUND(SUM(A.FREE_SPACE)/1024/1024,1) "여유(MB)" , ROUND((ROUND(SUM(A.TOTAL)/1024/1024,1)- ROUND(SUM(A.FREE_SPACE)/1024/1024,1))/ROUND(SUM(A.TOTAL)/1024/1024,1)*100,2) "사용률(%)" FROM (SELECT TABLESPACE_NAME , 0 AS TOTAL , SUM(BYTES) AS FREE_SPACE FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME UNION SELECT TABLESPACE_NAME , SUM(BYTES) TOTAL , 0 AS FREE_SPACE FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME) A GROUP BY A.TABLESPACE_NAME ORDER BY TABLESPACE_NAME ; | cs |
DBA_SEGMENTS : 세그먼트의 할당량을 조회
DBA_FREE_SPACE : 사용가능한 익스텐트 정보 조회
DBA_DATA_FILES : 할당된 물리적 공간
'데이터베이스' 카테고리의 다른 글
오라클 권한 조회 (0) | 2017.06.28 |
---|---|
오라클 계정과 권한 (0) | 2017.06.23 |
TIMESTAMP 연산 (0) | 2017.05.11 |
오라클 - PIVOT과 UNPIVOT (0) | 2017.02.02 |
오라클의 동적 PL SQL 작성 - EXECUTE IMMEDIATE (0) | 2017.01.24 |
브라우저를 이용해 파일을 다운로드할 경우 인코딩 문제로인해 한글 및 특수문자 깨짐현상이 발생하죠!
이런문제를 해결하기 위해서는 첫 번째 Client가 사용하는 브라우저 확인이 필요합니다. 두 번째 브라우저별 파일명 인코딩 처리가 필요합니다.
1. 파일다운로드를 위한 컨트롤러 소스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | @RequestMapping(value="/notice/fileDownload") public void fileDownload(HttpServletRequest req, HttpServletResponse res, NoticeBean noticeBean) throws Exception{ String fileStrNm = req.getParameter("fileStrNm"); String fileOrgNm = req.getParameter("fileOrgNm"); byte fileByte[] = FileUtils.readFileToByteArray(new File(path+ "/" +fileStrNm)); String encodedFileName = FileUtil.getEncodedFileName(fileOrgNm, CommonUtil.getBrowser(req)); res.setContentType("application/octet-stream"); res.setContentLength(fileByte.length); res.setHeader("Content-Disposition", "attachment; fileName=\"" +encodedFileName +"\";"); res.setHeader("Content-Transfer-Encoding", "binary"); res.getOutputStream().write(fileByte); res.getOutputStream().flush(); res.getOutputStream().close(); } | cs |
2. Client의 브라우저 확인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public static String getBrowser(HttpServletRequest request) { String userAgent = request.getuserAgent("User-Agent"); if (userAgent.indexOf("MSIE") > -1 || userAgent.indexOf("Trident") > -1 ){ //IE 버전 별 체크 >> Trident/7.0(IE 11), Trident/6.0(IE 10) , Trident/5.0(IE 9) , Trident/4.0(IE 8) return "MSIE"; } else if (userAgent.indexOf("Chrome") > -1) { return "Chrome"; } else if (userAgent.indexOf("Opera") > -1) { return "Opera"; } else if ( userAgent.indexOf("Firefox") > -1 ) { return "Firefox"; } return "Safari"; } | cs |
3. 브라우저별 파일명 인코딩 처리
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | // 파일 다운로드 시 Cilent의 브라우저에 따라 파일명의 인코딩 설정 public static String getEncodedFileName(String filename, String browser) throws Exception { String encodedFilename = null; if (browser.equals("MSIE")) { // 한글 파일명 깨짐현상을 해결하기 위해 URLEncoder.encode 메소드를 사용하는데, // 파일명에 공백이 존재할 경우 URLEncoder.encode 메소드에의해 공백이 '+' 로 변환됩니다. // 변환된 '+' 값을 다시 공백으로(%20)으로 replace처리하시면 됩니다. // \\+의 의미는 정규표현식에서 역슬래시(\)는 확장문자로 // 역슬래시 다음에 일반문자가 오면 특수문자로 취급하고 // 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미 // 기존 파일명에 있던 '+' 는 URLEncoder.encode() 메소드에 의해 '%2B' 로 변환이 됩니다. encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20"); } else if (browser.equals("Firefox")) { encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\""; } else if (browser.equals("Opera")) { encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\""; } else if (browser.equals("Chrome")) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < filename.length(); i++) { char c = filename.charAt(i); if (c > '~') { sb.append(URLEncoder.encode("" + c, "UTF-8")); } else { // ASCII문자(0X00 ~ 0X7E)는 URLEncoder.encode를 적용하지 않는다. sb.append(c); } } encodedFilename = sb.toString(); } else { throw new RuntimeException("Not supported browser"); } return encodedFilename; } | cs |
위와 같이 처리하시면 파일 다운로드 시 파일명이 깨지는 현상을 방지할 수 있습니다.
'프로그래밍' 카테고리의 다른 글
페이지 이동 시 검색조건 유지 (0) | 2017.04.18 |
---|---|
SSL 인증 우회하기 (1) | 2017.04.18 |
스프링 프로젝트 - 공지사항 등록 테스트 (0) | 2017.03.17 |
스프링 프로젝트 - 공지사항 기능 구현 (0) | 2017.03.16 |
스프링 프로젝트 - 첨부파일 처리 (0) | 2017.03.10 |
SQL의 실행 시간 측정등 밀리 세컨드 단위의 정밀한 작업이 필요한 곳에 TIMESTAMP 데이터 타입을 사용하죠!
그렇다면, TIMESTAMP 형식으로 등록된 데이터의 비교연산은 어떻게 할까요?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | -- TIMESTAMP 연산을 위한 2개의 COLUMN이 포함된 테이블을 생성합니다. CREATE TABLE TB_TIME_STAMP( FROM_TIME TIMESTAMP, TO_TIME TIMESTAMP ) ; -- 생성된 테이블에 TIMESTAMP 형식의 데이터를 등록합니다. INSERT INTO SCOTT.TB_TIME_STAMP(FROM_TIME, TO_TIME) VALUES(SYSTIMESTAMP - 1/24, SYSTIMESTAMP) ; -- 마직막으로 아래처럼 TIMESTAMP 연산을 수행하여 시간차이를 초단위로 변환합니다. SELECT EXTRACT(HOUR FROM DT) * 3600 + EXTRACT(MINUTE FROM DT) * 60 + EXTRACT(SECOND FROM DT) AS DIFF_TIME FROM ( SELECT TO_TIME - FROM_TIME AS DT FROM SCOTT.TB_TIME_STAMP ) ; | cs |
참고로, 위의 SYSTIMESTAMP - 1/24의 의미는 현재 시간에서 1시간 전의 값을 의미합니다.
그래서 두 컬럼의 연산 결과는 항상 3600.XXX가 되겠죠!
'데이터베이스' 카테고리의 다른 글
오라클 권한 조회 (0) | 2017.06.28 |
---|---|
오라클 계정과 권한 (0) | 2017.06.23 |
오라클 TABLESPACE와 DATAFILE (0) | 2017.06.16 |
오라클 - PIVOT과 UNPIVOT (0) | 2017.02.02 |
오라클의 동적 PL SQL 작성 - EXECUTE IMMEDIATE (0) | 2017.01.24 |