9i space 관리 예제
SQL> conn / as sysdba
연결되었습니다.
SQL> create tablespace autospace
2 datafile 'c:\oracle\oradata\wink\auto01.dbf' size 10m
3 extent management local uniform size 128k
4 segment space management auto;
테이블 영역이 생성되었습니다.
SQL> conn scott/tiger
연결되었습니다.
SQL> create table test (
2 a number,
3 b varchar2(1000)
4 ) tablespace autospace;
테이블이 생성되었습니다.
SQL> declare
2 i integer;
3 j integer;
4 begin
5 for i in 1..50 loop
6 for j in 1..20 loop
7 insert into test values(j, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
8 end loop;
9 end loop;
10 end;
11 /
PL/SQL 처리가 정상적으로 완료되었습니다.
SQL> commit;
커밋이 완료되었습니다.
test 테이블에 데이터 들이 블록별로 몇 개씩 들어 있는지 확인 합니다…
대체적으로 균등하게 분포…
SQL> select dbms_rowid.rowid_block_number(rowid),count(*)
2 from test
3 group by dbms_rowid.rowid_block_number(rowid);
DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) COUNT(*)
------------------------------------ ----------
12 106
14 106
15 106
16 106
17 106
18 106
19 106
20 106
21 106
22 46
10 개의 행이 선택되었습니다.
일부 데이터를 지웁니다.
SQL> delete from test
2 where a < 12;
550 행이 삭제되었습니다.
SQL> commit;
커밋이 완료되었습니다.
SQL> select dbms_rowid.rowid_block_number(rowid),count(*)
2 from test
3 group by dbms_rowid.rowid_block_number(rowid);
DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) COUNT(*)
------------------------------------ ----------
12 45
14 46
15 51
16 47
17 45
18 50
19 49
20 45
21 48
22 24
10 개의 행이 선택되었습니다.
대체적으로 균등하게 삭제가 되었습니다.
sys 계정으로 로그인 해서 dbms_repair.segment_fix_status를 실행해 bmb를 rebuild 합니다.
SQL> conn / as sysdba
연결되었습니다.
SQL> exec dbms_repair.segment_fix_status('SCOTT','TEST');
PL/SQL 처리가 정상적으로 완료되었습니다.
다시 scott으로 로그인해서 insert하는 pl/sql을 또 실행 합니다.
SQL> declare
2 i integer;
3 j integer;
4 begin
5 for i in 1..50 loop
6 for j in 1..20 loop
7 insert into test values(j, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaa');
8 end loop;
9 end loop;
10 end;
11 /
PL/SQL 처리가 정상적으로 완료되었습니다.
SQL> select dbms_rowid.rowid_block_number(rowid),count(*)
2 from test
3 group by dbms_rowid.rowid_block_number(rowid);
DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) COUNT(*)
------------------------------------ ----------
12 111
13 115
14 104
15 111
16 111
17 111
18 111
19 111
20 111
21 111
22 113
23 115
24 115
13 개의 행이 선택되었습니다.
데이터가 거의 균등하게 분포 된것을 알 수 있습니다. 적절히 빈 블록에 데이터를 insert했다는 이야기 입니다.
SQL> conn / as sysdba
연결되었습니다.
SQL> create tablespace autospace
2 datafile 'c:\oracle\oradata\wink\auto01.dbf' size 10m
3 extent management local uniform size 128k
4 segment space management auto;
테이블 영역이 생성되었습니다.
SQL> conn scott/tiger
연결되었습니다.
SQL> create table test (
2 a number,
3 b varchar2(1000)
4 ) tablespace autospace;
테이블이 생성되었습니다.
SQL> declare
2 i integer;
3 j integer;
4 begin
5 for i in 1..50 loop
6 for j in 1..20 loop
7 insert into test values(j, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
8 end loop;
9 end loop;
10 end;
11 /
PL/SQL 처리가 정상적으로 완료되었습니다.
SQL> commit;
커밋이 완료되었습니다.
test 테이블에 데이터 들이 블록별로 몇 개씩 들어 있는지 확인 합니다…
대체적으로 균등하게 분포…
SQL> select dbms_rowid.rowid_block_number(rowid),count(*)
2 from test
3 group by dbms_rowid.rowid_block_number(rowid);
DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) COUNT(*)
------------------------------------ ----------
12 106
14 106
15 106
16 106
17 106
18 106
19 106
20 106
21 106
22 46
10 개의 행이 선택되었습니다.
일부 데이터를 지웁니다.
SQL> delete from test
2 where a < 12;
550 행이 삭제되었습니다.
SQL> commit;
커밋이 완료되었습니다.
SQL> select dbms_rowid.rowid_block_number(rowid),count(*)
2 from test
3 group by dbms_rowid.rowid_block_number(rowid);
DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) COUNT(*)
------------------------------------ ----------
12 45
14 46
15 51
16 47
17 45
18 50
19 49
20 45
21 48
22 24
10 개의 행이 선택되었습니다.
대체적으로 균등하게 삭제가 되었습니다.
sys 계정으로 로그인 해서 dbms_repair.segment_fix_status를 실행해 bmb를 rebuild 합니다.
SQL> conn / as sysdba
연결되었습니다.
SQL> exec dbms_repair.segment_fix_status('SCOTT','TEST');
PL/SQL 처리가 정상적으로 완료되었습니다.
다시 scott으로 로그인해서 insert하는 pl/sql을 또 실행 합니다.
SQL> declare
2 i integer;
3 j integer;
4 begin
5 for i in 1..50 loop
6 for j in 1..20 loop
7 insert into test values(j, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaa');
8 end loop;
9 end loop;
10 end;
11 /
PL/SQL 처리가 정상적으로 완료되었습니다.
SQL> select dbms_rowid.rowid_block_number(rowid),count(*)
2 from test
3 group by dbms_rowid.rowid_block_number(rowid);
DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) COUNT(*)
------------------------------------ ----------
12 111
13 115
14 104
15 111
16 111
17 111
18 111
19 111
20 111
21 111
22 113
23 115
24 115
13 개의 행이 선택되었습니다.
데이터가 거의 균등하게 분포 된것을 알 수 있습니다. 적절히 빈 블록에 데이터를 insert했다는 이야기 입니다.
![]() | ![]() ![]() | 12-27 | 2893 | |
![]() | ![]() ![]() | 12-11 | 2105 | |
53 | ![]() ![]() | 03-15 | 1974 | |
52 | ![]() ![]() | 01-31 | 2106 | |
51 | ![]() ![]() | 01-31 | 3067 | |
50 | ![]() ![]() | 01-31 | 1623 | |
49 | ![]() ![]() | 01-19 | 1947 | |
48 | ![]() ![]() | 01-11 | 1814 | |
47 | ![]() ![]() | 01-03 | 2431 | |
46 | ![]() ![]() | 12-27 | 2893 | |
45 | ![]() ![]() | 12-19 | 2026 | |
44 | ![]() ![]() | 12-14 | 1996 | |
43 | ![]() ![]() | 12-11 | 2105 | |
42 | ![]() ![]() | 12-09 | 1637 | |
41 | ![]() ![]() | 12-01 | 1862 | |
40 | ![]() ![]() | 12-01 | 2110 | |
39 | ![]() ![]() | 12-01 | 1509 |
댓글 없음:
댓글 쓰기