SELECT A.TABLESPACE_NAME AS "TABLESPACE"

     , A.BYTES / 1024 / 1024  AS "TOTAL(MB)"

     , (A.BYTES - NVL(B.FREEBYTES,0)) / 1024 / 1024 AS "Used(MB)"

     , NVL(B.FREEBYTES,0) / 1024 / 1024 AS "Free(MB)"

     , ROUND(NVL(B.FREEBYTES,0)*100/A.BYTES,2) AS "Free(%)"

FROM (

      SELECT TABLESPACE_NAME

           , SUM(BYTES) BYTES 

        FROM DBA_DATA_FILES 

       GROUP BY TABLESPACE_NAME

      ) A

   , (

      SELECT TABLESPACE_NAME

           , SUM(NVL(BYTES,0)) FREEBYTES 

        FROM DBA_FREE_SPACE 

       GROUP BY TABLESPACE_NAME

      ) B

WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME(+)

ORDER BY 5 ASC;




좀 오래 걸리긴 함. ...






SELECT d.status "Status", d.tablespace_name "Name", d.contents "Type", d.extent_management "Extent Management", 

 TO_CHAR(NVL(a.bytes / 1024 / 1024, 0),'99,999,990.900') "Size (M)", 

 TO_CHAR(NVL(a.bytes - NVL(f.bytes, 0), 0)/1024/1024,'99999999.999') ||'/'||TO_CHAR(NVL(a.bytes/1024/1024, 0), '99999999.999') "Used (M)", 

 TO_CHAR(NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0), '990.00') "Used %" 

 FROM sys.dba_tablespaces d, (select tablespace_name, sum(bytes) bytes from dba_data_files group by tablespace_name) a, 

 (select tablespace_name, sum(bytes) bytes from dba_free_space group by tablespace_name) f 

 WHERE d.tablespace_name = a.tablespace_name(+) AND d.tablespace_name = f.tablespace_name(+) 

 AND NOT (d.extent_management like 'LOCAL' AND d.contents like 'TEMPORARY') 

 UNION ALL 

 SELECT d.status "Status", d.tablespace_name "Name", d.contents "Type", d.extent_management "Extent Management", 

 TO_CHAR(NVL(a.bytes / 1024 / 1024, 0),'99,999,990.900') "Size (M)", 

 TO_CHAR(NVL(t.bytes, 0)/1024/1024,'99999999.999') ||'/'||TO_CHAR(NVL(a.bytes/1024/1024, 0),'99999999.999') "Used (M)", 

 TO_CHAR(NVL(t.bytes / a.bytes * 100, 0), '990.00') "Used %" FROM sys.dba_tablespaces d, 

 (select tablespace_name, sum(bytes) bytes from dba_temp_files group by tablespace_name) a, 

 (select tablespace_name, sum(bytes_cached) bytes from v$temp_extent_pool group by tablespace_name) t 

 WHERE d.tablespace_name = a.tablespace_name(+) AND d.tablespace_name = t.tablespace_name(+) 

 AND d.extent_management like 'LOCAL' AND d.contents like 'TEMPORARY';

정형

 

(定型) [정ː형] 발음듣기 다른 뜻(10건)

[명사] 일정한 형식이나 틀.


네이놈을 검색해보면 위와 같이 정의가 나온다. 


단어 의미 그대로 형식이나 틀이 존재한다는건 스키마가 있다는 것이고 


이 데이터를 연산할 수 있으면 정형. 


스키마는 있지만 연산이 안되면 반(半)정형.


스키마도 없고 연산도 안되면 비(非)정형.


참 쉽죠? ㅋㅋ 


(정작 글로 쓰려니 막막해서 여기저기 찾아본건 비밀...)


 - 정형 데이터 : 고정된 데이터 스키마가 존재하며 연산이 가능한 데이터

 - 반정형 데이터 : 데이터 스키마가 존재하며 연산이 불가능한 데이터

 - 비정형 데이터 : 데이터 스키마가 존재하지 않고 연산도 불가능한 데이터

RSelenium



크롤링에 '크'도 모르는 내가 네이버 카페를 크롤링 해보려니 건건이 막힌다. 


R의 달인이라 할만한 신입사원(뭔가 모순 느낌이...)에게 네이버 카페 크롤링 해본 적 있으면 소스 좀 달라고 해서 얻은 소스. 



허나... 





ㅋㅋㅋ


오류날걸 알면서 그냥 주는 우리 신입님... 


알아서 공부해서 쓰라는거지뭐.... 


근데 첫 문장 checkForServer() 부터 막히니 


이거 원......




> checkForServer()

Error: checkForServer is now defunct. Users in future can find the function in 

file.path(find.package("RSelenium"), "examples/serverUtils"). The

recommended way to run a selenium server is via Docker. Alternatively

see the RSelenium::rsDriver function.


뭐래... 다른 방법을 쓰라는데... 뭔지 찾아보자. 




일단 RSelenium 이 뭔지를 알아야겠다. 



https://cran.r-project.org/web/packages/RSelenium/vignettes/RSelenium-basics.html


여기 가면 친절히 설명되어있고 


크롬은 더 친절하게 한글로 번역해준다. 




한번에 쓰기에 좀 길어질 것 같으니 다음 편에 계속... 

public void save(List<Entity> entities) throws SQLException {

    try (

        Connection connection = database.getConnection(); // db 연결 파라미터 rewriteBatchedStatements=true 는 필수다

        PreparedStatement statement = connection.prepareStatement(SQL_INSERT);

    ) {

        int i = 0;


        for (Entity entity : entities) {

            statement.setString(1, entity.getSomeProperty());

            // ...


            statement.addBatch();

            i++;


            if (i % 5000 == 0 || i == entities.size()) {

                statement.executeBatch(); // 5000건 당 배치 실행

            }

        }

    }

}



한번 DBMS 호출에 여러 건의 DATA를 처리하는 방법으로 프로그램에서 다량 건 처리 시 db 호출 횟수를 획기적으로 줄여 

시스템 overhead 감소. 


약 10~15배 성능 향상 가능

테스트 데이터 생성하려고 LOCAL 오라클(12c)에 기동했는데... 


오라클이 메모리를 너무 많이 잡아먹네? 2.5G ?? 


이걸 어떻게 줄이지? 다른사람들은 300~500M 메모리 사용하던데... 난 왜...? 




이거 줄여보겠다고 


AMM방식 (잘 모르면서 섣불리...)


세팅하다가... 

기동이 안돼 ㅡㅡ



SQL> startup mount

ORACLE 인스턴스가 시작되었습니다.


Total System Global Area 2533359616 bytes

Fixed Size                  3048824 bytes

Variable Size             671091336 bytes

Database Buffers         1845493760 bytes

Redo Buffers               13725696 bytes

데이터베이스가 마운트되었습니다.

SQL> alter system set sga_max_size=1G scope=spfile;


시스템이 변경되었습니다.


SQL> alter system set memory_max_target=1G scope=spfile;


시스템이 변경되었습니다.


SQL> alter system set memory_target=1G scope=spfile;


시스템이 변경되었습니다.


SQL> shutdown immediate;

ORA-01109: 데이터베이스가 개방되지 않습니다



데이터베이스가 마운트 해제되었습니다.

ORACLE 인스턴스가 종료되었습니다.

SQL> startup mount;

ORA-00838: Specified value of MEMORY_TARGET is too small, needs to be at least 3224M

SQL> alter system set memory_max_target=3G scope=spfile;

alter system set memory_max_target=3G scope=spfile

*

1행에 오류:

ORA-01034: ORACLE not available

프로세스 ID: 0

세션 ID: 0 일련 번호: 0



SQL> alter system set memory_target=3G scope=spfile;

alter system set memory_target=3G scope=spfile

*

1행에 오류:

ORA-01034: ORACLE not available



오 마이갓


젠장


STARTUP을 해야 세팅을 바꾸지.... 근데 기동이 안돼 ㅋㅋㅋ

망했다


구글링 결과... 


SQL> create pfile from spfile;


파일이 생성되었습니다.





이렇게 INITorcl.ORA 파일을 생성한 후 (FROM SPFILEORCL.ORA파일)


D:\app\oracle\product\12.1.0\dbhome_1\database 폴더의  INITorcl.ORA 파일을 열어서 


*.memory_max_target=3380609024

*.memory_target=3380609024

...

*.sga_max_size=3380609024

*.sga_target=2416m


이 부분을 수정한다. 수정 전에는 아까 설정한 memory_max_target=1G 로 되어있었다. ㅋㅋ





SQL> create spfile from pfile;


파일이 생성되었습니다.


이렇게 다시 SPFILEORCL.ORA 파일을 생성해주고 



SQL> startup mount

ORACLE 인스턴스가 시작되었습니다.


Total System Global Area 3380609024 bytes

Fixed Size                  3080344 bytes

Variable Size            1518341992 bytes

Database Buffers         1853882368 bytes

Redo Buffers                5304320 bytes

데이터베이스가 마운트되었습니다.

SQL> alter database open;


데이타베이스가 변경되었습니다.


SQL>


올레~





https://downloads.mariadb.com/MariaDB/mariadb-10.2.4/winx64-packages/


10.1.22가 안정화된 버전이라고 하는데... CTE를 써보기 위해 최신 버전을 설치했다.


입력사항은 별 특별한게 없어서... 임의로 입력함. ㅋ





MS SQL을 처음 써보려고 하니... 이거 원 오라클이랑 달라도 너무 달라서 적응이 안된다. 


샘플 테이블 생성하려는데 COMMIT이 없네? 


MS SQL 은 오토 커밋이란다... ㅡㅡ;


AUTO COMMIT을 방지하려면 

SQL 앞에 


BEGIN TRAN을 붙여주면 된다. 





BEGIN TRAN

UPDATE 어쩌고 저쩌고...


그러면 COMMIT 되지 않은 상태가 되어 

되돌리려면 ROLLBACK , 적용하려면 COMMIT 을 실행하면 된다.  


이런 데이터가 바로 계층형 데이터. 


흔히 말하는 사원 테이블이다. 


오라클과 달리 계층형 질의(SQL)를 지원하지 않는다. 

오라클이었으면 START WITH CONNECT BY 로 끝장을 냈을텐데 말이다. 



MySQL을 거의 안써본 입장에서 여기저기 찾아보고 테스트해보고 만든 SQL은 다음과 같다.




SELECT @R AS _ID,

(

SELECT @R:= MANAGER_ID       ---@R 에 해당하는 EMP_NO의 MANAGER_ID를 가져오면서 @R을 MANAGER_ID로 갱신함

 FROM ENC_EMP 

WHERE EMP_NO = _ID

) AS _MANAGER_ID                          

, @L:=@L+1 AS LEVEL                      --- 계층레벨 표시

FROM ( SELECT @R:=102) VARS          --- 시작할 하위 데이터의 EMP_NO를 지정

, ENC_EMP H

, (SELECT @L:=0) LV          --- 계층레벨 초기화(초기화하지 않으면 NULL이므로 안나온다)

  WHERE @R <> 0


MySQL은 세션변수를 많이 활용하나보다. @ 붙은 변수가 세션변수(해당 세션에서만 임의로 정의하여 쓰는 듯)이고 

위 SQL에서는 @R은 MANAGER_ID 와 EMP_NO를 연결하기 위해 _ID 라는 ALIAS로 임의로 사용



결과는 이렇게 나온다. 




+ Recent posts