利用分段使用映射为oracle数据库建立HTML

2016-02-19 18:51 23 1 收藏

在这个颜值当道,屌丝闪边的时代,拼不过颜值拼内涵,只有知识丰富才能提升一个人的内在气质和修养,所谓人丑就要多学习,今天图老师给大家分享利用分段使用映射为oracle数据库建立HTML,希望可以对大家能有小小的帮助。

【 tulaoshi.com - Web开发 】

  在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('h2Tablespaces/h2');
    htp.p('ul');
    for ts in (select tablespace_name from dba_tablespaces) loop
      htp.p('lia 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”并用颜色表示。使用 标签比较复杂。一个更好的方法是生成字符次序,即一段时间之后是间隔,这一间隔允许在任何位置给文本以颜色化。
  为了使得分段映射更加有用,我们想列出鼠标位置的block信息,并且突出组成这一片段的block,我们可以使用标签。首先,生成一个指定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
  trtdOwner:/tdtdinput name="owner" //td/tr
  trtdName:/tdtdinput name="name" //td/tr
  trtdType:/tdtdinput name="type" //td/tr
  trtdBlock#:/tdtdinput name="block_id" //td/tr
  trtdLength:/tdtdinput name="length" //td/tr
  /table
  /form

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  对于每一片段,我们需要建立一个block的标签。最后,建立一个显示不同颜色含义的图表:
  table border=0
  trthcolspan="2"Legend/th/tr
  trtda name="free" class="free". /a/td
  tdFree Space/td/tr
  trtda name="cache" class="cache". /a/td
  tdCache/td/tr
  trtda name="cluster" class="cluster". /a/td
  tdCluster/td/tr
  trtda name="index" class="index". /a/td
  tdIndex/td/tr
  trtda name="lobindex" class="lobindex". /a/td
  tdLobIndex/td/tr
  trtda name="lobsegment" class="lobsegment". /a/td
  tdLobSegment/td/tr
  trtda name="rollback" class="rollback". /a/td
  tdRollback/td/tr
  trtda name="temporary" class="temporary". /a/td
  tdTemporary/td/tr
  trtda name="table" class="table". /a/td
  tdTable/td/tr
  trtda name="other" class="other". /a/td
  tdOther/td/tr
  /table

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  以下是完整代码:
  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('h2Tablespaces/h2');
      htp.p('ul');
      for ts in (select tablespace_name from dba_tablespaces) loop
        htp.p('lia 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

来源:http://www.tulaoshi.com/n/20160219/1619239.html

延伸阅读
标签: SQLServer
  在第一部分,我们讨论了如何优化 ASP 代码。在这一部分,我们把重点放在数据访问上。 一般情况下,数据访问时间要比 ASP 代码解释,编译时间长,不要让数据检索成为影响 ASP 性能的瓶颈。 首先,讲一些老生常谈的话。比如:需要声明变量,要用 Response.Write SQL_string 来进行调试,要用 On Error Resume Next 来捕获错误。不要在 ...
 作者:未知 更新人:Finishing 来源:不详 更新时间:2004.07.06 投稿信箱: jc@ddvip.net   

经验教程

356

收藏

25
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部