国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

為數據庫建立HTML分段使用映射

2024-07-21 02:38:49
字體:
來源:轉載
供稿:網友

  在Oracle數據庫中,治理tablespaces通常很難實現從SQL查詢得到數據的可視化。一種實現tablespaces可視化且更加輕易治理的方法是建立類似于碎片重組功能(defragmentation utilities)的分段使用映射(block usage maps)。
  
  不需要任何圖表或者圖形功能,你可以使用簡單的由Oracelmodplsql包產生的Html,而modplsql包可在安裝Oracle8i和9i時安裝。
  
  這其中也包含著風險,因為這一程序必須由一個DBA帳號來運行,所以DBA帳號必須將使用權限賦予每一個操作計劃,而操作計劃必須包含在wdbsvr.app文件中。為了保護這一文件,你必須確保這一文件只能被Oracle用戶和DBA組查閱。假如你愿意把這一程序編寫成一個jsp頁或者servlet,你也應該非常小心,以防止外部能夠使用DBA帳號。
  
  DBA視不能在一個PL/SQL查詢,所以你必須將PL/SQL安裝為SYS,然后將使用權限分配給答應運行PL/SQL的帳號:
  
  connect sys/<passWord>
  @blkmap.sql
  grant execute on blkmap to system;
  connect system/<password>
  create synonym blkmap for sys.blkmap;
  
  在這個例子中,我們建立一個名為blkmap包,這一blkmap包具有兩個入口點。其中一個是顯示tablespaces列表的一個菜單,另一個是實際使用的tablespace分段映射:
  
      create or replace package blkma
  
  as
  PRocedure ts_menu;
  procedure ts_map(p_name varchar2);
  
  end blkmap;
  
  /
  
  show errors;
  
  Tablespace菜單的代碼可以是一個與分段映射(block map)頁關聯的tablespaces列表:
  
  procedure ts_menu
  is
  begin
    htp.p('<html>');
    htp.p('<body bgcolor="white">');
    htp.p('<h2>Tablespaces</h2>');
    htp.p('<ul>');
    for ts in (select tablespace_name from dba_tablespaces) loop
      htp.p('<li><a href="blkmap.ts_map?p_id='ts.tablespace_name'">'
        ts.tablespace_name'</a></li>');
    end loop;
    htp.p('</ul>');
    htp.p('</body>');
    htp.p('</html>');
  end ts_menu;
  
  對于tablespace映射,可以生成一個tablespace名稱,并請求包含tablespace的每一文件的分段映射。
  
  procedure ts_map(p_name varchar2)
  is
  begin
    page_open;          -- open the page
    htp.p('Tablespace: 'p_name);
    htp.p('<hr />');
    for file in
    (
      select file_id
       from dba_data_files
       where tablespace_name = p_name
       order by file_id
    )
    loop
      filemap(file.file_id);  -- generate a block map for the file
      htp.p('<hr />');
    end loop;
    info_form;          -- generate a form for segment info
    legend;           -- generate a legend for color mappings
    page_close;         -- close the page
  end ts_map;
  
  對于實際使用的分段映射,我們通常需要顯示一個“block”并用顏色表示。使用<table>標簽比較復雜。一個更好的方法是生成字符次序,即一段時間之后是間隔,這一間隔答應在任何位置給文本以顏色化。
  
  為了使得分段映射更加有用,我們想列出鼠標位置的block信息,并且突出組成這一片段的block,我們可以使用<a>標簽。
首先,生成一個指定a和a:hover的類型,然后建立每一Oracle數據庫段的類型:
  
  <style type="text/Css">
  a
  {
    text-decoration: none;
    font-family: monospace;
    font-size: 6pt;
  }
  a:hover {background-color: yellow}
  a.free {background-color: white}
  a.cache {background-color: #FFCC00}
  a.cluster {background-color: #9A0000}
  a.index {background-color: #009900}
  a.lobindex {background-color: #9AFE66}
  a.lobsegment {background-color: #9A99FF}
  a.rollback {background-color: #FF3300}
  a.temporary {background-color: #DFFEFF}
  a.table {background-color: #003399}
  a.other {background-color: magenta}
  body
  {
    background-color: white;
    font-family: sans-serif;
    font-size: 10pt;
  }
  </style>
  
  我們可以列出有關鼠標位置的block使用者、名稱、類型、block數量、以及片段的長度。為了實現這一目的,我們需要兩個javascript函數,包含以上信息的這兩個函數被調用,并傳遞到表單的域內:
  
  <script language="Javascript">
  function hover(own,nam,typ,bid,len)
  {
    document.form.owner.value = own;
    document.form.name.value = nam;
    document.form.type.value = typ;
    document.form.block_id.value = bid;
    document.form.length.value = len;
    return true;
  }
  function leave()
  {
    document.form.owner.value = "";
    document.form.name.value = "";
    document.form.type.value = "";
    document.form.block_id.value = "";
    document.form.length.value = "";
    return true;
  }
  </script>
  . . .
  <form name="form">
  <table border=0>
  <tr><td>Owner:</td><td><input name="owner" /></td></tr>
  <tr><td>Name:</td><td><input name="name" /></td></tr>
  <tr><td>Type:</td><td><input name="type" /></td></tr>
  <tr><td>Block#:</td><td><input name="block_id" /></td></tr>
  <tr><td>Length:</td><td><input name="length" /></td></tr>
  </table>
  </form>
  
  對于每一片段,我們需要建立一個block的<a>標簽。最后,建立一個顯示不同顏色含義的圖表:
  
  <table border=0>
  <tr><thcolspan="2">Legend</th></tr>
  <tr><td><a name="free" class="free">. </a></td>
  <td>Free Space</td></tr>
  <tr><td><a name="cache" class="cache">. </a></td>
  <td>Cache</td></tr>
  <tr><td><a name="cluster" class="cluster">. </a></td>
  <td>Cluster</td></tr>
  <tr><td><a name="index" class="index">. </a></td>
  <td>Index</td></tr>
  <tr><td><a name="lobindex" class="lobindex">. </a></td>
  <td>LobIndex</td></tr>
  <tr><td><a name="lobsegment" class="lobsegment">. </a></td>
  <td>LobSegment</td></tr>
  <tr><td><a name="rollback" class="rollback">. </a></td>
  <td>Rollback</td></tr>
  <tr><td><a name="temporary" class="temporary">. </a></td>
  <td>Temporary</td></tr>
  <tr><td><a name="table" class="table">. </a></td>
  <td>Table</td></tr>
  <tr><td><a name="other" class="other">. </a></td>
  <td>Other</td></tr>
  </table>
  
  以下是完整代碼:
  
  create or replace package blkmap
    authidcurrent_user
  as
    procedure ts_menu;
    procedure ts_map(p_name varchar2);
  end blkmap;
  /
  show errors;
  
  create or replace package body blkmap
  as
    procedure page_open;
    procedure info_form;
    procedure filemap(p_id number);
    procedure legend;
    procedure page_close;
    --
    procedure ts_menu
    is
    begin
      htp.p('<html>');
      htp.p('<body bgcolor="white">');
      htp.p('<h2>Tablespaces</h2>');
      htp.p('<ul>');
      for ts in (select tablespace_name from dba_tablespaces) loop
        htp.p('<li><a href="blkmap.ts_map?
p_name='ts.tablespace_name'">'
          ts.tablespace_name'</a></li>');
      end loop;
      htp.p('</ul>');
      htp.p('</body>');
      htp.p('</html>');
    end ts_menu;
    --
    procedure ts_map(p_name varchar2)
    is
    begin<

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 河北省| 鲁山县| 两当县| 南岸区| 山东省| 苏州市| 澎湖县| 潍坊市| 柘荣县| 荥阳市| 图片| 沂南县| 楚雄市| 阜宁县| 瑞昌市| 永仁县| 弥勒县| 惠州市| 临湘市| 莱州市| 双辽市| 七台河市| 图们市| 呼和浩特市| 安龙县| 浏阳市| 宁津县| 庆安县| 乌拉特前旗| 静海县| 图木舒克市| 宣恩县| 哈密市| 镇康县| 前郭尔| 葵青区| 吴江市| 连城县| 富顺县| 闵行区| 固阳县|