oracle查看object对象使用空间

1、表空间大小

Select Tablespace_Name,Sum(bytes)/1024/1024 From Dba_Segments Group By Tablespace_Name order by Sum(bytes)/1024/1024 desc;

2、表占用空间

select segment_name, sum(bytes)/1024/1024 Mbytese from user_segments where segment_type='TABLE'  group by segment_name order by segment_name;
Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name order by Sum(bytes)/1024/1024 desc;

3、索引占用空间

select segment_name, sum(bytes)/1024/1024 Mbytese from user_segments where segment_type='INDEX'  group by segment_name order by segment_name;

4、数据文件使用情况

select a.tablespace_name,
       round(a.bytes / 1024 / 1024, 0)"总空间",
       round((decode(b.bytes, null, 0, b.bytes)) / 1024 / 1024, 0)"使用空间",
       round((decode(b.bytes, null, 0, b.bytes)) / a.bytes * 100, 1)"使用率",
       c.file_name,
       c.status
  from sys.sm$ts_avail a, sys.sm$ts_free b, dba_data_files c
 where a.tablespace_name = b.tablespace_name(+)
   and a.tablespace_name = c.tablespace_name
 order by a.tablespace_name;
-----------------------------------------------------------------------
select b.file_id 文件ID,
       b.tablespace_name 表空间,
       b.file_name 物理文件名,
       b.bytes / 1024 / 1024 大小M,
       c.max_extents / 1024 / 1024 可扩展数M,
       b.bytes / 1024 / 1024 + c.max_extents / 1024 / 1024 总大小M,
       trunc((b.bytes - sum(nvl(a.bytes, 0))) / 1024 / 1024)  已使用M,
       trunc(sum(nvl(a.bytes, 0)) / 1024 / 1024)  剩余M,
       trunc(sum(nvl(a.bytes, 0)) / (b.bytes) * 100, 2)  剩余比
  from dba_free_space a, dba_data_files b, dba_tablespaces c
 where a.file_id = b.file_id
   and b.tablespace_name = c.tablespace_name
 group by b.tablespace_name,
          b.file_name,
          b.file_id,
          b.bytes,
          c.max_extents,
          b.bytes / 1024 / 1024 + c.max_extents / 1024 / 1024
 order by b.file_id;

5、表空间使用统计

select a.tablespace_name,
       a.bytes / 1024 / 1024 "Sum MB",
       (a.bytes - b.bytes) / 1024 / 1024 "used MB",
       b.bytes / 1024 / 1024 "free MB",
       round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "percent_used"
  from (select tablespace_name, sum(bytes) bytes
          from dba_data_files
         group by tablespace_name) a,
       (select tablespace_name, sum(bytes) bytes, max(bytes) largest
          from dba_free_space
         group by tablespace_name) b
 where a.tablespace_name = b.tablespace_name
 order by ((a.bytes - b.bytes) / a.bytes) desc;

js考试系统时间倒计时

js实现时分倒计时、悬浮效果

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>无标题页</title>
    <meta HTTP-EQUIV="Content-Type" content="text/html; charset=gb2312" />
</head>
<body onload='ChangeTime();scall();'>
<form id="form1">
<!--模拟页面宽度高度-->
<div align="center">
<center>
<table width="770" height="3000" border="0" cellpadding="0" cellspacing="0" bgcolor="#F4F4F4">
<tr>
<td width="100%" valign="top"></td>
</tr>
</table>
</center>
</div>
<!--弹出时间提示-->
<div id="Javascript.RightDiv" style="position: absolute;z-index:1000;width:200px;height:30px;top:-1000px;word-break:break-all;display:none;">
<div id="timeshow" style="width:200px;height:20px;line-height:20px;text-align:center;font-size:12px;color:#000;background-color:#CCC;border:1px solid #333;"></div>
</div>
<SCRIPT LANGUAGE="JavaScript">
//弹出div
var showad = true;
var Toppx = 10;    //上端位置
var AdDivW = 200;   //宽度
var AdDivH = 25;   //高度
var PageWidth = 750; //页面多少宽度象素下正好不出现左右滚动条
var MinScreenW = 1000; //最小屏幕宽度象素
function scall(){
if(!showad){return;}
var Borderpx = ((window.screen.width-PageWidth)/2-AdDivW)/2;
document.getElementById("Javascript.RightDiv").style.display="";
document.getElementById("Javascript.RightDiv").style.top=document.body.scrollTop+Toppx;
document.getElementById("Javascript.RightDiv").style.left=document.body.scrollLeft+document.body.clientWidth-document.getElementById("Javascript.RightDiv").offsetWidth-Borderpx;
}
window.onscroll=scall;
window.onresize=scall;
//在线考试时间提示
var h=1; //设置考试时间(小时单位)
var m=0.1; //设置考试时间(分钟单位)
var timeShowId="timeshow"; //设置时间显示层ID
var TimeNum=h*60*60+m*60;
var timeStr;
function ChangeTime()
{
  TimeNum--;
    if(TimeNum > 0)
    {
       timeStr=setTimeout("ChangeTime()",1000);
       if(TimeNum<300)
       {
         alert('距离系统自动提交时间还剩5分钟,请尽快做好提交准备');
       }
        if(TimeNum<30)
       {
         alert('距离系统自动提交时间还剩30秒,请马上交卷');
       }
    }
    else
    {
       //系统提交  完善
    }
    document.getElementById(timeShowId).innerHTML="系统提示:你的时间还剩<span style=\"color:#FF0000;\">"+Math.floor(TimeNum/60)+"分"+TimeNum%60+"秒</span>";
}
</SCRIPT>
</form>
</body >
</html>

通过web更新网站(1)

现在维护的网站比较多,经常因为要修改一个小小的东西,要远程登录,或者ftp登录上去下载下来,然后在修改后,再上传上去,总之比较麻烦,我现在总体设想是通过web实现手工的更新网站,既实现通过web下载、上传、删除、编辑。
今天是实现了对整个站点的文件显示,下载和上传到对应目录,为该程序的第一部分
aspx代码

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function select_dir() {
            var select = document.getElementById("selectType");
            document.getElementById("h_dir").value = select.options[select.selectedIndex].value; ;
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <input id="h_dir" type="hidden" runat="server"/>
    <asp:Label ID="lbl_dir" runat="server" ></asp:Label>
    <asp:Button ID="btn_select" runat="server" Text="查看文件"
        onclick="btn_select_Click" />
    <div style="width:400px; height:500px; overflow:auto">
        <asp:Label ID="show_file" runat="server" ></asp:Label>
    </div>
    <asp:FileUpload ID="file_up" runat="server" />
    <asp:Button ID="btn_up" runat="server"   Text="上传文件" onclick="btn_up_Click" />
    </form>
</body>
</html>

cs代码

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Data;
using System.Threading;
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            string web_file=Server.MapPath(".");
            DirectoryInfo thisOne = new DirectoryInfo(web_file);
           lbl_dir.Text="<select id='selectType' onclick='select_dir();' ><option value='" + System.Web.HttpContext.Current.Server.UrlEncode(web_file) + "'>网站目录</option>" + ListSelectShow(thisOne, 0, "") + "</select>";
           h_dir.Value = System.Web.HttpContext.Current.Server.UrlEncode(web_file);
           if (Request.QueryString["F"]!=null)
           {
                string d_file = System.Web.HttpContext.Current.Server.UrlDecode(Request.QueryString["F"].ToString());
               //求文件名
               string[] fs = d_file.Split('\\');
                string   ext = fs[fs.Length - 1];
               //下载文件
                Page.Response.Clear();
                bool success = ResponseFile(Page.Request, Page.Response, ext, d_file, 1024000);
                if (!success)
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('下载文件失败,请重试');", true);
                Page.Response.End();
           }
        }
    }
    public  string ListTreeShow(DirectoryInfo theDir, int nLevel, string Rn)//递归目录和 文件,树形结构显示
    {
        if (nLevel == 0)
        {
            FileInfo[] fileInfo = theDir.GetFiles();
            foreach (FileInfo fInfo in fileInfo)
            {
                Rn += "├";
                Rn += "<a href='Default.aspx?F=";
                Rn = Rn + System.Web.HttpContext.Current.Server.UrlEncode(fInfo.FullName);
                Rn += "'>";
                Rn += fInfo.Name.ToString() + "</a> <br />";
            }
        }
        DirectoryInfo[] subDirectories = theDir.GetDirectories();//获得目录
        foreach (DirectoryInfo dirinfo in subDirectories)
        {
            if (nLevel == 0)
            {
                Rn += "├";
            }
            else
            {
                string _s = "";
                for (int i = 1; i <= nLevel; i++)
                {
                    _s += "│&nbsp;";
                }
                Rn += _s + "├";
            }
            Rn += "<b>" + dirinfo.Name.ToString() + "</b><br />";
            FileInfo[] fileInfo = dirinfo.GetFiles();   //目录下的文件
            foreach (FileInfo fInfo in fileInfo)
            {
                if (nLevel == 0)
                {
                    Rn += "│&nbsp;├";
                }
                else
                {
                    string _f = "";
                    for (int i = 1; i <= nLevel; i++)
                    {
                        _f += "│&nbsp;";
                    }
                    Rn += _f + "│&nbsp;├";
                }
                Rn += "<a href='Default.aspx?F=";
                Rn = Rn + System.Web.HttpContext.Current.Server.UrlEncode(fInfo.FullName);
                Rn += "'>";
                Rn += fInfo.Name.ToString() + "</a><br />";
            }
            Rn = ListTreeShow(dirinfo, nLevel + 1, Rn);
        }
        return Rn;
    }
    public static string ListSelectShow(DirectoryInfo theDir, int nLevel, string Rn)//递归目录下拉框显示
    {
        DirectoryInfo[] subDirectories = theDir.GetDirectories();//获得目录
        foreach (DirectoryInfo dirinfo in subDirectories)
        {
            Rn += "<option value=\"" +System.Web.HttpContext.Current.Server.UrlEncode( dirinfo.FullName) + "\" >";
            if (nLevel == 0)
            {
                Rn += "├";
            }
            else
            {
                string _s = "";
                for (int i = 1; i <= nLevel; i++)
                {
                    _s += "│&nbsp;";
                }
                Rn += _s + "├";
            }
            Rn += "" + dirinfo.Name.ToString() + "</option>";
            Rn = ListSelectShow(dirinfo, nLevel + 1, Rn);
        }
        return Rn;
    }
    protected void btn_select_Click(object sender, EventArgs e)
    {
        string first_dir = System.Web.HttpContext.Current.Server.UrlDecode(h_dir.Value);
          DirectoryInfo thisOne = new DirectoryInfo(first_dir);
          show_file.Text = ListTreeShow(thisOne, 0, "");
    }
    public bool ResponseFile(HttpRequest _Request, HttpResponse _Response, string _fileName, string _fullPath, long _speed)//下载文件
    {
        try
        {
            FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            BinaryReader br = new BinaryReader(myFile);
            try
            {
                _Response.AddHeader("Accept-Ranges", "bytes");
                _Response.Buffer = false;
                long fileLength = myFile.Length;
                long startBytes = 0;
                double pack = 10240; //10K bytes
                //int sleep = 200;   //每秒5次   即5*10K bytes每秒
                int sleep = (int)Math.Floor(1000 * pack / _speed) + 1;
                if (_Request.Headers["Range"] != null)
                {
                    _Response.StatusCode = 206;
                    string[] range = _Request.Headers["Range"].Split(new char[] { '=', '-' });
                    startBytes = Convert.ToInt64(range[1]);
                }
                _Response.AddHeader("Content-Length", (fileLength - startBytes).ToString());
                if (startBytes != 0)
                {
                    //Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength-1, fileLength));
                }
                _Response.AddHeader("Connection", "Keep-Alive");
                _Response.ContentType = "application/octet-stream";
                _Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8));
                br.BaseStream.Seek(startBytes, SeekOrigin.Begin);
                int maxCount = (int)Math.Floor((fileLength - startBytes) / pack) + 1;
                for (int i = 0; i < maxCount; i++)
                {
                    if (_Response.IsClientConnected)
                    {
                        _Response.BinaryWrite(br.ReadBytes(int.Parse(pack.ToString())));
                        Thread.Sleep(sleep);
                    }
                    else
                    {
                        i = maxCount;
                    }
                }
            }
            catch
            {
                return false;
            }
            finally
            {
                br.Close();
                myFile.Close();
            }
        }
        catch
        {
            return false;
        }
        return true;
    }
    protected void btn_up_Click(object sender, EventArgs e)
    {
        if (file_up.HasFile)
        {
            try
            {
                string path = System.Web.HttpContext.Current.Server.UrlDecode(h_dir.Value);
                string file = file_up.FileName;
                file_up.SaveAs(path + "/" + file);
                DirectoryInfo thisOne = new DirectoryInfo(path);
                show_file.Text = ListTreeShow(thisOne, 0, "");
            }
            catch
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('上传文件失败,请重试');", true);
            }
        }
        else
        {
            Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('请选择文件');", true);
        }
    }
}

效果

主要难点是对站点中的文件和目录递归树形显示

Solaris10 配置网络

也许是自己对Unix的好奇,也许是Unix+C的利益驱使,我装起了几个Unix系统,想看看到底哪个比较好,比较适合我。在安装的Freebsd、OpenSolaris、Solaris10这三个可以装在32位的cpu上的系统。大概的随便的打开,使用了下shell,感觉和linux没有太大的区别(也许我还没有理解其中的精髓),从做服务器的角度来说,应该是Solaris10最合适,从个人使用的角度来说,OpenSolaris比较顺手。最后装好在VM中的是Solaris10,然后就多玩了下,配置了网络,使用ssh远程访问。现在把Solaris的网络配置给记录下来,以便以后参考
主机名关联文件(hostname.网卡,hosts)
# cat /etc/hostname.e1000g0
xifenfei
# cat /etc/hosts
127.0.0.1 localhost
192.168.1.10 xifenfei loghost
ip地址关联文件
# cat /etc/hosts
127.0.0.1 localhost
192.168.1.10 xifenfei loghost
# cat /etc/netmasks
192.168.1.0 255.255.255.0
# cat /etc/defaultrouter
192.168.1.1
域名相关文件
#cat/etc/resolv.conf
nameserver 202.96.134.133
nameserver 202.96.128.68
#cat /etc/nsswitch.conf
hosts: files dns
常用命令
ifconfig -a —>得出网卡的名字,一般第一块100M网卡名为pcn0
ifconfig pcn0 down —>先把网卡pcn0的服务暂时停止
ifconfig pcn0 up —>启动网卡pcn0的服务
ifconfig pcn0 192.168.1.10 netmask 255.255.255.0 up —>临时修改ip启动网卡(永久性修改后,使用该命令可以使修改ip生效)

DB Console管理

今天准备启动linux下的oracle OEM,突然想起来,在win下,有个console相关的进程,想想linux下应该也有类此的东西,然后网上一查,果真有个叫做dbconsole的东西,不过要先执行lsnrctl start
1、执行emctl命令
Environment variable ORACLE_UNQNAME not defined. Please set ORACLE_UNQNAME to database unique name.
我想应该是在spfile中没有设置这个参数,然后似乎用export ORACLE_UNQNAME=orcl经行环境变量设置
2、再执行emctl命令,尽然提示
EM Configuration issue. /u01/oracle/xff_orcl not found
然后网上查了下执行emca -config dbcontrol db
然后跟换提示进行相关参数配置
[oracle@xff ~]$ emca -config dbcontrol db
EMCA 开始于 2010-10-3 15:11:12
EM Configuration Assistant, 11.2.0.0.2 正式版
版权所有 (c) 2003, 2005, Oracle。保留所有权利。
输入以下信息:
数据库 SID: orcl
监听程序端口号: 1521
监听程序 ORACLE_HOME [ /u01/oracle ]: /u01/oracle
SYS 用户的口令:
DBSNMP 用户的口令:
SYSMAN 用户的口令:
通知的电子邮件地址 (可选):
通知的发件 (SMTP) 服务器 (可选):
最后提示配置成功
3、通过浏览器
https://xff:1158/em/可以进行正常访问
4、相关命令:
emctl status dbconsole 查看dbconsole状态
emca -repos create创建一个EM资料库
emca -repos recreate重建一个EM资料库
emca -repos drop删除一个EM资料库
emca -config dbcontrol db配置数据库的 Database Control
emca -deconfig dbcontrol db删除数据库的 Database Control配置
emca -reconfig ports 重新配置db control和agent的端口
emctl start dbconsole启动EM console服务,使用前需要先设置ORACLE_SID环境变量
emctl stop dbconsole停止EM console服务,使用前需要先设置ORACLE_SID环境变量
注:通过查看$ORACLE_HOME/install/portlist.ini 文件可以知道当前dbcontrol正在使用的端口,默认dbcontrol http端口1158,agent端口3938。如果要重新配置端口,可以使用如下命令:
emca -reconfig ports -dbcontrol_http_port 1159
emca -reconfig ports -agent_port 3939

shell编程——基本语法

一、判断语句
1、if……then……if语句

#!/bin/bash
read -p "请输入y/n:" ym
if [ "$ym" == "Y" -o "$ym" == "y" ]; then
        echo "你输入的是Y"
        exit 0
elif [ "$ym" == "N" -o "$ym" == "n" ]; then
        echo "你输入的是N"
        exit 0
else
        echo "你输入的不是N或者Y"
fi

note:if附近很多空格,全部用空格隔开
2、case……esac语句

#!/bin/bash
read -p "请输入(Y/n):" fei
case $fei in
y)
        echo '您输入的是y'
        ;;
Y)
        echo '您输入的是Y'
        ;;
n)
        echo '您输入的是n'
        ;;
N)
        echo '您输入的是N'
        ;;
*)
        echo '您输入的不符合要求'
        ;;
esac

二、循环语句
1、while语句

#!/bin/bash
s=0
i=0
while [ "$i" != 100 ]
do
        i=$(($i+1))
        s=$(($s+$i))
done
echo "the result of '1+2+……+100' is $s"

2、until语句

#!/bin/bash
until [ "$yn" == "yes" -o "$yn" == "YES" ]
do
        read -p "Please input yes/YES to stop this program: " yn
done
echo "OK! you input the correct answer."

note:当until满足是进入循环,和while相反
3、for…do…done语句

#举例一
#!/bin/bash
for var in xi fen fei
do
        echo "this is ${var} "
done
#举例二
#!/bin/bash
filelist=$(ls -la)
for var in v$filelist
do
        echo "${var}"
done
#举例三
#!/bin/bash
s=0
for i in $(seq 1 100)
do
        s=$(($s+$i))
done
echo "the result of '1+2+……+100' is $s"
#举例四
#!/bin/bash
echo "请输入从1开始累加到N的值:"
read nu
s=0
for((i=1;i<=$nu;i=i+1))
do
        s=$(($s+$i))
done
echo "1+……+$nu is ==>$s"

安装rlwrap(让sqlplus使用如同在win dos下)

在linux中,使用sqlplus不能使用上线键,有些情况下连backspace键都不能使用,给通过sqlplus对oracle的管理带来了很多不便,使用rlwrap可以解决这个问题,给你一个和win下dos一样的操作感觉
官网:http://utopia.knoware.nl/~hlub/uck/rlwrap/
1、在Ubuntu中安装rlwrap
1)sudo apt-get install rlwrap
2)在/etc/profile文件中添加
alias sqlplus=’rlwrap sqlplus’
alias rman=’rlwrap rman’
2、在centos中安装rlwrap
1)wget http://utopia.knoware.nl/~hlub/uck/rlwrap/rlwrap-0.37.tar.gz
2)tar -xzvf rlwrap-0.37.tar.gz
3)./configure
4)make
5)make install
6)在/home/oracle/.bash_profile中添加
alias sqlplus=’rlwrap sqlplus’
alias rman=’rlwrap rman’

Ubuntu网络管理

一、网络配置
1、配置静态ip地址
1)修改/etc/network/interfaces文件(eth0)
iface eth1 inet static
address 192.168.0.101
netmask 255.255.255.0
network 192.168.0.0
broadcask 192.168.0.255
gateway 192.168.0.2
2)重启网卡
/etc/init.d/networking restart 或者
$ sudo ifdown eth0
$ sudo ifup eth0
3)命令设置
sudo ifconfig eth0 192.168.0.190 netmask 255.255.255.0 (ip地址)
sudo route add default gw 192.168.0.1 (网关)
2、动态获取ip地址
sudo dhclient eth0
3、DNS信息
修改/etc/resolv.conf 文件
nameserver DNS的地址1
二、ssh配置
1、安装ssh
sudo apt-get install ssh
2、重启/开启ssh
sudo /etc/init.d/ssh start/restart
3、查看开启情况
netstat -tlp

Ubuntu10.4安装oracle 11gR2

1、安装Ubuntu并升级至最新
安装省略
升级:
sudo su -(-必须的,重新启动一个新回话,主要就是环境变量)
apt-get update
apt-get dist-upgrade
reboot—-完成后重启
2、安装必要的包(不知道在deb中是否叫做包)
sudo su –
apt-get install build-essential libaio1 gawk ksh libmotif3 alien libtool lsb-rpm
3、建立一些链接
sudo su –
ln -sf bash /bin/sh
ln -s /usr/bin/awk /bin/awk
ln -s /usr/bin/rpm /bin/rpm
ln -s /usr/bin/basename /bin/basename
mkdir /etc/rc.d
for i in 0 1 2 3 4 5 6 S ; do ln -s /etc/rc$i.d /etc/rc.d/rc$i.d ; done
4、创建组、用户和相关文件夹
addgroup oinstall
addgroup dba
addgroup nobody
usermod -g nobody nobody
useradd -g oinstall -G dba -p password -d /home/oracle -s /bin/bash oracle
passwd -l oracle
mkdir /home/oracle
chown -R oracle:dba /home/oracle
mkdir -p /u01/oracle
chown -R oracle:dba /u01
5、相关参数修改
1)/etc/sysctl.conf
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
net.ipv4.tcp_wmem = 262144 262144 262144
net.ipv4.tcp_rmem = 4194304 4194304 4194304
2)/etc/security/limits.conf
oracle soft nproc 2047
oracle hard nproc 16383
oracle soft nofile 1023
oracle hard nofile 65535
3)/etc/pam.d/login
session required /lib/security/pam_limits.so
session required pam_limits.so
4)执行sysctl -p,使得刚刚修改的参数生效
6、修改环境变量/etc/profile文件中添加
ORACLE_SID=orcl
ORACLE_BASE=/u01
ORACLE_HOME=/u01/oracle
NLS_LANG=AMERICAN_AMERICA.UTF8
PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_BASE ORACLE_SID ORACLE_HOME PATH NLS_LANG
7、oracle11g安装文件准备
unzip解压
chown -R oracle:dba database(解压的安装文件夹)
8、开始安装
sudo su –
xhost +127.0.0.1(或者使用oracle图形化界面登录安装)
su – oracle
export LANG=en_US(采用英文界面安装,中文乱码,因为jdk问题,不想配置)
./runInstaller -ignoreSysPrereqs(忽略安装时的版本检查)
9、安装过程中
检查的时候,会有错误和警告,全部忽略(不是oracle支持的版本,没有办法)
注意选择数据库编码为utf8,不然会出现乱码(因为在环境变量中设置了数据库客户端编码为utf8)
还有选择地区等信息(建议先安装数据库软件,然后使用dbca创建数据库)
信息比较多,如果不能选择清楚,在网上找些资料,配置起中文正常显示(这样很多变量不用人工去选择)
10、安装结束后执行提示脚本
提示:使用root用户权限执行
11、总体感觉:
因为Ubuntu不是oracle官方支持的linux版本,所以在安装过程中会有很多多于的步骤,如有些是采用链接方式进行的;还在版本检查被强行忽略,安装检查错误提示被忽略,还有和jdk不一致产生乱码问题等。因为在安装过程中忽略了很多警告和错误,到底会不会产生什么影响现在还不知道,只是做了简单的测试工作正常。个人感觉,Ubuntu不是很适合做oracle服务器,至少是在oracle官方没有正式支持前不是很时候,很多东西都是靠网友总结出来的。
我对比了下上次在centos上安装oracle的过程,感觉这里有些东西就是为了模仿redhat的操作系统而执行的操作,而且有些就算是模仿了,也还是没有redhat下面好,如环境变量的地方,在Ubuntu中是全局的(所有用户都有效),而redhat中是oracle单个用户(感觉更安全),当然我linux功底有限,也许说了很多错话。
CentOs 5安装oracle 11g R2数据库

创建Logical Standby

1、Create a Physical Standby Database
具体见linux下使用rman配置standby data guard(11gR2版)
2、Stop Redo Apply on the Physical Standby Database
在primary database上执行ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
3、修改primary上的参数文件并建立LogMiner字典

LOG_ARCHIVE_DEST_1=
'LOCATION=/archive/orcl/
VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=orcl'
LOG_ARCHIVE_DEST_3=
'LOCATION=/archive/standby/orcl/
VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE)
DB_UNIQUE_NAME=orcl'
LOG_ARCHIVE_DEST_STATE_3=ENABLE
--LOG_ARCHIVE_DEST_2未作修改没有列出

执行EXECUTE DBMS_LOGSTDBY.BUILD;
4、Physical Standby Database Convert to a Logical Standby Database(standby上执行)
ALTER DATABASE RECOVER TO LOGICAL STANDBY db_name;
5、修改Logical standby database参数

LOG_ARCHIVE_DEST_1=
'LOCATION=/archive/orcl/
VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=boston'
LOG_ARCHIVE_DEST_2=
'SERVICE=orcl ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=orcl'
LOG_ARCHIVE_DEST_3=
'LOCATION=/archive/standby/xff/
VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE)
DB_UNIQUE_NAME=xff'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_DEST_STATE_3=ENABLE

6、重启logical standby database
STARTUP MOUNT;
ALTER DATABASE OPEN RESETLOGS;
7、添加standby logfile文件
具体见oracle之data guard(2)——物理standby和primary切换中的添加standby redo部分
8、开启和关闭应用
alter database start logical standby apply immediate;–开启
alter database recover managed standby database cancel;–关闭
9、相关事宜说明
主要参考oracle 的online documentation 11g release 2文档中的data guard部分
注意11g这部分中和10g的不同,多了些新特新,不用新建密码文件