当前位置:  数据库>其它
本页文章导读:
    ▪CentOS 6.3 Minimal 源码安装 PostgreSQL 9.2.2      # 修改防火墙设置,打开5432端口vi /etc/sysconfig/iptables-A INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT# 重启防火墙使新设置生效service iptables restart# 新增用户组groupadd postgres# 新增用户use.........
    ▪浅谈Oracle的高水位线--HWM             高水位是记录段里能容纳数据的上限,高水位存在段里       全表扫先读段头块,而后在段头块里面找到HWM        下面用实验由内而外来理解Or.........
    ▪Oracle PL/SQL比较两个字段是否一样       Oracle PL/SQL中判断两个两个字段相等或者不相等的时候,常常出现:字段值明明不相等(一个空,一个不空),但是判断不相等的时候就是得不到TRUE。 例如以下代码: ... a1  VARCHAR2(50); .........

[1]CentOS 6.3 Minimal 源码安装 PostgreSQL 9.2.2
    来源:    发布时间: 2013-11-07

# 修改防火墙设置,打开5432端口
vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT

# 重启防火墙使新设置生效
service iptables restart

# 新增用户组
groupadd postgres

# 新增用户
useradd postgres -M -g postgres

# 新建数据库执行文件目录
mkdir -p /usr/local/pgsql

# 新建数据库数据文件目录
mkdir -p /data/pgsql/data

# 修改目录拥有者
chown -R postgres /usr/local/pgsql/.
chown -R postgres /data/pgsql/data
chown -R postgres /data/pgsql/data/.

# 编辑PATH搜索路径
vi /etc/profile
Append these 2 lines to the end of the file:
PATH=/usr/local/pgsql/bin:$PATH
export PATH

# 生效PATH搜索路径
source /etc/profile

# 安装编译源码所需的工具和库
yum -y install wget gcc readline-devel zlib-devel make

# 进入源码压缩包下载目录
cd /usr/src

# 下载源码压缩包
wget http://ftp.postgresql.org/pub/source/v9.2.2/postgresql-9.2.2.tar.bz2

# 解压缩源码包
tar jxvf ./postgresql-9.2.2.tar.bz2

# 进入解压缩源码目录
cd ./postgresql-9.2.2

# 执行源码编译配置脚本
./configure

# 编译源码
make

# 安装
make install

# 变更登录用户
su - postgres

# 执行数据库初始化脚本
/usr/local/pgsql/bin/initdb --encoding=utf8 -D /data/pgsql/data

# 退出变更登录
exit

# 复制PostgreSQL执行脚本
cp /usr/src/postgresql-9.2.2/contrib/start-scripts/linux /etc/init.d/postgresql

# 增加执行权限
chmod +x /etc/init.d/postgresql

# 编辑PostgreSQL执行脚本,指定数据库文件目录
vi /etc/init.d/postgresql
PGDATA="/data/pgsql/data"

# 编辑配置文件,配置可访问数据库的网络地址
vi /data/pgsql/data/postgresql.conf
listen_addresses = '*'

# 启动PostgreSQL服务
service postgresql start

# 以postgres用户登录数据库,修改postgres用户的数据库密码
psql -U postgres
postgres=# ALTER USER postgres PASSWORD '123456';
postgres=# \q

# 编辑配置文件,设置密码md5验证
vi /data/pgsql/data/pg_hba.conf
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
#host all all 127.0.0.1/32 trust
host all all all md5

# 重启数据库服务
service postgresql restart

# 设置开机自动启动服务
chkconfig postgresql on

>>>>>>>>>>>>>>>完成

本文链接


    
[2]浅谈Oracle的高水位线--HWM
    来源: 互联网  发布时间: 2013-11-07
       高水位是记录段里能容纳数据的上限,高水位存在段里

       全表扫先读段头块,而后在段头块里面找到HWM

        下面用实验由内而外来理解Oracle的HWM

--t表有一条数据

hr@ORCL> select * from t;

        ID NAME
---------- ----------
         1 AAAAA

--找t段的段头块

hr@ORCL> select header_file,header_block from dba_segments where segment_name='T' and owner='HR';

HEADER_FILE HEADER_BLOCK
----------- ------------
          4          387

--另开一个session,dump段头块

sys@ORCL> alter session set tracefile_identifier='sys_dump_t_01';

Session altered.

sys@ORCL> alter system dump datafile 4 block 387;

System altered.

       dump的部分trc内容摘入

  Extent Control Header
  -----------------------------------------------------------------
  Extent Header:: spare1: 0      spare2: 0      #extents: 1      #blocks: 8
                  last map  0x00000000  #maps: 0      offset: 2716
      Highwater::  0x01000189  ext#: 0      blk#: 8      ext size: 8   --Highwater就是高水位,0x01000189这个是HWM的地址
  #blocks in seg. hdr's freelists: 0
  #blocks below: 5
  mapblk  0x00000000  offset: 0
                   Unlocked
  --------------------------------------------------------
  Low HighWater Mark :
      Highwater::  0x01000189  ext#: 0      blk#: 8      ext size: 8
  #blocks in seg. hdr's freelists: 0
  #blocks below: 5
  mapblk  0x00000000  offset: 0
  Level 1 BMB for High HWM block: 0x01000181
  Level 1 BMB for Low HWM block: 0x01000181
  --------------------------------------------------------
  Segment Type: 1 nl2: 1      blksz: 8192   fbsz: 0
  L2 Array start offset:  0x00001434
  First Level 3 BMB:  0x00000000
  L2 Hint for inserts:  0x01000182
  Last Level 1 BMB:  0x01000181
  Last Level II BMB:  0x01000182
  Last Level III BMB:  0x00000000
     Map Header:: next  0x00000000  #extents: 1    obj#: 52713  flag: 0x10000000
  Inc # 0
  Extent Map
  -----------------------------------------------------------------
   0x01000181  length: 8

  Auxillary Map
  --------------------------------------------------------
   Extent 0     :  L1 dba:  0x01000181 Data dba:  0x01000184
  --------------------------------------------------------

   Second Level Bitmap block DBAs
   --------------------------------------------------------
   DBA 1:   0x01000182

End dump data blocks tsn: 4 file#: 4 minblk 387 maxblk 387


--对t表做一次全表扫

hr@ORCL> set autot traceonly
hr@ORCL> select * from t;


Execution Plan
----------------------------------------------------------
Plan hash value: 1601196873

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |    20 |     3   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| T    |     1 |    20 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          7  consistent gets   --全表扫读了6个块
          0  physical reads
          0  redo size
        469  bytes sent via SQL*Net to client
        385  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

       这6个块是如何算出来的呢?

hr@ORCL> select file_id,block_id,blocks from dba_extents where segment_name='T';

   FILE_ID   BLOCK_ID     BLOCKS
---------- ---------- ----------
         4        385          8

       这t段一共用了8个块,分别是385 386 387 388 389 390 391 392 393
       Highwater::  0x01000189  即:4号文件的393号块
       这个可由下面dbms_utility包算出

sys@ORCL> select to_number('01000189','xxxxxxxx') from dual;

TO_NUMBER('01000189','XXXXXXXX')
--------------------------------
                        16777609

sys@ORCL> select dbms_utility.data_block_address_file(16777609) from dual;

DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE(16777609)
----------------------------------------------
                                             4

sys@ORCL> select dbms_utility.data_block_address_block(16777609) from dual;

DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(16777609)
-----------------------------------------------
                                            393

       读了一次段头块:4号文件387号块
       读了高水位之下的388 389 390 391 392 等5个块
       这样一共就读了6个块
       注:
         385是FIRST LEVEL BITMAP BLOCK
         386是SECOND LEVEL BITMAP BLOCK
         
       接着分析我们所dump的内容:
     
       Low HighWater Mark :
           Highwater::  0x01000189  ext#: 0      blk#: 8      ext size: 8 

       
       接下来谈谈highwater mark 和 low highwater mark
       
       low high water mark与high water mark 之间可能存在formated block也可以可能存在unformatted block

       

       先来理清dba_tables里面的字段blocks的含义
       
       dba_tables.blocks记录的是分析得到的 formatted block 的总数
       而 low hwm 和 high hwm之间可能同时存在 formatted block 和 unfomatted block
       所以准确地说  blocks 不能代表 low hwm 或high hwm
       如果 low hwm 和 high hwm之间正好没有formatted block时,dba_tables.blocks和low hwm下的blocks一致
       
       那么什么是Oracle中未格式化的块呢?
       
       未格式化,意思就是这个块,已经是属于这个段了,但是还保留着原来的样子没动
       格式化就是把块中的数据清除掉,并把块头改为这个对象的
       MSSM表空间中的段,只有一个高水位,高水位下的块都是格式化了的
       但是ASSM表空间中的段,有两个高水位:低高水位和高高水位
       即上文trc里的:Highwater::  0x01000189和Low HighWater Mark Highwater::  0x01000189
       低高水位下的块全部是格式化了的
       但是低高水位和高高水位之间的块,则可能是格式化了的,也可能是没有
       
       现在的t的高高水位是file 4,block 393;其低高水位是file 4,block 393
       
       我们现在再来看一下t现在data_object_id是多少:

hr@ORCL> select object_id,data_object_id from dba_objects where object_name='T';

 OBJECT_ID DATA_OBJECT_ID
---------- --------------
     52713          52714

       这里很明显t的data_object_id大于object_id
       也就是说,在t上曾经发生过move或truncate操作
       注意,对于truncate操作而言,truncate后其data_object_id不一定就是在原先的data_object_id上加1

sys@ORCL> select to_char('52714','XXXXXXXX') from dual;

TO_CHAR('
---------
     CDEA

       换句话说,t中现在在其低高水位和其高高水位之间的block,只要这个block上记录的data_object_id不等于CDEA
       我们可以通过dump里面的Block header dump部分中的seg/obj来判断其data_object_id是否与段编号相等
       那么这个block 就是一个未格式化的块
       也就是说,可以通过data_object_id来确定块是在HWM和LHWM的位置
       
       那么Oracle为什么要增加低高水位设置?出于什么目的?全表扫描时,是到低高水位,还是到高高水位?
      &nb
    
[3]Oracle PL/SQL比较两个字段是否一样
    来源: 互联网  发布时间: 2013-11-07

Oracle PL/SQL中判断两个两个字段相等或者不相等的时候,常常出现:字段值明明不相等(一个空,一个不空),但是判断不相等的时候就是得不到TRUE。

例如以下代码:

...

a1  VARCHAR2(50);

a2  VARCHAR2(50);

b1  VARCHAR2(50);

b2  VARCHAR2(50);

...

IF ( a1 <> a2  OR  b1<>b2 ) THEN

   My_Modify(a2,b2);

END IF;

...

IF ( a1 = a2  AND  b1=b2 ) THEN

   --do something not useful

   a1:=a1;

ELSE

   My_Modify(a2,b2);

END IF;

 

当a1等于a2, b1不等于b2时:

经常会出现 My_Modify(a2,b2); 不执行的情况,但不知道为什么会这样,难道是<>符号不稳定?

2012-8-27回答:不是不稳定,而是没有考虑字段空值问题,详细见后面分析。

 

2012-8-27添加说明:

经过测试和分析,发现,并不是<>不稳定,而是字段值为NULL是,不能使用=或者<>比较值,应该使用IS NULL判断是否为空。

当字段a1,a2,b1,b2中有一个或多个为空时,下面两个语句都会失效:

1.    IF ( a1 <> a2  OR  b1<>b2 ) THEN

2.    IF ( a1 = a2  AND  b1=b2 ) THEN

例如,如果a1为空,a2, b1,b2不空时,语句应该这么写

1.   IF ( (a1 IS NULL AND  a2 IS NOT NULL) OR  b1<>b2 ) THEN

2.   IF ( (a1 IS NULL AND  a2 IS  NULL)  AND  b1=b2 ) THEN

为了解决NULL带来的“无法判断相等或不等”的问题,我们可以使用NVL函数解决,语句如下:

1.    IF ( NVL(a1,0)  <> NVL(a2,0)  OR  NVL(b1,0) <> NVL(b2,0) ) THEN

2.    IF ( NVL(a1,0)  =  NVL(a2,0)  AND  NVL(b1,0) = NVL(b2,0) ) THEN

 

注:NVL(args, deafultValue),args为变量,deafultValue为当args为空时,设置的默认值(一般为0)。

其中:NVL(a1, 0)  和 NVL(a1, '0')  效果样,最后 a1 的值都是字符串: '0' (不是字符!).

 

来一段测试代码:

-- Created on 2012/8/27 
DECLEAR 
  a1  VARCHAR2(50);
  a2  VARCHAR2(50);
  b1  VARCHAR2(50);
  b2  VARCHAR2(50);
BEGIN
  a1 := 'a';
  a2 := 'a';
  b1 := 'b';
  b2 := NULL;
  
  IF ( a1 <> a2  OR  b1<>b2 )

    
最新技术文章:
▪gc buffer busy/gcs log flush sync与log file sync    ▪让你的PL/SQL更好用    ▪ADO.NET中的非脱机数据库查询
▪参数job_queue_processes与Oracle jobs    ▪11gR2游标共享新特性带来的一些问题以及_cursor...    ▪_library_cache_advice和latch:shared pool、latch:shared poo...
▪SQL: Date Utility    ▪DB2 分区表增加分区    ▪DB2第一步 — 创建表
CSS属性参考手册 iis7站长之家
▪如何处理undo tablespace 表空间太大的问题    ▪ado执行存储过程中包含结果集获取输出参数为...    ▪oracle函数的demo
▪Entity Framework 学习建议及自学资源    ▪存储过程的编写    ▪Linux/Unix shell 自动发送AWR report(二)
▪第二章 Oracle恢复内部原理(基础数据结构)    ▪Redis源码学习之【Tcp Socket封装】    ▪Java Jdbc减少与Oracle之间交互提升批量处理性能...
▪南大通用GBase8a Vs Oracle11g 单机测试亲测    ▪oracle 中行列转换    ▪rhel下安装oracle10g+asm---测试环境搭建
▪Redis系列-主从复制配置    ▪MySQL索引与查询优化    ▪INDEX受到NULL值的影响
▪测试人员的SQL语言 系列    ▪SQL数据库基本语句    ▪MySQL Replication常见错误整理[持续更新...]
▪eclipse下建立esper的demo    ▪把oracle rac 转化为单机数据库    ▪Redis系列-存储篇sorted set主要操作函数小结
▪基本的SQL*Plus报表和命令    ▪druid简单教程    ▪11g调度--scheduler使用
▪EF基础一    ▪db2存储过程中循环语句while do的continue有没有...    ▪oracle 创建DBLINK
▪DB2数据库备份还原    ▪Warning: prerequisite DBD::mysql 1 not found错误解决方...    ▪innotop性能监视mysql,innodb工具
▪数据迁移:DataGuard配置    ▪QX项目实战-19.跨库数据同步    ▪Mysql EXPLAIN
▪Oracle 11g AWR 系列七:Active Session History (ASH) 报...    ▪Oracle 11G新特性(共36个)    ▪父子节点问题
▪OEM简介及按钮乱码问题    ▪NoSql之MongoDB的常用类管理    ▪ORA-39700: database must be opened with UPGRADE option
▪node.js 访问redis数据库,pub/sub    ▪使用DBMS_REDEFINITION在线重定义分区表    ▪SQL Developer 使用问题与解决方法汇总
▪oralce 11g dataguard 概念    ▪ORA-30004 错误处理    ▪oracle分组函数rollup,cube
▪Sql Developer 使用问题与解决方法汇总    ▪Configure Oracle Dataguard Primary-ASM to Physical-ASM    ▪Oracle Data Guard 理论知识
▪Control File 恢复    ▪Oracle数据文件收缩    ▪Oracle 11g AWR 系列五:如何生成 AWR 报告?
▪Wireshark数据包分析实战(第2版)    ▪MySql用户权限控制    ▪db2和oracle查询序列区别
▪更新blob字段的存储过程    ▪MySQLReport分析报告三    ▪DB2中的序列
▪Oracle中DBMS_RANDOM.STRING 的用法    ▪SQL SERVER无法安装成功,sqlstp.log文件提示[未发...    ▪Data Guard 部署物理备库的 10 大注意事项
▪万能数据库查询分析器使用技巧之(九)    ▪SQL 自定义Split函数    ▪视图 v$sql,v$sqlarea,$sqltext,v$sqltext_with_newlines 的...
▪Data Guard Standby_archive_dest 和 Log_archive_dest_n 的...    ▪机房收费系统数据库设计(一)    ▪利用putty的SSH tunnel连接Oracle
▪DBCA建库偶遇ORA-27125    ▪使用PowerPivot建立简单的分析模型    ▪Linux/Unix shell 自动发送AWR report
▪写入到blob字段的存储过程    ▪关于JDBC中ResultSet接口的一点细节探究    ▪Data Guard 配置 Standby Redo Log
▪linux下redis的安装    ▪windows下redis的安装    ▪手动创建数据库步骤(简单翻译官方文档)
▪Ubuntu安装Mongodb    ▪SQL CLR应用    ▪redis的配置文件参数--详细说明
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3