存档
前些日子在ibm-aix下安装sybase15.0.3时遇到了一个su切换用户时不能加载该用户环境变量的问题。现在问题情况及解决方法整理一下。
在aix下用sybase用户安装并配置完服务后,要设定成开机自动启动。
startsybase.sh的脚本为:
su - sybase -c "startserver -f RUN_servername -f RUN_servername_BS "
这句脚本的意思是:从当前用户(root)切换到sybase用户下,并以sybase用户的身份执行startserver -f RUN_servername -f RUN_servername_BS。
遗憾的是:执行该脚本的时候,提示找不到找不到SYBASE环境变量。 导致不能启动sybase主服务和备份服务器。
上面的语句在Linux运行没有任何问题,但在AIX环境就会报错。
然而,用su - sybase手动切换到sybase用户下,再执行env却能够看到所有SYBAE,SYBAE_ASE,SYBASE_OCS等相关的环境变量。
也就是说用su手动切换到sybase用户时,自动加载了sybase的环境变量。在脚本中执行su - sybase -c ..... 不会自动加载环境变量。
经过苦苦的搜索和自己的实验,最后问题解决了。如果想要加载sybase用户的环境变量,需加一个参数:-l
su - sybase -l -c "startserver -f RUN_servername -f RUN_servername_BS "
但是很奇怪的是: -l这个参数在AIX下的man su 中根本就没有提到。
这么一个小小的问题的确苦恼了我很长时间。最后终于解决了。
参考:http://linux.chinaunix.net/bbs/viewthread.php?tid=1059910&extra=&page=1
如何查看solaris操作系统的版本号
我知道的有下面的三种方法,showrev、uname和查看/etc/release。
(1)命令showrev
show machine, software revision, and patch revision information
(2)命令uname
print name of current system.参数 -a :Prints basic information currently available from the system.
(3)查看/etc/release
演示如下:
bash-3.00$ showrev
Hostname: sunv890
Hostid: 84b7fe80
Release: 5.10
Kernel architecture: sun4u
Application architecture: sparc
Hardware provider: Sun_Microsystems
Domain:
Kernel version: SunOS 5.10 Generic_137111-08
bash-3.00$ uname -a
SunOS sunv890 5.10 Generic_137111-08 sun4u sparc SUNW,Sun-Fire-V890
bash-3.00$ cat /etc/release
Solaris 10 1/06 s10s_u1wos_19a SPARC
Copyright 2005 Sun Microsystems, Inc. All Rights Reserved.
Use is subject to license terms.
Assembled 07 December 2005
bash-3.00$
由上可以看出该系统为Sun Sparc平台的5.10系统。
如何查看solaris系统是32位还是64位的?
使用isainfo -v命令
如果是运行在32位模式下, 则有如下输出:
32-bit sparc applications
如果是运行在64位模式下, 则有如下输出:
64-bit sparcv9 applications
32-bit sparc applications
注意:
从Solaris10开始支持AMD64和EM64(intel)处理器,即通常说的x64,同样能用上述命令来判断。Solaris10 的x86和x64 使用同一个安装包,即Solaris_x86_ga_u2_...。
bash-3.00$ isainfo -b -v
64-bit sparcv9 applications
vis2 vis popc
bash-3.00$
全球领先的企业级与移动软件公司Sybase, Inc. (NYSE: SY) 近日宣布已与Aleri Inc. 正式签署资产购置合同,此举将帮助Sybase公司扩充实力,以满足金融服务等机构要求进行实时分析处理的需求。Aleri 是企业级复杂事件处理(CEP)技术与基于CEP技术解决方案的领军企业。
“通过此项交易,Sybase成功跻身为CEP领域的领头羊。通过增加流动性风险管理和业界领先的流动性管理组件,我们强化了我们的实时分析平 台”,Sybase高级副总裁及首席市场官Raj Nathan博士说道,“客户期望Sybase能够提供多样化分析投资组合以满足其日益增长的需求,我们正朝着这个方向努力”。
CEP是实时分析不可分割的一部分。通过此次收购,Sybase强化其总体分析平台并稳固了其领先地位,以便更好地满足需进行实时分析处理企业 的需求。
“Sybase开发资源融入Aleri平台将加速创新进程,从而促使CEP引擎增加新的特性,” Sybase研发副总裁(Aleri前任首席技术官及研发副总裁)Jerry Baulier说道,“此外,Aleri客户可以从Sybase全球客户支持机构所提供的全方位服务中受益”。
据Forrester研究公司的报告,“Aleri平台是由强势策略支持的优质产品。” 2009年8月4日,Forrester研究公司刊登名为《Forrester Wave™: 复杂事件处理(CEP)平台》(Q3 2009)这一报告,其中Aleri被列为CEP领域杰出的领军企业。如欲查阅完整的报告,敬请浏览网站www.forrester.com 。
同时,Aleri还是首家获准作为安全技术评估中心基准(STAC-certified)的CEP厂商。
目前尚未公开交易条款,Sybase不期望此项交易对2010年财务成果产生任何实质性的影响。
关于 Sybase
Sybase是全球领先的企业级和移动软 件公司,致力于信息的管理、分析和移动。在所有主要的系统、网络和设备上,我们都是全球公认的在数据密集应用领域有杰出的性能表现的领导者。Sybase 的信息管理、分析和企业移动解决方案已经为全球的金融服务、通信、制造和政府等的业务关键系统提供强劲动力。欲了解更多信息,请访问:http://www.sybase.com 并阅读Sybase博 客:http://blogs.sybase.com。
关于 Aleri
Aleri 致力于提供Continuous Intelligence™相关工具及解决方案,以便企业即时洞悉环境变化并迅速做出明智的商业决策。该方案核心为Aleri CEP技术,特为高速实时数据流分析而设计,配有快速应用开发与部署的工具。Aleri以CEP为所有解决方案的核心,提供了一系列常见商业问题的解决方 案。2008年3月,Aleri 与另一家CEP技术领军企业 Coral8合并,以便在瞬息万变的商业环境中,在连续智能和业务敏捷领域提供全套的工具及解决方案。Aleri成立于1999年,其总部设立在芝加哥, 且交易时该公司为私营性质。
配置篇
2.1 如何配置字符集的转换类型
禁用字符集转换的配置方法
在isql 环境中执行:
1> sp_configure “disable character set conversion”,1
2> go
“disable character set conversion” 参数默认配置值为0 ,即启用字符集转换。
如何配置字符集的转换类型
把”enable unicode conversions” 参数设置为1 或者2 。当配置为1 时,此设置使用直接转换或Unicode 转换;当配置为2 时,此设置使用Unicode 转换;默 认配置值为0 ,使用直接转换。
在isql 环境中执行:
1> sp_configure ”enable unicode conversions”,1
2> go
2.2 如何配置服务器端缺省字符集
直接转换法
直 接转换法是指直接使用Sybase 提供的实用程序,如UNIX 平台上使用sqlloc 命令或者编辑sqlloc.rs 脚本文件;Windows 平台使用 “ 服务器配置” 图形化管理工具直接配置服务器端字符集。
使用直接转换法的条件是:
―― 服务器中没有用户数据
―― 对服务器中用户数据的损坏是可以接受的
―― 绝对确定服务器中的数据只使用ASCII-7 字符集
间接转换法
间接转换法相对于直接转换法而言,需要通过一下三步来完成配置工作:
1. 先将服务器端的数据使用bcp 命令导出
2. 再选择直接转换法之中的一种方式配置服务器端字符集
3. 再使用带有-J 参数的bcp 命令把数据导回服务器端
配置服务器端字符集的方法 sqlloc— 适用于UNIX 平台的命令
在$SYBASE_OCS/bin 目录下执行:sqlloc ,将出现一个图形化界面,在这个界面中您可以直接选择语言集,字符集,排序顺序,便很容易地就 完成了配置工作。
编辑sqlloc.rs 脚本文件
将$SYBASE-ASE/init /sample_resource_files/sqlloc.rs 拷贝到$SYBASE_OCS/bin 目录下,按以下黑体字提示编辑该文件:
sybinit.release_directory: /home/sybase――― 输入Sybase 产品的安装路径
sqlsrv.server_name: SYB125――― 输入数据库服务器的名称
sqlsrv.sa_login: sa
sqlsrv.sa_password: ――― 输入sa 的口令,若为空,则什么也不填
sqlsrv.default_language: us_english――― 输入想要配置的语言集
sqlsrv.language_install_list: USE_DEFAULT
sqlsrv.language_remove_list: USE_DEFAULT
sqlsrv.default_characterset: cp850――― 输入想要配置的字符集
sqlsrv.characterset_install_list: USE_DEFAULT
sqlsrv.characterset_remove_list: USE_DEFAULT
sqlsrv.sort_order: binary――― 输入想要配置的排序顺序
# An example sqlloc resource file…
# sybinit.release_directory: USE_DEFAULT
# sqlsrv.server_name: PUT_YOUR_SERVER_NAME_HERE
# sqlsrv.sa_login: sa
# sqlsrv.sa_password:
# sqlsrv.default_language: french
# sqlsrv.language_install_list: spanish,german
# sqlsrv.language_remove_list: USE_DEFAULT
# sqlsrv.default_characterset: cp437
# sqlsrv.characterset_install_list: mac,cp850
# sqlsrv.characterset_remove_list: USE_DEFAULT
# sqlsrv.sort_order: dictionary
保存已经修改好的sqlloc.rs 脚本文件,执行以下命令:
sqllocres -r sqlloc.rs
注意屏幕上出现的提示信息,如无异常,则完成配置工作。
“ 服务器配置” 图形化管理工具―― 适用于Windows 平台
“ 服务器配置” 管理工具提供了一个易于操作的图形化管理平台,根据工具中提示的信息,很容易就完成了字符集的配置工作,这里就不多讲了,请参看相关文档说 明。
2.3 如何配置客户端缺省字符集
配置客户端缺省字符集实际上就是对“$SYBASE\locales” 目录下locales.dat 文件的修改。
Windows 平台用写字板方式打开该文件,在UNIX 平台可以直接使用“vi” 命令打开该文件,我们会看到,该文将中所有字符集的配置都是以服务器端操 作系统平台名称分组的:
.
.
[aix]
locale = C, us_english, iso_1
locale = En_US, us_english, iso_1
locale = en_US, us_english, iso_1
locale = default, us_english, iso_1
locale = En_US.IBM-850, us_english, cp850
locale = en_JP, us_english, eucjis
locale = Fr_FR, french, cp850.
.
[axposf]
locale = C, us_english, iso_1
; Use Posix Locales, straight from the Posix Guidelines
locale = en_US.88591, us_english, iso_1
locale = fr_FR, french, iso_1
locale = zh_CN, chinese, eucgb
locale = zh_TW, tchinese, euccns
locale = ko_KR, korean, eucksc
locale = us_english.utf8, us_english, utf8
locale = default, us_english, iso_1
.
.
其中,操作系统名称放在每一组最开始的“[]” 中,而且请注意上面黑体字,每一组中都会存在一行“locale = default,…” 。我们要修改客户端的默认字符集,就是对这一行进行修改。
例如,某系统服务器端是SUN 平台,服务器端语言集为english ,字符集为cp850 。我们要修改客户端字符集与服务器端一致,怎么做? 首先找到[SUN] 操作系统分组,然后修改“locale = default,…” 为“locale = default,us_English,cp850” 。
修改前:
[sun]
; from JLE, KLE, CLE, OS/4.1.1, man setlocale()
; and Sun Software Internationalization Guide (p/n 800-5972-08)
; use setenv LC_CTYPE, LC_MESSAGES, LANG
locale = C, us_english, iso_1
locale = fr, french, iso_1
locale = de, german, iso_1
locale = tr, us_english, iso88599
locale = zh, chinese, eucgb
locale = zh_CN, chinese, eucgb
locale = zh_TW, tchinese, euccns
locale = ko, korean, eucksc
locale = us_english.utf8, us_english, utf8
locale = default, us_english, iso_1
修改后:
[sun]
; from JLE, KLE, CLE, OS/4.1.1, man setlocale()
; and Sun Software Internationalization Guide (p/n 800-5972-08)
; use setenv LC_CTYPE, LC_MESSAGES, LANG
locale = C, us_english, iso_1
locale = fr, french, iso_1
locale = de, german, iso_1
locale = tr, us_english, iso88599
locale = zh, chinese, eucgb
locale = zh_CN, chinese, eucgb
locale = zh_TW, tchinese, euccns
locale = ko, korean, eucksc
locale = us_english.utf8, us_english, utf8
locale = default, us_english, cp850
保存该文件,就完成对客户端字符集的修改了。
这里,还要说明一种特殊情况:
为了满足服务器端某些应用的特殊需求,在服务器端设置了一个环境变量:LANG, 此时客户端字符集该如何设置呢?
例如,某系统服务器端是Windows 平台,使用语言集english ,字符集iso_1 ,并设置环境变量LANG=C 。我们要修改客户端字符集与服务器 端一致,怎么做?
首先找到[NT] 操作系统分组,然后在该组中加入一行
“locale = C,us_English,iso_1”
修改前:
[NT]
locale = enu, us_english, iso_1
locale = fra, french, iso_1
locale = deu, german, iso_1
locale = japanese, japanese, sjis
locale = chs, chinese, eucgb
locale = cht, tchinese, big5
; locale = kor, korean, eucksc
locale = us_english.utf8, us_english, utf8
locale = default, us_english, iso_1
修改后:
[NT]
locale = enu, us_english, iso_1
locale = fra, french, iso_1
locale = deu, german, iso_1
locale = japanese, japanese, sjis
locale = chs, chinese, eucgb
locale = cht, tchinese, big5
; locale = kor, korean, eucksc
locale = us_english.utf8, us_english, utf8
locale = default, us_english, iso_1
locale = C,us_English,iso_1
因此在修改客户端字符集之前,请先查看服务器端是否设置了环境变量“LANG“ ,再决定如何修改。
2.4 如何选择ASE 字符集使之支持简体中文字符
目前在ASE 12.5 中支持中文字符的字符集有四种:CP936 ,EUCGB ,UTF-8 和GB18030 。
其中EUCGB 字符集是基于GB2312-80 编码规范的,它的EUC (Extended Unix Code) 编码范围是第一字节0xA1~0xFE( 实际只用到0xF7) ,第二字节0xA1~0xFE 。
CP936 字符集是基于GBK 编码规范(实际上的国家标准是GB13000-90 ),是对GB2312 进行的扩展,第一字节为0×81~0xFE ,第二字 节分两部分,一是0×40~0×7E ,二是0×80~0xFE 。其中和GB2312 相 同的区域,字完全相同。
GB18030 字符集(国家标准号是GB18030-2000 )是2000 年3 月17 日发布的新的中文编码标准。它是GB2312 的扩充,采用单/ 双/ 四 字节编码体系结构,收录了27000 多个汉字以及臧文、蒙文、维吾尔文等主要的少数民族文字。Sybase 从ASE 12.5.0.3 之后开始支持GB18030 字符集。
UTF-8 字符集是现有ASCII 系统向Unicode 转换的一个过渡方案。它使用1-3 字节表示一个字符。简体中文的每个字符在utf8 中的长度基本上 都是3 个字节。它的最主要的优点是可以同时支持超过650 种语言的字符。缺点是针对中文字符来说,需要增加50% 的空间用来存储。还有一个问题是执行 sp_helptext 显示存储过程体的时候,有可能出现半个汉字。
一般来说,由于EUCGB 不支持国标一、二级字库以外的汉字,所以我们推荐用户在服务器端和客户端都使用CP936 字符集,或者在ASE 12.5.0.3 之后还可以使用GB18030 字符集,它可以支持一些比较生僻的汉字。它的不足是只有一种排序方式,即区分大小写的Binary 方式。所 以,如果需要使用支持中文字符集且不区分大小写的数据库时,就只能使用UTF-8 作为服务器端字符集,而客户端使用CP936 或GB18030 字符集。
另外,还有一种选择是,服务器端和客户端都使用iso_1 字符集,虽然iso_1 字符集并不直接支持中文字符,但我们将服务器端和客户端都设置成 iso_1 字符集后,系统也不会在客户端和服务器端进行字符转换,它只不过将一个汉字的两个字节当做两个单独字符来处理,一般情况下没有问题。但当执行 like 匹配查询的时候,它有可能返回不正确的结果,原因是服务器端是根据单字节去匹配查询条件的,很可能会有前一个汉字的第二字节与后一个汉字的第一字 节的内码组合符合查询条件,被服务器端作为查询结果返回来。
2.5 如何查看服务器端、客户端字符集
查看服务器端字符集:
在isql 环境中执行:
1> sp_helpsort
2> go
查看客户端字符集:
在isql 环境中执行:
1> select @@client_csname
2> go
3. 错误处理篇
3.1 为什么会出现字符集转换失败
1. 当字符存在于客户端字符集中但在服务器字符集中不存在时,Adaptive Server 的字符集转换将报告转换错误,反之亦然。
用户会碰到下面的错误消息:
Msg 2402,Severity 16 (EX_USER):
Error converting client characters into server’s character set. Some character(s) could not be converted.
转换错误会阻止插入与更新语句的执行。如果发生此情况,请检查数据中有问题的字符并替换它们。
2. 当客户端发送数据时Adaptive Server 遇到转换错误,它用ASCII 码的问号(?)代替可疑字符所占字节,但查询批处理继续进行直到完成为止。
语句完成后,Adaptive Server 将发送一下消息:
Msg 2403,Severity 16 (EX_USER):
WARNING! Some character(s) could not be converted into client’s character set. Unconverted bytes were changed to question marks (`?’) 。
3. 当在客户端查询服务器端存储的数据时,当碰到中文汉字,在客户端显示乱码的现象,且没有任何提示信息。这是我们在应用中经常会碰到的现象,产生的原因是: 客户端与服务器端字符集不符。怎么解释呢?假设我们先期设置服务器端字符集为iso_1 ,客户端字符集也为iso_1, 然后我们从客户端向服务器端录入了 所有的数据;之后当我们需要查询时,使用的客户端,它的字符集为cp850 ,那么势必在该客户端上显示的字符集为乱码。
当出现这种情况时,最好配置客户端字符集为先期客户端使用的字符集或者配置客户端字符集与服务器端字符集一致,使得客户端字符集与服务器端字符集匹配。这 里我们不建议用户修改服务器端字符集,因为服务器中此时已经存在大量的数据,在使用直接转换方式时,由于源字符集与目的字符集中可能存在无法转换的字符而 导致Adaptive Server 无法启动;如果使用间接的转换方式,会增加工作量。
4. 附:如何安装cp936 字符集
以在Windows 平台安装cp936 字符集为例,说明如何安装使用服务器中没有被默认安装的字符集。( 在ASE 12.5.0.3 版本中安装GB18030 字符集的方法类似)
( 这里SYBASE 的安装路径为c:\sybase)
1.c:\>cd \sybase\charsets\cp936
2.c:\sybase\charsets\cp936> charset -Usa -Psa_pass -Sserver_name binary.srt cp936
3. 在SQL 环境中 1>select name,id from syscharsets
2>go
找到name 为cp936 对应的id( 假设为171)
4.1>sp_configure "default character set id",171
2>go
5. 重启server 两次
(注: 第一次启动后,server 会自动宕掉,需要第二次重启后才能使用)
官方软件发行版本。EBF号唯一性地标志了在某个OS平台上的发行版本。
官方软件发行版本,它解决了当前发行版本中的一些Bug。ESD(ESD #)通常是跨平台的,并且不包含新的特性或功能。ESD是征对某一主版本(major version)的累积软件包,它必须在GA发行版本上安装。
GA(General Availability)是一个SYBASE软件版本全新的、初始听发行版本。除Bug修复之外,它通常包含一些新特性。
IR(Interim Release-中间版本)包含了在此之前的所有ESD发行版本的Bug修复,以及其它Bug修复。IR发行版本必须基于与之对应的GA发行版本的基础上 安装。比如,要安装12.5.0.3,就必须先安装12.5GA(ESD)。
MR(Maintenance Release-维护版本)是GA发行版本的完整替换包。由于它是完整的发行包,因此可以直接安装。通常此种类型的发行版本包含一些新特性以及Bug修复。
先来介绍一下裸设备的知识
1.什么是裸设备(RAW DEVICE)
裸设备是指未创建文件系统的磁盘分区(raw partition)或逻辑卷(raw logical volume),应用程序直接通过一
个字符设备驱动程序对它进行访问。如何对设备上的数据读写决定于使用它的应用程序。由于对裸设备的操作不通过UNIX的缓冲区,数据在ORACLE的数据 缓冲区(BUFFER CACHE)和磁盘之间直接传递,所以使用裸设备在一定程度上能够提高I/O性能,适合I/O量大的系统。另外OPS/RAC (Oracle Parallel Server/Real Application Cluster)环境下,多个节点同时访问同一个数据库,所以CONTROL FILE、DATA FILE、REDO LOG都必须建在RAW DEVICE上。
2.裸设备的可用空间
不同的UNIX对裸设备的管理不完全相同,特别要注意的是某些UNIX在每个裸设备的头部要保留一定的空间,应用程序在使用裸设备时不可以覆盖这一部分, 否则会对裸设备造成损坏。所以一个裸设备的实际可用空间是分配给裸设备的空间再减去这部分操作系统保留空间。下面是常用UNIX的OS Reserved Size列表:
UNIX OS Reserved Size
------------ ----------------
SUN Solaris 0
HP-UX 0
IBM AIX 4k
Tru64 UNIX 64k
Linux 0
3.如何读裸设备上的数据?
UNIX上读写裸设备不能使用cp, cpio, tar等命令,必须用dd,下面是几个dd常用参数的简单说明,更详细的信息请参考UNIX使用手册或用命令man dd。
dd [ operand=value ... ]
if=file 指定输入文件,缺省值是标准输入
of=file 指定输出文件,缺省值是标准输出
bs=n 设置输入和输出的块大小为n字节,也可以用“k”作单位
skip=n 在拷贝之前跳过n个输入块,缺省值是0
seek=n 在拷贝之前从输出文件首部跳过n块,缺省值是0
count=n 指定拷贝的块数,缺省拷贝到输入文件结束
4.用十六进制读取unix的文件系统上的文件
介绍一下od命令的用法,linux od(octal dump) 命令详解
功能说明:输出文件内容。
语 法:od [-abcdfhilovx][-A <字码基数>][-j <字符数目>][-N <字符数目>][-s <字符串字符数>][-t <输出格式>][-w <每列字符数>][--help][--version][文件...]
补充说明:od指令会读取所给予的文件的内容,并将 其内容以八进制字码呈现出来。
参 数:
-a 此参数的效果和同时指定"-ta"参数相同。
-A<字码基 数> 选择要以何种基数计算字码。
-b 此参数的效果和同时指定"-toC"参数相同。
-c 此参数的效果和同时指定"-tC"参数相同。
-d 此参数的效果和同时指定"-tu2"参数相同。
-f 此参数的效果和同时指定"-tfF"参数相同。
-h 此参数的效果和同时指定"-tx2"参数相同。
-i 此参数的效果和同时指定"-td2"参数相同。
-j<字符数目>或--skip-bytes=<字符数目> 略过设置的字符数目。
-l 此参数的效果和同时指定"-td4"参数相同。
-N<字符数目>或--read- bytes=<字符数目> 到设置的字符数目为止。
-o 此参数的效果和同时指定"-to2"参数相同。
-s<字符串字符数>或--strings=<字符串字符数> 只显示符合指定的字符数目的字符串。
-t<输 出格式>或--format=<输出格式> 设置输出格式。
-v或--output-duplicates 输出时不省略重复的数据。
-w<每列字符数>或--width=<每列字符数> 设置每列的最大字符数。
-x 此参数的效果和同时指定"-h"参数相同。
--help 在线帮助。
--version 显示版本信息。
5.实例
用od命令读solaris上的文件,以十六进制的形式显示结果
bash-3.00$ uname -a
SunOS sunv890 5.10 Generic_137111-08 sun4u sparc SUNW,Sun-Fire-V890
bash-3.00$ od -t x4 master.dat | head -10
0000000 00000800 00000002 00000000 00000014
0000020 00000002 00000000 00000005 00000000
0000040 00000019 00008706 0000000c 00002710
0000060 000001f4 00000000 00001000 00000000
0000100 00000064 00000006 00000000 00000000
0000120 00000000 00002000 0000000a 00000001
0000140 4e554c4c 00000000 00000000 00000000
0000160 00002000 00000200 00001000 00000050
0000200 00000000 00000000 00000000 00000000
*
bash-3.00$
上面是我在solaris sparc平台上执行od命令用16进制读取文件的结果。
最左边用红色标记的是偏移量(八进制形式)。如:0000000表示偏移0,0000020表示偏移16(因为0000020(o)=16(d)),0000040表示偏移32。。。
od -t x4 master.dat 这条命令的意思是:用od读取master.dat文件的内容,用16进制的形式显示结果,并且每四个字节为一个显示单位,之间用空格分隔。一般都是每行显示16个字节的数据。
head -10 这条命令的意思是只显示前10行的数据。
在IBM-AIX上读取文件内容
-bash-3.2$ prtconf
System Model: IBM,7044-170
Machine Serial Number: 10D908C
Processor Type: PowerPC_POWER3
Processor Implementation Mode: POWER 630
Processor Version: PV_630
Number Of Processors: 1
Processor Clock Speed: 333 MHz
CPU Type: 64-bit
Kernel Type: 64-bit
以上为系统配置
-bash-3.2$ od -t x4 master.dat |head -10
0000000 00000000 00000000 00000000 00000000
*
0010000 00000800 00000002 00000000 00000014
0010020 00000002 00000000 00000005 00000000
0010040 00000019 00009481 0000000c 00002710
0010060 000001f4 00000000 00001000 00000000
0010100 00000064 00000006 00000000 00000000
0010120 00000000 00002000 0000000a 00000001
0010140 4e554c4c 00000000 00000000 00000000
0010160 00002000 00000200 00001000 00000050
-bash-3.2$
说明:中间的红色星号是od命令显示出来的,非人工添加。最左边红色一列表示偏移量(8进制形式)。第一行的偏移为0,并且结果好像都是0(ascii中的0)。然后第二行的偏移量就变成了4096(0010000(o)=4096(d) )。右边的数据是master.dat文件中的内容。以16进制的形式显示出来,每行16字节,每四个字节为一个单位,之间用空格分隔。
可以看出在ibm-aix powerpc平台上文件系统的数据是从4096偏移处开始存储的。前4096字节的内容为文件的控制信息。
用UltraEdit读取windows平台上的文件master.dat。
00000000 | 00 00 00 00 03 00 00 00 A6 00 00 00 63 00 00 00 | ...........c... | ....¦.c.
00000010 | 01 00 00 00 00 00 00 00 00 00 00 00 00 03 00 00 | ................ | ......̀.
00000020 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................ | ........
00000030 | 01 00 00 00 00 00 00 00 01 00 00 00 FF 00 00 00 | ............... | ......ÿ.
00000040 | 01 00 00 00 00 00 00 00 01 00 00 00 0F 00 03 00 | ................ | ........
00000050 | 02 00 00 00 00 00 00 00 02 00 00 00 FF 00 00 00 | ............... | ......ÿ.
说明:最左边一列表示偏移量(16进制数据)。中间的部分数据是文件master.dat的内容。
windows上的文件自偏移0开始存储,没有类似ibm-aix上的类似的前4096字节的控制内容。
在linux平台上读取文件的16进制数据的结果,我这边只有一个32bit的虚拟机。就不演示了。
大家可以对比上面的显示结果。发现文件系统或者裸设备的文件可用空间和上面介绍的常用UNIX的OS Reserved Size列表是一致的。
————————————————————————————————————
——— 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
——— 转载务必注明原始出处 : http://www.dbainfo.net
——— 关键字:unix hex file system raw device 文件系统 裸设备 od
————————————————————————————————————
在sybase中复制数据时,经常能够解决到bcp(bulk copy)。
bcp分两种,快bcp和慢bcp。这两种分法是针对bcp in。对于bcp out个人感觉没有快、慢之分,反正就是从sybase的extent上大块大块的拷数据。
今天在bcp 数据in 到一个sybase server的时候,报下面的错误:
C:\Documents and Settings\Administrator>bcp test.dbo.tablename in d:\12 34 -c -Usa -Saix Password: Starting copy... Server Message: SYB_AIX53 - Msg 4806, Level 16, State 1: You cannot run the non-logged version of bulk copy in this database. Please chec k with the DBO. Server Message: SYB_AIX53 - Msg 3621, Level 10, State 0: Command has been aborted. CTLIB Message: - L1/O3/S0/N14/0/0: blk_init(): blk layer: CT library error: Failed when CT_Lib routine ct_results() called. blk_init failed. bcp copy in failed
上error message & troubleshooting guide上查看一下错误编号为:4806的信息。
解释如下:
This error occurs when the select/into bulkcopy option is set to “false” and you
use “fast” bulk copy into a table that has no indexes.
Note In newly created databases, the select into/bulkcopy option is set (by
default) to the same as that in model.
解决的办法有两种:
第一:
启用目的库的"select/into bulkcopy"选项,使用fast bcp模式。这样会不计日志(实际上是记录很少很少的日志记录),也就是说:这不能保证数据库日志的一致性,最好对目的数据库做一个完全备份(dump database),之后才能备份日志。
补充一点:针对有些不计日志的操作导致备份日志不能执行的问题,唯一的办法就是对库做全备。但是,尤其在select into/bulk选项被打开的数据库上,你如何知道这个数据库里曾经执行了不计日志的操作呢?15.0以前的版本是没有好办法的,只能在发出dump tran命令的时候提示不能备份日志需先全备。这是很等的不方便啊~ 终于在15.0版本中,千呼万唤始出来。sybase给我们送来了福音。增加了函数:tran_dumptable_status(),用来返回一个是否允许 dump transaction 的真/ 假指示。 如果 tran_dumpable_status 返回 0,则可以对数据库执行 dump transaction 命令。如果返回任何其它值,则无法执行该命令。非零值有: 1 — 指定名称的数据库不存在。 2 — 日志没有放置在单独的设备上。 4 — 日志首页位于仅限数据的磁盘片段区域内。 8 — 为数据库设置了 trunc log on chkpt 选项。 16 — 在数据库上发生了未记录的写入操作。 32 — 仅截断 dump tran 已中断发送到转储设备的任意连续的转储 系列。 64 — 最近创建或升级了数据库。在执行 dump database 之前,不会 转储事务日志。 现在终于可以在备份脚本加入tran_dumptable_status(),如果返回0,表示可以正常执行备份日志任务。如果返回非0尤其16或者32的时候,先执行数据库全备再执行dump tran操作。
第二:给将要拷贝数据的表上添加索引,让bcp使用慢模式。这样目的数据库会正常的记录日志。就像一条一条的insert语句那样。因此,不会出现完备后 才能备份日志的情况了。但是要注意防止大量的写入操作导致目的数据库日志被写满。可以在bcp in的时候适当时间执行dump transaction with truncate_only,也可以数据分批bcp导入(需要加入-b选项)。
————————————————————————————————————
——— 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
——— 转载务必注明原始出处 : http://www.dbainfo.net
——— 关键字:sybase BCP fast 日志 索引 快bcp 慢bcp 完整备份 日志备份
————————————————————————————————————
在使用tar命令解压文件的时候,两次都出现了checksum error的错误,只是错误信息稍微有点差别。
情况1:
最近配置AIX下的Java环境,使用tar -xvf时总出现checksum error的信息。
# tar -xvf Java5_64.sdk.tar
x Java5_64.sdk, 74738688 bytes, 145974 media blocks.
tar: 0511-169 A directory checksum error on media; -265812960 not equal to 67621
最后发现原因,是因为我使用ftp下载时没有设置为二进制方式传输数据,ftp会默认使用Ascii的方式来传输,这样会破环文件。
解决方法: 登录ftp之后,输入bin,然后再使用get文件就可以了。
情况2:
用tar命令解压一个非tape archive文件时(格式为tgz),也报类似的错误!
-bash-3.2$ tar -xvf ase1503_aix64_2.tgz
tar: 0511-169 A directory checksum error on media; 0 not equal to 67634.
解决方法:先将tgz压缩文件转化成tar格式的,
$gunzip -S tgz ase1503_aix64_2.tgz
然后再用tar命令解压生成的ase1503_aix64_2.tar文件就可以了。
$tar -xvf ase1503_aix64_2.tar
————————————————————————————————————
——— 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
——— 转载务必注明原始出处 : http://www.dbainfo.net
——— 关键字:解压 tar 错误 aix gunzip
————————————————————————————————————