Korean English Japanese Chinese (Simplified) Chinese (Traditional)

 

 

 

/*

Securefiles is a LOB storage architecture that is used to store unstructured data and contains numerous features as deduplication, compression, encyption and etc. A Securefile LOB can be created only in a tablespace managed with Automatic Segment Space Management (ASSM).

DB_SECUREFILE parameter

-        NEVER is used to make all LOBs that are created as a SecureFile to be created as a BasicFile LOB.

-        PERMITTED is a default value that allows LOBs to be created as a SecureFile using STORE AS SECUREFILE clause.

-        ALWAYS is used to make all LOBs in a ASSM tablespace be created as a SecureFile LOBs.

-        IGNORE is used to ignore store as securefile clause and creation of SecureFile LOBs are permitted. */

 

 

 

 

 

 

 

난이도: 

문제 1: Basic LOB을 만들어라. (4분)

 

CREATE TABLE tbl_basicfile_lob
(id	NUMBER, lob_data CLOB)
LOB (lob_data) STORE AS BASICFILE;



INSERT INTO tbl_basicfile_lob VALUES (1,'This is my long text');
COMMIT;

SELECT * FROM tbl_basicfile_lob;

 

 

 

 

 

난이도: 

문제 2: CLI와 OEM에서 SecureFile LOB을 생성하여라. (8분)

 

CREATE TABLE tbl_securefile_lob
(
	id		NUMBER,
	lob_data	CLOB
)
LOB (lob_data) STORE AS SECUREFILE (tablespace users);


INSERT INTO tbl_securefile_lob VALUES (1,'This is my long text');
COMMIT;


SELECT	table_name, column_name, segment_name, securefile
FROM	dba_lobs
WHERE	table_name LIKE 'TBL%';

 

페이지 가운데에 Set Default LOB Attribute를 클릭하여 Securefile을 생성하도록 설정할 수 있다.

 

 

 

 

 

 

난이도: 

문제 3: Compressed LOB과  Noncompressed LOB 세그먼트를 사용해 두 테이블을 만들고, 사이즈 차이를 보여라. (10분)

 

CREATE TABLE tbl_lob_nocompress
(id NUMBER, lob_data CLOB)
LOB (lob_data) STORE AS SECUREFILE (TABLESPACE users NOCOMPRESS);

INSERT INTO tbl_lob_nocompress
SELECT object_id, rpad('',5000,object_name)
FROM dba_objects
WHERE rownum<=1000;



CREATE TABLE tbl_lob_compress
(id NUMBER, lob_data CLOB)
LOB (lob_data) STORE AS SECUREFILE (TABLESPACE users COMPRESS HIGH);

INSERT INTO tbl_lob_compress
SELECT object_id, rpad('',5000,object_name)
FROM dba_objects
WHERE rownum<=1000;

EXEC dbms_stats.gather_table_stats('sys','tbl_lob_compress');
EXEC dbms_stats.gather_table_stats('sys','tbl_lob_nocompress');

SELECT	table_name, segment_name, securefile, compression
FROM	dba_lobs
WHERE	table_name LIKE '%COMPRESS%';

SELECT	segment_name, bytes
FROM	user_segments
WHERE	segment_name IN ('SYS_LOB0000073205C00002$$', 'SYS_LOB0000073208C00002$$');

 

 

 

 

 

 

 

난이도: 

문제 4: CLI와 OEM에서 SecureFile LOB을 생성하여라. (8분)

 

$ cd $ORACLE_HOME
$ mkdir -p ./wallet

$ cd /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/

$ vi sqlnet.ora
ENCRYPTION_WALLET_LOCATION = 
	(SOURCE =
		(METHOD = FILE)
			(METHOD_DATA =
				(DIRECTORY = /u01/app/oracle/product/19.3.0/dbhome_1/wallet)))


SELECT status, wrl_parameter FROM v$encryption_wallet;

ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "asdf0930k";

SELECT status, wrl_parameter FROM v$encryption_wallet;



CREATE TABLE tbl_lob_encrypt (id NUMBER, lob_data CLOB)
LOB (lob_data) STORE AS SECUREFILE (TABLESPACE users ENCRYPT USING 'AES128');

ALTER SYSTEM SET ENCRYPTION WALLET CLOSE IDENTIFIED BY "asdf0930k";

 

 

 

 

 

 

난이도: 

문제 5: SecureFile LOB 세그먼트를 이용해 두 개의 테이블을 만들어라. 첫 번째 LOB에는 Duplicate를 허용하고, 두 번째 LOB은 Deduplicate를 사용하라. 그리고 사이즈 차이를 보여라. (10분)

 

CREATE TABLE tbl_lob_duplicate
(id NUMBER, lob_data CLOB)
LOB (lob_data) STORE AS SECUREFILE (TABLESPACE users KEEP_DUPLICATES);

INSERT INTO tbl_lob_duplicate
SELECT	object_id, rpad(' ',5000,'This is test')
FROM	dba_objects
WHERE	rownum <= 3000;


CREATE TABLE tbl_lob_deduplicate
(id NUMBER, lob_data CLOB)
LOB (lob_data) STORE AS SECUREFILE (TABLESPACE users DEDUPLICATE);

INSERT INTO tbl_lob_deduplicate
SELECT	object_id, rpad(' ',5000,'This is test')
FROM	dba_objects
WHERE	rownum <= 3000;	




EXEC dbms_stats.gather_table_stats('sys','tbl_lob_duplicate');
EXEC dbms_stats.gather_table_stats('sys','tbl_lob_deduplicate');

SELECT	table_name, segment_name, securefile, deduplication
FROM	dba_lobs
WHERE	table_name LIKE '%DUPLICATE%';

SELECT	segment_name, bytes
FROM	user_segments
WHERE	segment_name IN ('SYS_LOB0000073214C00002$$', 'SYS_LOB0000073217C00002$$');

 

 

 

 

 

 

난이도: 

문제 6: CACHE와 LOGGING 옵션을 사용하여 LOB 세그먼트를 생성하여라. (8분)

 

/* you have to think twice before enabling caching option for the LOB segments, because it can flush necessary block from the buffer cache and can affect the performance of the database. */

/* Using a logging feature, you can specify how the LOBs are recorded to the redo log stream. */

 

CREATE TABLE tbl_lob_cache (lob_data CLOB)
LOB (lob_data) STORE AS SECUREFILE (tablespace users CACHE LOGGING);

ALTER TABLE tbl_lob_cache MODIFY LOB (lob_data) (CACHE);

 

 

 

 

 

 

난이도: 

문제 7: BasicFile LOB 파일을 SecureFile LOB으로 바꾸어라. (10분)

 

CREATE TABLE tbl_basic_lob
(id NUMBER PRIMARY KEY, clob_data CLOB) 
LOB (clob_data) STORE AS BASICFILE (TABLESPACE users);

/* Securefile이기 때문에 당연히 lob 데이터의 deduplicate 처리가 안 될 것이다. */
ALTER TABLE tbl_basic_lob MODIFY LOB (clob_data) (CACHE DECUPLICATE);   /* error */


CREATE TABLE tbl_securefiles_lob
(id NUMBER, clob_data CLOB)
LOB (clob_data) STORE AS SECUREFILE (TABLESPACE users);

EXEC dbms_redefinition.start_redef_table('c##ryu','tbl_basic_lob','tbl_securefiles_lob');

set serveroutput on
DECLARE
	error_count	PLS_INTEGER := 0;
BEGIN
	dbms_redefinition.copy_table_dependents
	('c##ryu',
	 'tbl_basic_lob',
	 'tbl_securefiles_lob',
	 1,
	 TRUE,
	 TRUE,
	 TRUE,
	 FALSE,
	 error_count);
	dbms_output.put_line ('errors := ' || to_char(error_count));
END;
/

EXEC dbms_redefinition.finish_redef_table('c##ryu','tbl_basic_lob','tbl_securefiles_lob');


ALTER TABLE tbl_basic_lob MODIFY LOB (clob_data) (CACHE DEDUPLICATE);
 

If you like this post, please give me a ❤️...!
 
✰Popular Posts✰
✰Recent Posts✰
 

❤ from Seoul, Daejeon, Tokyo, Fukuoka