add swap using directory on rhel5


“df -h”查看一下在现有的磁盘分区中,哪个分区的空间比较空闲?
从/dev/mapper/VolGroup00-LogVol00上取一部分磁盘空间,然后输出出来给”/root/swapfile01”,block size=1k,取count次,总共2G
[root@rhel5u4test ~]# dd if=/dev/mapper/VolGroup00-LogVol00 of=/root/swapfile01 bs=1k count=2048000
2048000+0 records in
2048000+0 records out
2097152000 bytes (2.1 GB) copied, 97.3524 seconds, 21.5 MB/s

dd之前,磁盘分区的情况如下:
[root@rhel5u4test ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
38G  4.6G   32G  13% /
/dev/mapper/VolGroup00-LogVol02
38G  2.4G   34G   7% /opt
/dev/sda1             190M   12M  169M   7% /boot
tmpfs                 506M     0  506M   0% /dev/shm

dd过后:
[root@rhel5u4test ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
38G  6.6G   30G  19% /
/dev/mapper/VolGroup00-LogVol02
38G  2.4G   34G   7% /opt
/dev/sda1             190M   12M  169M   7% /boot
tmpfs                 506M     0  506M   0% /dev/shm

2G的空间已经取走了。

把/root/swapfile01搞成swap
[root@rhel5u4test ~]# mkswap /root/swapfile01
Setting up swapspace version 1, size = 2097147 kB
把刚刚创建的swap激活起来
[root@rhel5u4test ~]# swapon /root/swapfile01
[root@rhel5u4test ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
38G  6.6G   30G  19% /
/dev/mapper/VolGroup00-LogVol02
38G  2.4G   34G   7% /opt
/dev/sda1             190M   12M  169M   7% /boot
tmpfs                 506M     0  506M   0% /dev/shm
查看swap分区的情况,发现变成4047了,我随后swapoff掉,看看原来是多大
[root@rhel5u4test ~]# free -m
total       used       free     shared    buffers     cached
Mem:          1010        992         18          0        328        558
-/+ buffers/cache:        105        904
Swap:         4047         30       4017
swapoff之后,发现原来没增加swap之前,大小是2047
[root@rhel5u4test ~]# swapoff /root/swapfile01
[root@rhel5u4test ~]# free -m
total       used       free     shared    buffers     cached
Mem:          1010        991         19          0        328        558
-/+ buffers/cache:        105        905
Swap:         2047         30       2017
好了,整个用文件夹当swap的过程就结束了,可能收尾的工作就是/etc/fstab的事情。你可以试试reboot服务器之后
看看swap是否还能生效,如果失效,可能需要/etc/rc.local这样去加脚本,或者就是/etc/fstab里面加内容

oracle 10.2.0.1 install on rhel5 x86的相关问题

在rhel5 x86上安装oracle 10.2.0.1的时候一直顾虑缺少rpm包的问题,在doc上发现需要如下的rpm包
binutils-2.15.92.0.2-13.EL4
compat-db-4.1.25-9
compat-libstdc++-296-2.96-132.7.2
control-center-2.8.0-12
gcc-3.4.3-22.1.EL4
gcc-c++-3.4.3-22.1.EL44
glibc-2.3.4-2.9
glibc-common-2.3.4-2.9
gnome-libs-1.4.1.2.90-44.1
libstdc++-3.4.3-22.1
libstdc++-devel-3.4.3-22.1
make-3.80-5
pdksh-5.2.14-30
sysstat-5.0.5-1
xscreensaver-4.18-5.rhel4.2
setarch-1.6-1
其中gnome-libs的包很麻烦,去google上找了类似的gnome-libs包,打上总是会报dependecy的错误
error: Failed dependencies:
ORBit is needed by gnome-libs-1.4.1.2.90-24.2.i386
imlib is needed by gnome-libs-1.4.1.2.90-24.2.i386
libgdk_imlib.so.1 is needed by gnome-libs-1.4.1.2.90-24.2.i386
libIIOP.so.0 is needed by gnome-libs-1.4.1.2.90-24.2.i386
libORBitCosNaming.so.0 is needed by gnome-libs-1.4.1.2.90-24.2.i386
libORBit.so.0 is needed by gnome-libs-1.4.1.2.90-24.2.i386
libORBitutil.so.0 is needed by gnome-libs-1.4.1.2.90-24.2.i386
libpng.so.2 is needed by gnome-libs-1.4.1.2.90-24.2.i386
没办法,在缺少这个包的情况下硬着头皮上,尽然安装+建库成功,没有任何的问题。
此次安装主要解决了两个疑惑:
1.gnome-libs在rhel5 x86上安装oracle的时候,缺少也没有关系
2.内核参数、limits如果不手工更改,oracle安装的时候不会自己帮你更改,所以还是手动更改吧

oracle pga设置

通常oracle内存的调整主要涉及到pga和sga两大部分,而在平常可能过多的关注放在了SGA上,而忽略了PGA。SGA_MAX_SIZE以及SGA_TARGET就可以让SGA整个部分的内存交给oracle自己托管了,它能够自动的分配各个部分了。而在PGA上面也是有这样的参数的,只要设置workarea_size_policy为auto,同时把分配给pga的内存上限设置给pga_aggregate_target就也能够像sga那样交给oracle自动分配托管。当然”自动”与”手动”这两种方式,孰优孰劣呢?也许你即使”自动”的分配了,可能由于前端app写的SQL巨烂无比,造成sga很大一部分的内存资源被自动分配给shared_pool,例如你分配给sga5G,而app的sql太糟糕了,出现非常多的硬解析,可能会出现share_pool被自动分配给了4G或更大,shared_pool过大,对于系统来说也不是很好的事情,oracle的内部结构是通过latch来维护的,如果过大,当新的sql需要解析的时候,可能需要搜索过多的内存来寻找新的合适的空间,碎片过多,latch过多,会导致CPU严重问题。如下是oracle onlince doc上关于workarea_size_policy的一些说明
WORKAREA_SIZE_POLICY specifies the policy for sizing work areas. This parameter controls the mode in which working areas are tuned.
Values:
  • AUTO
    Work areas used by memory-intensive operators are sized automatically, based on the PGA memory used by the system, the target PGA memory set in PGA_AGGREGATE_TARGET, and the requirement of each individual operator.

央行的圣诞大礼-加息

央行很给力啊,偷偷摸摸的加息了啊,其实也不能算是偷摸,周五下午的A股行情就说明了一些蛛丝马迹,只是它给的暗示,我没有警惕而已,看来加息的通道是要走上一段了,拭目以待周一吧,应该已经消化一部分了。

upgrade from 10203 to 10204

本次升级主要是从10.2.0.1升级到10.2.0.4,metalink上获得patch的包是必然的。然后就按照下面进行吧。首先关闭所有与oracle相关的服务,emctl stop dbconsole,isqlplusctl stop,shutdown immediate关闭实例,lsnrctl stop关闭监听。
1.安装patch
在安装包里面有setup.exe,双击执行即可,然后next就ok了,你可能会遇到如下的错误信息,msvcr71.dll被占用了,去services.msc中找到Distributed Transaction Coordinator服务,并停止它,这样能够解决。当然在安装的时候记住要把patch安装在现有的oracle_home中。
2.apply patch
patch安装完毕后需要使用dbua,使之生效,有一些对象需要重新编译,需要升级之前的备份等等。

oracle 10g install on rhel5

oracle 10的官方文档没有提及1og on rhel5的事情,倒是以rhel4为例子的,所以为了避免不必要的麻烦,在实施的时候,尽量还是选择rhel4吧。客户倒是总有新需求,只是os是rhel5的,这不没按照文档果然遇见错误了…. 就怕linux上缺少rpm包的事情,怕什么,偏偏来什么,费劲搞上了,这里记一下:
在安装到一半的时候,会遇见类似”ins_ctx.mk”,”ins_sysman”的错误,恭喜中奖了。在metalink上找了才知道原来64位oracle10g在安装是需要打32位和64位两种rpm包的。下面是相关的doc id
Doc ID:  Note:302209.1
Symptoms
The installation of the 10g stack for 64 bit goes on fine till the penultimate relink stage and then fails at the relinking of ins_sysman.mk (OEM agent).
Review of the installation log shows consistent “/usr/lib/crti.o not found” & “/usr/lib/libc_nonshared.a” not found messages.
Troubleshooting & Analysis

While crti.o & libc_nonshared.a can be found in /usr/lib64. Even after copying them to /usr/lib does not work, just because they are not in 64 bit format.
Also, running $ genclntsh or $ relink all commands for relinking binaries, gives the following error:
file truncated: $ORACLE_HOME//lib/libclntsh.so, unrecognized format
You will find that the file is actually of 0 bytes. This is because the make utility could not find the right object and archive files for generating the shared object file. The same file may be present in the $ORACLE_HOME//lib32 directory fine.
Forcibly adding /usr/lib or /usr/lib64 in the LD_LIBRARY_PATH and restarting the installation does not help. In fact, Its not required to set any environment variables before the Installation.
Cause
The files /usr/lib/crti.o & /usr/lib/libc_unshared.a (the ones which the installer is trying to find) are delivered as part of the 32 bit version of the glibc-devel-2.3.2-95.30 rpm (the exact version is not relevant here, what is relevant is that they are installed on the OS from the 32bit version of the rpm).
When you do a # rpm -qa | grep glibc-devel, you should see 2 rows in the output, one for the 32 bit and one for the 64 bit.
# rpm -qa | grep glibc-devel glibc-devel-2.3.2-95-27 –> 32bit version glibc-devel-2.3.2-95-27 –> 64bit version
While the Oracle media being used for installation is of 64 bit, there are some components of the rdbms which need reference to 32bit object, archive and shared object files to relink successfully.
Solution

As root user, load the 32 bit version of the glibc-devel-2.3.2-95-27.rpm:
# rpm -Uvh /<absolute_path_to_rpm_directory>/glibc-devel-2.3.2-95-27.rpm The important distinction between 32 bit and 64 bit rpms is that 32 bit rpms will be listed under the tag i386 and the 64 bit ones will be listed under x86_64 tag for SMP OS (you can find out if your OS is SMP or not by typing uname -a).
其实最重要的还是把文档中要求的rpm包给打全了,而且尽管是x64 的os,有些i386(x86)的包仍然需要打上。
o libaio-0.3.103-3.i386.rpm
o compat-db-4.1.25-9.x86_64.rpm
o control-center-2.8.0-12.x86_64.rpm
o gcc-3.4.3-22.1.x86_64.rpm
o gcc-c++-3.4.3-22.1.x86_64.rpm
o glibc-2.3.4-2.x86_64.rpm
o glibc-common-2.3.4-2.x86_64.rpm
o gnome-libs-1.4.1.2.90-44.1.x86_64.rpm
o libstdc++-3.4.3-22.1.x86_64.rpm
o libstdc++-devel-3.4.3-22.1.x86_64.rpm
o make-3.80-5.x86_64.rpm
o pdksh-5.2.14-30.x86_64.rpm
o sysstat-5.0.5-1.x86_64.rpm
o xscreensaver-4.18-5.rhel4.2.x86_64.rpm
o compat-libstdc++-33-3.2.3-47.3.x86_64.rpm
o glibc-kernheaders-2.4-9.1.87.x86_64.rpm
o glibc-headers-2.3.4-2.9.x86_64.rpm
o libaio-0.3.103-3.x86_64.rpm
o glibc-devel-2.3.4-2.9.x86_64.rpm
o glibc-devel-2.3.4-2.9.i386.rpm
good luck….

revoke dba from user

无意间操作的时候,发现如果revoke dba from user,用户user的系统权限,sys_privs,是会丢失的,看看下面这个操作记录。

SQL> select * from dba_role_privs where grantee=’SCOTT’;

GRANTEE                        GRANTED_ROLE                   ADM DEF
—————————— —————————— — —
SCOTT                          RESOURCE                       NO  YES
SCOTT                          CONNECT                        NO  YES
//scott有两个角色,resource和connect
SQL> select * from dba_sys_privs where grantee=’SCOTT’;

GRANTEE                        PRIVILEGE                                ADM
—————————— —————————————- —
SCOTT                          UNLIMITED TABLESPACE                     NO
//scott有unlimited tablespace的权限。

//给scott一个dba的角色
SQL> grant dba to scott;

授权成功。

SQL> select * from dba_role_privs where grantee=’SCOTT’;

GRANTEE                        GRANTED_ROLE                   ADM DEF
—————————— —————————— — —
SCOTT                          RESOURCE                       NO  YES
SCOTT                          DBA                            NO  YES
SCOTT                          CONNECT                        NO  YES
//尝试revoke dba from scott
SQL> revoke dba from scott;

撤销成功。
查询之前的角色,依旧存在
SQL> select * from dba_role_privs where grantee=’SCOTT’;

GRANTEE                        GRANTED_ROLE                   ADM DEF
—————————— —————————— — —
SCOTT                          RESOURCE                       NO  YES
SCOTT                          CONNECT                        NO  YES
//查询原来的系统权限情况,发现unlimited tablespace权限丢失了…….
SQL> select * from dba_sys_privs where grantee=’SCOTT’;

未选定行
这件事情告诉我们:在做revoke 操作的时候,慎重。。。。。。。

database character set and national character set

一直以来对于数据库的字符集有着莫名的恐惧,缘由是不是很好的区分”字符集”和”国家字符集”。我先说很陌生的国家字符集,一般在oracle安装过程中,仅仅有两个option选项,一个是AL16UTF16,另外一个是UTF-8,对于亚洲或者直接那中文来
说,AL16UTF16更为适合,它是定长的,在存储空间上更为节省,而utf-8是变长的,三个字节标示一个汉字,不过不用担心,dba长产担心的乱码问题,无论国家字符集选择哪个都不会发生,国家字符集是满足oracle中,nchar,nclob,nvarchar2等类似的存储,而这些类型用的还是比较少的,国家字符集可以理解为数据库字符集的一个补充。再来说传统意义上容易产生乱码的字符集设置,这个字符集便是al32utf8,zh16gbk之流了,它主要告诉数据库以何种编码方式存放数据,是unicode的utf-8还gbk?..等等。每个dba都知道在做imp/exp数据导入导出的时候,需要注意nls_lang客户端字符集尽量要和db的字符集一致。例如通过如下手段:export NLS_LANG=american_america.zhs16gbk

oracle 10.2.0.4 on windows server 2008 ent R2 x64

客户有新的需求,需要安装一个数据库,让我给建议,于是简单建议了oracle 10.2.0.4,毕竟稍微稳定些,同时在win平台的,介质也相对好弄一些,没metalink账号,没办法。实施起来才发现,用户的os是win2008server R2 x64的,印象中自己也在虚拟机上搞过oracle 10.2.0.3,只是32bit的,不过心想“没关系,照搞依旧”。但是刚刚在os check的时候就报错了,win 2008 serve r2的内核是6.1的,而oracle支持的缺省列表是:5.0,5.1,6.0,没关系,更改了orapara.ini,骗过了oracle,但是没想到在dbca建库的时候却报错了…一直hang在2%上,动不了了。。。。。后来才发现,readme中说的很清楚,只是自己没注意罢了。。

4. If installing on Windows 7 or Windows Server 2008 R2, then 10.2.0.5 patchset or higher must be used. (My Oracle Support)

message 206 not found no message file for product=RDBMS falicity=EXP

最近由于项目实施,需要给甲方实施备份任务,写了crontab任务定时执行,shell脚本手执行是没有问题的,但是到了crontab下面需要注意环境变量的问题。例如你执行exp导出oracle的某个用户的逻辑备份,在手工执行的时候,依据的环境变量是oracle .bash_profile里面的写好的,而在crontab下面.bash_profile里面预先设置的似乎不会执行生效,所以需要额外的在脚本中export $ORACLE_HOME一下。否则下面的错误很可能是很常见的:

message 206 not found no message file for product=RDBMS falicity=EXP

stuff

最近在看hft,很头疼,不是自己擅长的,不过也罢,是个学习的机会。另外在rhel上搞oracle的弟兄们要注意了,最好把os的字符设置成英文的,会避免很多不必要的问题。例如simsun的问题,gnome缺省情况下中文字体不是simsun,而EM,netca,乃至安装过程中需要的中文支持都是simsun的,所以,所以还是EN吧,再有就是缺rpm包的问题。另外,听说rhel 6都出来了,真是快啊,不知道redhat在上面搞了什么新特性,估计会偏向虚拟化吧。

oracle tips

1.os authen的问题

管理员常常会遇到这样的问题,如果拥有os账户的娃娃登录进来 ,例如oracle,通常是不需要oracle级别的dba账户,便能够拥有dba的权限的。os上有个东西叫“os验证”,oracle缺省的认为,如果你都能登录到os上,数据库的权限对你是没约束的,想搞什么破坏,依你。

如何来禁止”sqlplus / as sysdba”的方式?follow this:

在$oracle_home/network/admin的sqlnet.ora文件上添加如下的东西
SQLNET.AUTHENTICATION_SERVICES=(none)

当然你可以试试在win nt上,似乎和*unix不一样。

2.find . -type f |wc -l

这个命令可以帮你查到,在当前目录下有多少个文件,对于查找小文件的数量很有帮助。

3.8i ,9i ,10g

meomory的使用,一直是oracle在不断晚上的地方。例如从8i,9i,10g一路走来,oracle也在不断进步。9i解决了pga自动管理的功能。而10g完成了sga的自托管,到了11g更猛,整个内存的使用都可以交给memory_max_size,oracle自己全部搞定了,对于一般的dba来说,尤其优化经验不是很丰富的话,为什么不交给oracle自己来搞定呢?

另外在1og中,sga_max_size是标识oracle能够使用的”system global area”的总大小值,而sga_target则是设置是否”自动”,以及多少memory给自动的使用,可以看看oracle online doc,缺省为0的话,说明没有启动10g的sga自动管理。而这一般是需要设置其他的share pool ,db_buffer以适应应用特殊的需求。

PS: 今天mm国考,希望顺利。