分區表的可用性:
創建一個分區表:
CREATE TABLE employee
( empno int,
ename varchar2(20)
)
PARTITION BY HASH (empno)
( partition part_1 tablespace TBS_DAIMIN,
partition part_2 tablespace USERS
)
SQL> insert into employee select empno, ename from scott.emp
2 ;
14 rows created.
commit;
SQL> select * from employee partition(part_1);
EMPNO ENAME
---------- --------------------
7369 SMITH
7499 ALLEN
7654 MARTIN
7698 BLAKE
7782 CLARK
7839 KING
7876 ADAMS
7934 MILLER
8 rows selected.
SQL> select * from employee partition(part_2);
EMPNO ENAME
---------- --------------------
7521 WARD
7566 JONES
7788 SCOTT
7844 TURNER
7900 JAMES
7902 FORD
6 rows selected.
假如將該表的一個分區offline之后,出現下面的錯誤:
SQL> alter tablespace TBS_DAIMIN offline;
SQL> select * from employee;
select * from employee
*
ERROR at line 1:
ORA-00376: file 12 cannot be read at this time
ORA-01110: data file 12: '/opt/ora9/PRoduct/9.2/dbs/tbs_daimin02.dat'
原因:
主要是因為該表的一個分區已經offline,而 select * from employee是訪問整個表的信息,這樣必然需要訪問表的所有分區,當訪問到已經offline的時候,則會報錯;
但是如果是試圖訪問聯機的分區的數據,則可以成功;如下:
SQL> variable n number
exec :n :=SQL> 7521
PL/SQL procedure successfully completed.
SQL> select * from employee where empno = :n
2 ;
EMPNO ENAME
---------- --------------------
7521 WARD
但是這樣分區有個好處就是放一張分區表出現故障時,可以通過分析確認是表的哪個分區出現故障,然后將出現故障的分區通過優化器從方案中排除對該分區的數據查詢,可以減少故障時間。
比方說:
有一個100GB的表,并且這個表被分成50個2GB的分區,可以更快的從系統錯誤中恢復過來。如果有一個2GB的分區受損,則恢復時間則就恢復一個2GB分區所花費的時間,而不是恢復一個100GB的表所花費的時間
可用性得到了提高:
1、分區可以用優化器來排除,使得一個分區的破壞不會對用戶產生很大的影響,最多就是查詢不到受損分區的數據;
2、分區受損,只需要恢復該受損分區及可,這樣減少了系統故障時間。
新聞熱點
疑難解答