Oracle操作技巧

作者:李東龍

        來北京工作已經1周,在這一週中乾的基本上都不是開發的事情。由於客戶的要求對數據庫的做了一些高級操作(起碼對我來說已經很高級了)。

        由於之前對Oracle也沒有深入的學習。對很多操作都沒有聽說過,但在開發中我認爲還是比較重要的,作爲開發的基礎(數據庫)。還是非常值得學習的。

        下面對錶空間、分區表、批量導入測試數據,等操作進行一下整理。


    一、表空間

1、  創建表空間

  Create tablespace表空間名稱  datafile'(數據文件地址和名稱—.dbf文件)'  size 50m(文件大小);

         一般服務器都用的是linux或者是unix的,對於表空間的地址就需要去裏面查看了。一般連接都用 cmd->telnet->然後是用戶名、密碼了。所以還是很有必要熟悉一下命令。

2、  刪除表空間

   DROP TABLESPACE表空間名稱 INCLUDING CONTENTS AND DATAFILES CASCADECONSTRAINTS;

3、  查詢表空間使用量

   alter database  datafile'數據文件地址+名稱(如:/oracle10/data_file_name.dbf' resize 500m(要改的大小)

4、  查詢表空間使用量

select a.tablespace_name,a.bytes/1024/1024"Sum MB", (a.bytes-b.bytes)/1024/1024 "usedMB",b.bytes/1024/1024"free MB" from

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

(selecttablespace_name,sum(bytes)bytes,max(bytes) largest from dba_free_space group bytablespace_name) b

where a.tablespace_name =b.tablespace_name

order   by   ((a.bytes-b.bytes)/a.bytes)  desc  

 

         這個就不解釋了, 直接粘貼就可以。 這是查的是Oracle本身自己建的視圖。具體怎麼搞的我也不是很清楚。              對於表空間大概也就這麼些個操作,如果表空間出現問題的話基本有這些就足夠解決了。

 

     二、分區表

        先來說說爲什麼要建分區表吧!

        1.      提高查詢效率

     據分析如果數據量極大的話,都放到一個表空間的話,查詢沒有個一個隔離,查詢基數就特別大,查詢就會非常慢。像我們現在需求,大概每天都會產生10000000多萬的數據量,這樣查詢當然會非常慢了!

     如果按照時間或者按照某個設備產生的數據劃分,那查詢基數就大大減小了。對於查詢那個分區表,這個在程序當中控制就可以了。當然Oracle也會通過你這個分區表的規則先處理一下。

      2.      減小數據文件要求空間

             數據存儲在數據庫中大小肯定是一定的。怎麼能減小數據文件的要求空間呢?

        如果你都把數據都存入一個數據文件中,那麼這個文件在磁盤的可以擴展的空間就必須足夠,要麼數據就搞不進去了!如果是建分區表的話,我們可以把分區表對應的數據文件存放在不同的磁盤上。這樣對他的限制就很小了。        

            分區表存在這樣的優勢,當然也存在劣勢。

1、  全局查詢較慢

      如果查詢的條件不能限制在幾個分區表中查詢話的,那查詢就會在每個分區表中都會查詢。那就慢多了!

2、  表空間管理繁瑣

      分區表很可能越建越多,這個管理起來就有些麻煩了。

      暫時我只有這些對分區表的感受。在隨後的開發中應該還會遇到這樣那樣的問題。下面咱們就進入分區的創建和維護階段


       1、  創建分區表

CREATE TABLE表名

 (    

          數據庫表字段

 )

 partition by range(CATALOG_TIME)

 (

Partition 分區表名稱 values less than (TO_DATE('2013-04-18', 'yyyy-mm-dd')) tablespace表空間名稱,

Partition 分區表名稱 values less than (TO_DATE('2013-04-19', 'yyyy-mm-dd')) tablespace表空間名稱,

Partition 分區表名稱 values less than (TO_DATE('2013-04-20', 'yyyy-mm-dd')) tablespace表空間名稱

 )

         該分區表是按天建的。當然也可以按照其他的規則建立

 

2、  新增分區表

      新建分區表之後,很可能分區建的少了,我們需要新增一下,當然不能刪了之前的所有表,重新執行上面的語句。如果表中有數據那就都沒有了。

        alter table表名 addpartition分區表名 valuesless than (TO_DATE('2013-04-22', 'yyyy-mm-dd')) tablespace表空間名稱;

 

     三、導入測試數據

       基本上表建好了之後就要導入測試數據了,怎麼才能高效的導入測試數據,這是我一直很困擾我的問題。搞點測試數據實在是太困難了。

      請看下列代碼,可能對你很有幫助。

      由於我們用的是Oracle,Oracle又不支持主鍵自增。所以在導入數據之前先要新建一個序列來幫助你生成主鍵。

[1]創建序列

     CREATE  SEQUENCE  SEQ_TEST MINVALUE 1  MAXVALUE 100000  START WITH 1  INCREMENT  BY 1  NOCACHE ORDER;

               語句很簡單,就不做解釋了。

         [2]插入數據(循環)

              declare

              maxrecordsCONSTANT int:=100000;
              iint:=1;
              begin
                      fori in 1..maxrecords loop
                               INSERT INTO表名(id,字段名稱……)
                                          VALUES
                                (SEQ_TEST1.NEXTVAL,(字段值));
                      endloop;
                      commit;

              end;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章