3.db2的视图里不能直接用order by语句,必须这样写 select × from(select a,b,c from table1 order by a)as tab
这种写法的前提是你已经打过补丁了
4.过程的问题:
db2提供ltrim函数和rtrim函数,但偏偏不提供trim函数,如果你希望去除字符两端的空格,对不起,必须用ltrim(rtrim()) 的方式调用insert 语句里面居然不能用表达式赋值,必须把值先赋给一个变量调用其他存储过程时竟然不能用常量做参数,必须把这个常量的值赋给一个变量,再以这个变量为参数
select * from table fetch first n rows only 语句居然在存储过程里不可用
5.存储过程里可以使用动态sql,但函数里却不可以使用,kao
6. 遇到commit或rollback时自动关闭游标,所以需要慎重使用单独提交。
proc builder老是在调试中不足,屏幕花掉。而如果断点调试时暂停不进行下去的时间稍微长一点就会提示超时,受不了。
7.开发中遇到的一个问题
在使用 日期变量 1 months or 日期变量-1 months 的方式取日期时,比如日期变量值为 2004-02-29时,存储过程里将日期变量 1 months 赋值给另一
日期变量时会出错。相应sqlstate为01506(db2 ? 01506): 对 date 或timestamp值进行了调整,以校正算术运算得出的无效日期。
如果要获取的只是下一月份,可采用的替代方法是获取当前日期所在月份的第一天作为基准后 1 months or -1 months
8.哈哈,今天帮别人弄存储过程的经验@04.08.05
搞了半天搞不定,一查原来的文档才了,原来tmd该死的db2的存储过程,是转换为c后,进行编译的。因此在数据库服务器上要安装一个c编译器才能完成存储过程的编译。并且需要使用db2set命令,设置db2_sqlroutine_compiler_path指向c编译器的安装路径。如:db2set
db2_sqlroutine_compiler_path=e:\programfiles\microsoftvisualstudio\vc98\bin\vcvars32.bat
9.对变量的赋值不能用select ..into ..方式而要用set v=(select ..)的方式,代码示例如下。
drop function sxfm.isordersubmitdate; create function sxfm.isordersubmitdate(in_row_id decimal(16,0)) returns date language sql begin atomic declare v_submit_date date; declare v_sell_id decimal(16, 0); declare v_buy_id decimal(16, 0); set v_sell_id = (select coalesce(receive_id,-1) from is_order where row_id=in_row_id); set v_buy_id = (select coalesce(pay_id,-1) from is_order where row_id=in_row_id); set v_submit_date = (select date(max(a.submit_date)) from am_audit_queue a,sm_user b,sm_user c where a.table_code='is_order' and a.table_row_id=in_row_id and a.audit_emp_id=c.row_id and c.branch_id=v_buy_id --审核方为付款方 and a.submit_emp_id=b.row_id and b.branch_id=v_sell_id); --提交方为收款方 return v_submit_date; end; #sync 10; |
10.db2的游标打开后遇到commit和rollback默认是会关闭的。保持游标打开的方法是在定义游标时加上with hold选项
11.f:导出某张表的数据,且该表包含long varchar型数据,该如何操作q:export:db2 cont to [dbname] user [user] using [password]db2move [dbname] export -tn [tablename] -u [user] -p[password] (单表)db2move [dbname] export -tn [tablename1,tablename2,...] -u [user] -p [password] (多表)import:db2move [dbname] import
=============================================================================
db2上机操作指令指南
db2start
2. 停止实例(db2inst1):
db2stop
3. 列出所有实例(db2inst1)
db2ilist
5.列出当前实例:
db2 get instance
4. 察看示例配置文件:
db2 get dbm cfg|more
5. 更新数据库管理器参数信息:
db2 ute dbm cfg using para_name para_value
6. 创建数据库:
db2 create db test
7. 察看数据库配置参数信息
db2 get db cfg for test|more
8. 更新数据库参数配置信息
db2 update db cfg for test using para_name para_value
10.删除数据库:
db2 drop db test
11.连接数据库
db2 cont to test
11.列出所有表空间的详细信息。
db2 list tablespaces show detail
12.列出容器的信息
db2 list tablespace containers for tbs_id show detail
13.创建表:
db2 ceate table tb1(id integer not null,name char(10))
14.列出所有表
db2 list tables
12.插入数据:
db2 insert into tb1 values(1,’sam’);
db2 insert into tb2 values(2,’smitty’);
13.查询数据:
db2 select * from tb1
14.数据:
db2 delete from tb1 where id=1
15.创建索引:
db2 create index idx1 on tb1(id);
16.创建视图:
db2 create view view1 as select id from tb1
17.查询视图:
db2 select * from view1
18.节点编目
db2 catalog tcp node node_name remote server_ip server server_port
19.察看端口号
db2 get dbm cfg|grep svcename
20.测试节点的附接
db2 attach to node_name
21.察看本地节点
db2 list node directory
22.节点反编目
db2 uncatalog node node_name
23.数据库编目
db2 catalog db db_name as db_alias at node node_name
24.察看数据库的编目
db2 list db directory
25.连接数据库
db2 connect to db_alias user user_name using user_password
26.数据库反编目
db2 uncatalog db db_alias
27.导出数据
db2 export to myfile of ixf messages msg select * from tb1
28.导入数据
db2 import from myfile of ixf messages msg replace into tb1
29.导出数据库的所有表数据
db2move test export
30.生成数据库的定义
db2look -d db_alias -a -e -m -l -x -f -o db2look.sql
31.创建数据库
db2 create db test1
32.生成定义
db2 -tvf db2look.sql
33.导入数据库所有的数据
db2move db_alias import
34.重组检查
db2 reorgchk
35.重组表tb1
db2 reorg table tb1
36.更新统计信息
db2 runstats on table tb1
37.备份数据库test
db2 backup db test
38.恢复数据库test
db2 restore db test
当一个指定的 sql 操作(如 delete,insert,或者是 update 操作)作用于某张表时,一个定义了一组操作的触发器就可以被激活。触发器并不像参照完整性约束和检查约束那样,我们甚至可以使用对其他表来进行更新。
将一项技术应用于真实世界的一个场景总是有益的。出于教学的目的,让我们在一个银行相关环境中研究触发器,在该模拟环境中,我们仅仅建立了一张表。再次强调,这是被简化了的!我们将要做的是,运用触发器来促进银行提供的透支保护。例如,一个银行客户有一个支票帐户(checking account)和一个储蓄帐户(saving account)。当从支票帐户中取款的金额超过了该帐户的余额时,就会发生一次自动的转帐(叫做透支保护),即自动从客户的储蓄帐户转帐过来。当然,这必须符合一定的条件,即储蓄帐户中必须有足够多的钱来补偿透支的金额。
像上面所提及的,我们的银行仅仅包含一张表。在这张表中,我们将存入客户的支票帐户和储蓄帐户的余额等信息。每个客户通过其社会保险号码来标识。下面是对该表的描述:
表 1. 对 accttable 的描述
column name | column type | nullable? |
ssn* | varchar(11) | no |
lastname | varchar(30) | no |
firstname | varchar(30) | no |
savingbalance | decimal (precision: 7, scale: 2) | no |
checkingbalance | decimal (precision: 7, scale: 2) | no |
请使用 命令行处理器为上面的表创建一个数据库。将数据库命名为 bnkdb。
db2 => create database bnkdb
接下来,连接到该数据库。我假设您已经在您的机器上有了一个用户名为 db2admin
,
密码为 db2admin
的帐号。
db2 => connect to bnkdb user db2admin using db2admin
现在,创建 accttable
表:
|
现在向所创建的表中加入两条记录:
|
|
触发器可以在对表的一次 insert、 delete 或者 update 操作 之前或 之后启动。在我们的例子中,您将创建一个在对accttable 表执行 update 操作之前启动的触发器。在触发器术语中,insert、 delete 或者 update 这些使得触发器启动的事件被称作 触发事件。触发器的启动是在触发事件之前还是之后则称为触发器的 激活时间。
打开 control center 开始创建触发器,展开您创建的数据库(即 bnkdb),鼠标右键点击 triggers 选项并且选择 create.....
在 create trigger 屏幕中,可以指定触发器所在的模式。请选择 admin 模式。记住,触发器是与表相关的,所以我们需要选择相关表的模式。然后请再次选择 admin 模式:
在同一个屏幕中, 需要指定一个触发器的名字。将触发器命名为 overdraft。而且,需要指定与该触发器相关的表的名字。这里选择您创建的 accttable。
在 time to trigger action区域中,选择 before。
在 operation that causes the trigger to be executed区域中选择 update of columns 操作并且指定被操作列为 checkingbalance:
点击 triggered action标签页来创建该触发器:
udb 能够跟踪在启动触发器的那条语句之前和之后的一行的状态。请在 correlation name for the old rows 一栏中填入 oldrow,
在 correlation name for the new rows 一栏中填入 newrow
:
注意,您也许无法指定其中的一个 correlation name,因为它依赖于引起触发器启动的特定操作和激活时间的组合。例如,假设您的触发器选择的 time to trigger action 是 before,触发事件是 delete 语句。在这种情况下,我们就无法指定一个 "correlation name for the new rows"。为什么呢?因为在执行了一个删除操作以后,新行是不存在的。
因为您创建的触发器是在 update 之前被激活,所以不能编辑 temporary table for the old rows 和 temporary table for the new rows选项。
您将注意到,在这种情况下(一个在 update 之前被激活的触发器),您只能指定触发器针对 每 行而不是针对每个 语句触发。
引起触发事件的语句可能会同时影响数据库中的多行。"for each row" 选项意味着触发器将在每一行被修改时激活。另一方面,"for each statement" 选项("before" 型触发器是不允许的)则意味着触发器定义的操作只在调用一次 sql 语句后执行一次。
可以点击 show sql按钮来看看底层的 sql 语句到目前为止是什么样子:
现在该创建触发动作了。我们的业务规则是支票帐户的余额必须低于 0 才能激活该触发器。也就是说,我们需要指定 search-condition 为 newrow.checkingbalance<0
。我们之所以指定 newrow.checkingbalance
是因为需要分析在 update 操作之后支票帐户的余额将会是多少。
现在我们将要在 triggered action 文本区域中替换 triggered-sql-statement
(参见下面)。
用来替换的代码如下:
|
让我们一句一句地仔细研究一下这段代码。在触发器主体中,可以声明将要在主体中使用的变量。我们使用下面这行代码来声明变量: decimal(7,2)declare overage decimal (7,2)
; 这样就定义了一个类型为 decimal(7,2)
、
名为 overage
的变量。
下一步我们将 overage 变量的值设置为 (newrow.checkingbalance*-1)
;
我们将使用该算式计算出我们想要从支票帐户取出的超额(overage)的数目。指定 newrow.checkingbalance
是因为我们需要分析支票帐户的余额在 update 操作发生后是多少。
set overage = (newrow.checkingbalance*-1);
如果违反了您在触发器中定义的业务规则,就可以使用 signal 语句来抛出一个错误条件信号。在我们的例子中,不允许有人拥有的支票帐户余额为负数。如果有人想要将支票帐户的余额列更新为一个负数,我们就可以试着看看在储蓄帐户中是否有足够多的钱来补偿这个负数。如果没有,那么就可以发出一条 sql 状态为 '70001' 的信息 "'overdraft protection unsuccessful"。
认识到包含 signal 语句的效果是很重要的。signal 语句回滚由触发语句(也就是我们的 update 语句)尝试的更改。signal 语句也将回滚在触发器内发生的更改。此外,假设我们是使用 java™ 应用程序来与数据库进行交互的,并且试图执行一次会触发我们的触发器并违反业务规则的 update 操作。java 应用程序将接受我们所指定的 sqlstate 以及值为 -438 的 sqlcode。在这行中我们使用 signal sqlstate 属性:
|
该行说明,如果我们的 overage 比储蓄帐户的余额数目还要大,那么就需要抛出一个危险信号。
如果储蓄帐户的余额数目足够补偿超出的数目,这时就会发生转帐。如果满足这种条件,我们将对新行作两处修改:
|
可以再次通过 show sql按钮来看看最后的结果:
在点击 close之后,您将看到 overdraft 触发器已经创建好了:
可以通过一个 update 语句来进行测试。打开命令行编写下面的语句:
|
根据我们创建的业务逻辑,这个 update 操作将启动该触发器,由于支票帐户透支,该触发器将从 savingbalance 列取出 500.00 到支票帐户。因此,ssn 为 111-11-1111 的帐户的 checkingbalance 会变成 0.00 而 savingbalance 将变成 1000.00(原来的余额 1500 - 透支的 500)。下面的查询验证了该结果:
您已经在一个假想的业务场景中创建了一个 触发器。触发器是 数据库的一个非常强大的特性,您可以使用它将业务逻辑分化到关系数据库这边。如果考虑到有多个应用程序都将与同一个数据库进行交互,您就会发现这种分化是非常强大的。在一个大型企业中,您可能多次遇到过这样的情况,即不知道要创建的是怎样一个将与数据库交互的应用程序。与其只是希望这些应用程序遵守被认为是您的组织机构的戒律的业务规则,还不如使用触发器作为您工具箱中的一种工具,以确保现在和将来与数据库进行交互的所有的应用程序强制遵守这些业务规则。一个触发器只能关联一个表,而不能关联一个视图。您也许可以考虑使用 instead of 触发器来与视图交互。
扩展您的架构
级别: 中级 (), americas techworks sme, ibm 2006 年 7 月 10 日 即将发布的 q replication 将支持一种新的目标表,即 consistent change data (ccd) 表。探索 q replication 用户之所以需要这些表的原因,并考虑在使用 ccd 表作为目标的情况下,可能出现的一些新的复制架构。学习如何定义和使用 ccd 表,这需要对 q replication 的安装和配置有基本的了解。另外,还看看在使用 ccd 表作为目标的情况下有哪些限制。 consistent change data (ccd) 表一直是 sql replication 中一种流行的目标表。通过支持 ccd 表作为另一种目标选项,对于熟悉 q replication 的人来说,他们就可以利用这种新功能了。这时您可能要问,“为什么我应该在我的复制架构中考虑 ccd 表?” ccd 表通过关联的跟踪机制暴露数据,以便准确地描绘源表的事务历史。换句话说,ccd 允许重现源表的历史。让我们看看用到 ccd 的三个例子。 历史表 —— 在任何系统中,都会有一些关键的表需要能够恢复或重建。通过将关键的源表复制到一个 ccd 目标表,就可以逐个事务地从头开始重建这个表。更棒的是,如果表中输入了坏的数据,ccd 记录还允许您查看哪些行受到影响,让您很容易改变主意,或者正确地更新所需的值。 扇出场景登台(fan out scenario staging)表 —— 传统上,ccd 目标表用于帮助创建扇出架构,将一个源复制到多个目标。这意味着之前 sql replication 不能接受的一些高吞吐量的工作负载现在可以被复制到多个目标了。 不受支持的数据库登台表 —— 对于将数据放到 q replication 受支持的结构之外的数据库中这一任务而言,ccd 目标表也是一种理想的方法。有了最新的修复包(用于 oracle 和 sybase 的修复包版本为 9;用于 microsoft sql server 和 informix 的修复包版本为 10),db2® 之外的数据库可以作为 q replication 的目标数据库,不过仍然有很多目标数据库不可用。虽然 ccd 目标表不能自动将数据复制到不受支持的目标数据库中,但是它通过用户应用程序暴露数据。所以,只需简单地从 ibmsnap_operation 列选择数据到一个动作变量,然后结合对源列的值的选择,使用一个用于 insert、update 和 delete 的 case 语句,便可以将事务复制到任何您想在其上编程的数据源。 接下来我们看看如何创建 ccd 目标表。本节假设您已经知道如何配置 q replication —— 因此着重讲解队列映射和队列订阅的创建。以前,当选择一种目标表类型时(如果使用 replication center's create queue subscription 向导的话,就在这个向导中的第 5 步),您有两个选择 —— 表或存储过程。现在您可以选择 ccd table,但是必须指定您想要哪种类型的 ccd。如果使用的是 asnclp,那么语法如下:
要创建一个 ccd,必须指定两个新属性 —— condensed(压缩的)和 complete(完整的)。 展示了这些属性如何影响目标表的创建:
创建 ccd 目标表只要做这些就可以了。那么,有了 ccd 表之后,如何使用它呢?让我们将这些值与之前介绍的那些用法联系起来。
接下来我们看看 ccd 表与源表有什么不同。ccd 表与源表的不同在于多了几个附加的列:
这些列附件在行的后面,因此该 ccd 表可用于创建其他拷贝,更新其他拷贝,或者使应用程序可以访问事务历史。如果启用了数据库审计功能,那么 ccd 表中还可能提供以下几列:
如果手动创建 ccd 目标表,则语法应该像下面这个例子一样。注意,
幸运的是,您只需清楚三个限制,另外再注意一点:
另外一个您可能失察的地方是 delete 的行为。如果您在使用一个压缩 ccd 表,那么在处理 delete 操作时,现有的行将被更新,而 ibmqrep_operation 列将被设为 ‘d’。如果这一行不存在,那么该行将被忽略,并且被记录到异常表中。对于非压缩 ccd 表,所有事务都生成新的行。delete 会生成一个新行,其中仍然使用当前各列的值,但是 ibmqrep_operation 列被设为 'd'。
关于这个话题就讲到这里了。希望本文提供的信息能帮助您利用扩展的架构,并将数据暴露给更多的用户。 学习
|
考察生成惟一序列数字的几种选择
级别: 初级 (), 软件开发人员, ibm 2004 年 9 月 01 日 如何将代理键(surrogate key)用作 db2 udb 中的主键?代理键是生成惟一序列号的一种有效方法。从本文中可以了解三种实现:传统方法,使用键管理器,以及使用新的 db2 udb 特性。 使用代理键凯发天生赢家一触即发官网的解决方案是为了发现一种生成惟一序列号的有效方法。本文描述了三种实现:
代理键也叫 内键(internal key)。当创建一个表时,可以添加一个额外的列作为代理键。这个列应该是 not null,并且没有商业意义。可以将该代理列指定为主键列。例如可以有一个数字代理列。代理键的值从某一个数字开始,例如 "1",以这个数字作为该列在表中第一行的值,之后的每一行中该列的值都按 1 递增。 例如,如果我们有表 employee:
那么可以添加一个代理键列 serialnumber,并将其指定为主键列。这样,这个表的定义就变为:
那么,怎样将惟一的值赋给每一行的 serialnumber 列呢?首先需要为代理键生成惟一的值。下面我将讨论三种可行的凯发天生赢家一触即发官网的解决方案。 传统方法是使用简单的 sql 或触发器生成惟一的值。 以表 employee 为例。您可以在 insert 语句中实现代理键生成函数:
sql 语句 " 这样做存在的一个问题是,当将第一行插入表中时,可能会得到如下错误:
得到上述错误的原因是,当表为空时,"
另一种传统方法是使用触发器来生成代理键:
传统方法易于理解,而且容易在所有系统上实现。但是,这种实现实际上会导致事务处理系统中出现并发问题。因为该实现只允许一次执行一条 insert 操作。 因此,在获得最大的 serialnumber 之前," 很多大型的应用程序使用键管理器方法维护所有表的代理键。键管理器可以是一个助手类。每当需要向表插入一个行时,便可以调用键管理器生成新的键值,然后将获得的键值插入新行。 首先,需要创建表 keys 来记录每个表的当前代理键值。键管理器类将使用该表生成新键值。
第二,将新表(例如表 employee)注册到表 keys 中。
第三,编写 keymanger 类来维护每个已注册表的代理键。keymanager 将提供两个方法:
要查看更详细的 keymanger 的代码,请参考附录。 第四,调用 keymanger 来获得主键值:
显然,键管理器是模块化设计的一个很好的例子。键管理器封装了代理键生成函数。这种实现也易于定制。您可以在 keys 表中为 surrogatekeyvalue 或 increment 指定不同的值,以得到不同的代理键。而且,这种实现可以在大多数数据库系统上实施。但是,为了进行维护,需要一个单独的表和编写代码。所以,这种方法更适合于大型的跨数据库系统。 db2 udb 提供了三种方法来生成惟一值。您可以使用这些方法来实现代理键。
凯发天生赢家一触即发官网的解决方案的思想 generate_unique() 最初是在 db2 udb version 6.1 中提供的一个 sql 函数。该函数返回当前系统时间戳。我们可以使用该函数为代理键列生成惟一值。 示例
然后可以用下面的 sql 语句插入一行:
优点和问题 这里需要清楚两件事情。 首先,当多个事务在同一时刻插入行时,generate_unique() 可能会返回相同的时间戳。在这种情况下,generate_unique() 不能为每个事务生成一个惟一的返回值,因而这种方法不适合有大量事务的系统。 第二,一旦系统时钟需要向后调整,那么 generate_unique() 将可能返回重复的值。 由于上述限制,我决不会在生产系统中使用 generate_unique()。但是,当您需要在有限的时间内完成一个原型时,这也许是一种选择。 凯发天生赢家一触即发官网的解决方案的思想 identity 是 db2 udb version 7.1 和后期版本提供的 create table 语句中的一个选项。在创建表时,可以将某个列指定为 identity 列。对于每条 insert 语句,db2 将负责为其中的这一列生成一个惟一的值。 示例
然后可以用下面的语句插入一行:
insert 语句不需要指定 serialnumber 列的值。db2 udb 将根据列的定义自动生成惟一值,即 "generated always as identity (start with 1, increment by 1)"。 优点和问题 identity 函数在大多数情况下是代理键函数的一个好的凯发天生赢家一触即发官网的解决方案。db2 import 和 export 实用程序也支持 identity 选项。 然而,在某种情况下,这种凯发天生赢家一触即发官网的解决方案不大方便。在运行 insert 语句之后,应用程序将永远都不知道放入了主键列中的是什么值。如果应用程序必须继续向子表插入一个行,那么它就不得不对父表运行一条 select 语句,以得到主键值。不过,如果这一点对于您的系统不成问题的话,那么使用 identity 选项是一个好主意。 凯发天生赢家一触即发官网的解决方案的思想 sequence 对象是在 db2 udb version 7.2 中引入的一个特性。用户可以在数据库中创建一个 sequence 对象,就像创建表对象或视图对象一样,然后从 sequence 中请求值。db2 保证用户每次可以得到一个惟一的序列值。 示例 您可以在数据库中创建一个 sequence 对象:
如果有一个如下所示的 employee 表:
那么可以用下面的语句插入一个行:
在这里使用 " 您可以使用 " 例如,考虑这样的情况:有两个应用程序连接到数据库,并按照如下顺序运行下面的 sql 语句。 (假设 sequence " 应用程序 1:
从 empserial 生成的 " 应用程序 2:
从 empserial 生成的 " 应用程序 1:
" 而且, 例如,假设 sequence "
执行 然后,如果运行:
则 " 优点和问题 sequence 是最近 db2 udb 为生成惟一值而实现的函数。它还有一个缓存函数,用于提高性能(要了解详细信息,请参阅 )。该函数比 identity 函数更灵活,因为它是数据库中的一个独立对象。必要时候,可以通过运行 如果系统只在 db2 udb 上运行,那么 sequence 也许是最好的凯发天生赢家一触即发官网的解决方案,因为它易于使用,而且不像键管理器那样需要额外的代码,并且可以随需求的变化很轻易对其进行更改。 本文描述了实现作为主键的代理键的三种方法。文中主要讨论了如何为代理键生成惟一的序列值。 传统方法适合于简单的、单用户(非并发)系统。对于实现对于大型系统和跨平台系统,键管理器是一个好选择。但是,如果项目只在 db2 udb 上运行的话,可以考虑 db2 udb 提供的特性。identity 和 sequence 函数提供了一种容易的、灵活的凯发天生赢家一触即发官网的解决方案。 在创建 identity 列和 sequence 对象时,可以使用很多选择。请参阅 和 ,以获得完整的细节。
|
示例:
ibmdisrv -c"c:\demos\rs.xml" -r"access2ldap" -l"c:\metamerge\mydemo.log"
当 ibm tivoli directory integrator 终止时,它会返回以下某个退出代码:
cde不能启动的故障一般性解决方法
document #: 1811114i23000
body:
cde不能启动的故障一般性解决方法
环境:aix all
问题描述:
用户经常会遇到cde桌面启动不了的情况,那么遇到这种情况应该如何解决呢?
解答:
1、检查是否从图形控制台上能看到login图形提示。如果可以看到,问题仅仅发生在输入用户名密码之后出现篮屏等等不能登陆的情况,那么检查:a>各个文件系统的空间有没有满的。有的话删除部分文件或者扩大文件系统。b>hostname 在/etc/hosts文件中是否和正在使用的ip地址有对应关系。如果有错误,请用hostname更改主机名或者修改/etc/hosts文件。
2、如果不能启动cde,并且连login的图形提示都无法看到。那么尝试以下步骤:a>执行/usr/dt/bin/dtconfig -kill b>执行ps-ef|grep dt查看是否有dtlogin进程,如果有,用kill -9 pid 杀死该进程 c>在图形主控台上执行 /etc/rc.dt 命令启动cde桌面,到login提示符。
3、如果上述操作不能成功,或者根本没有/usr/dt/bin/dtconfig 和/etc/rc.dt文件,那么请从光盘上安装所有以x11.*的文件集。安装的时候,请注意选择 overwrite same or newer versions? 为yes。(默认是no)在安装完之后执行第二步,不需要重启。
解决方法:
aix上无须进行任何配置,但是必须有xdmcp协议。服务程序在监听xdmcp端口。cde的xdmcp服务器为
dtlogin,x window本身的xdmcp服务器为xdm,当然gnu也有一些其它的服务器。如果aix上安了cde,则只要启动cde即可。如果没有安装cde,需要启动xdm。
以下命令可以确认xdmcp服务器已经启动:
netstat -an|grep 177
检查输出,确认状态为listen。如果一切正常,就可以使用xmanager通过登录了。
安装完xmanager后,在xbrowser中new一个xdmcp,选择xdm query,在host输入框输入主机名或ip
地址,选apply,然后done,启动xmanager就会显示图形登录介面了。
查看交换区信息:
lsps -a 显示交换区的分布信息
lsps -s 显示交换区的使用信息
slibclean 清除处理程序遗留的旧分页信息
smit mkps 建立交换区空间信息
swapon -a 启动所有的分页空间
/etc/swapspaces 存放分页空间表格信息
-------------------------------------------------
显示卷信息:
lsvg 显示卷的名称
lsvg -l rootvg 显示rootvg卷的详细信息
-------------------------------------------------
mount卷的方法:
varyonvg datavg 加载datavg卷
mount /dev/data1 加载datavg下的一个data1卷
裸设备类型:raw,jfs jfs可以转变成文件系统,而raw则不行
-------------------------------------------------
在裸设备上安装oracle系统:
修改裸设备的权限,如裸设备名为system01,安装数据库用户为oracle
chown oracle:dba /dev/system01
chown oracle:dba /dev/rsystem01
在使用文件时必须用rsystem01
-------------------------------------------------
smit快速路径名称:(smit:图形方式,smitty:字符方式)
dev 设备管理
diag 诊断
jfs 定期档案管理系统
lvm 逻辑卷册系统管理员管理
nfs nfs管理
sinstallp 软件安装及维护
spooler 列印队列管理
system 系统管理
tcpip tcp/ip管理
user 使用者管理
clstart,clstop:启动和停止cluster
lssrc -g cluser:查看cluser的状态
-------------------------------------------------
查看已安装的软件信息:
ls -af /usr/lpp (lpp:licensed program products)
查看安装媒体内容:
installp -q -d /dev/cdrom -l
-------------------------------------------------
启动时自动加载文件系统信息:
需要加载的信息存放在/etc/filesystems
mount -t nf 加载所有在/ect/filesystems中定义type=nfs的文件系统
显示已加载的文件系统及状态: df -v,mount
-------------------------------------------------
查看错误日志信息:
errpt -a
-------------------------------------------------
有关tcp/ip的命令
网路卡:
smit chgenet,chgtok,chgfddi,opschange,mktty:adptr架构快速路径
smit mkinet,ppp:slip与ppp快速路径
ifconfig:config界面
位址:
/etc/hosts 静态主机表
/etc/resolv.conf 位址解析的名称服务器
/etc/named.boot 名称服务器架构
/etc/named.ca 根名称服务器快取
/etc/named.data 位址列表
/etc/named.rev 反转指标列表
nslookup 查询名称服务器资讯
网络路由:
route 管理路由
netstat -rn 列出定义的路由
routed 路由(daekmin rip)
gated 路由(daekmin rip、egp、hello)
/etc/gateways 已知网关
/etc/networks 已知网路
服务:
/etc/services
/etc/inetd.conf
tcp/ip群组子系统:
/etc/rc.net
startsrc -g tcpip 启动全部的tcpip子系统
startsrc -s inetd 启动主要internet
除错:
iptrace 启动封包追踪
ipreport 追踪结果格式化输出
netstat 网络统计
ping 检查是否可以到达
查看hacmp,外部硬盘信息:
lscfg -v
lsdev -cc adapter
对等机器信息:
/etc/.rhosts
/etc/hosts.equiv
/etc/hosts
-------------------------------------------------
观察进程内存使用情况:
ps aux 观察参数%mem:内存使用百分比 rss:实际使用内存
vmstat free的单位为块,缺省值为4096bytst
-------------------------------------------------
创建raw设备时选择的类型:
raw_lv
自己总结的aix的命令,且都在小型机上通过!
登陆
cmd->telnet 10.122.149.1
修改密码
#passwd
关机
#shutdown
#shutdown –f
重启计算机
#shutdown –fr
进入目录
#cd app(目录名)
回退:
#cd ..
查看设备状态
#lsdev -cc disk查看磁盘是否可用
#lsdev -cc adapter查看适配器是否可用
#lsdev -cc tape 查看磁带是否可用
查看磁盘的基本属性
#lsattr -el hdisk5
从root用户修改为oracle用户
#chown oracle:dba aa.txt(文件名称/磁盘名称)
修改disk5磁盘的读写权限
#chmod 755 *hdisk5
删除磁盘
#rmdev –dl hdisk5
磁带备份
#cfgmgr –v 确认磁带机
#lsdev –cc tape 看磁带机是否可用
开始备份
#smitty mksysb
#选择可用磁带机回车(esc 4)选择
镜像
#smitty vg
#选择 mirror a volume group
#选择 rootvg
#hdisk1需要一段时间
#bosboot –ad hdisk1
#bootlist –m normal hdisk0 hdisk1 硬盘启动的顺序
hacmp 启动和停止
(1)、启动 hacmp
使用以下步骤启动 hacmp:
以 root 用户 login aix
使用 smitty cl_admin 进入 hacmp 管理界面
选择 manage cluster services 菜单项,按 enter 键
选择 start cluster services 菜单项,按 enter 键
按 enter 键启动 hacmp
(2)、停止 hacmp
使用以下步骤启动 hacmp:
以 root 用户 login aix
使用 smitty cl_admin 进入 hacmp 管理界面
选择 manage cluster services 菜单项,按 enter 键
选择 stop cluster services 菜单项,按 enter 键
按 enter 键停止 hacmp
查看ip地址和子网掩码,端口号
#ifconfig -a
#netstat -i
#netstat -in
#uptime 运行天数
#ps –ep|grep ora 查看ora进程
#ps –ep|grep 查看所有的进程
#ps –ep|pg 按页显示进程
ftp命令
cmd下 ftp 10.122.149.1
#bin二进制模式下传送
#mput a.txt上传文件
#mget a.txt下载文件
#errpt 查看错误信息
#errpt >/tmp/errpt2007110.txt保存errpt为txt文件
#errclear 0 把errpt错误日志清0
#kill -9 pid 关掉进程
# cd oracle/app/crs/product/10.2/log/hdmis1/crsd
# ls
core.2006-12-20-21:55:28 core.2006-12-20-23:21:45 core.2006-12-21-01:16:46 crsd.l01
core.2006-12-20-22:12:57 core.2006-12-20-23:25:46 core.2006-12-21-01:52:35 crsd.log
core.2006-12-20-22:50:42 core.2006-12-20-23:30:20 core.2006-12-21-15:33:27
core.2006-12-20-23:17:50 core.2006-12-21-00:19:30 core.2007-01-08-15:39:35
aix是ibm公司开发的业界领先的优秀商务unix操作系统,在可靠性、可用性、开放性、扩展性、高性能、安全性等方面都非常突出,尤其是在internet的关键应用领域以及系统和硬件管理能力方面,其性能表现更为出色,受到了业界的普遍认可和广泛使用。以下是笔者几年来使用aix系统的一点心得,兹供使用该系统的其他读者参考。
1.如何禁止终端上的中断键(ctrl c)?
在很多应用系统中,系统管理员希望普通用户只运行自己的应用程序,不能进入系统的shell提示符下,但缺省情况下当用户在终端上按ctrl c键时就会退到系统提示符下。由于用户终端一般没有固定的端口号,为了禁止使用中断键,可采取下面办法:
(1)如果使用ksh, 可在$home/.profile中第一行加入如下内容:
trap "echo 'abnormal operation'; exit" 123915
(2)如果使用csh(ksh亦可),可用如下命令:
%stty intr ^!
如果恢复正常情况,键入下列命令:
% stty intr ^c
2.如何在shell中不回显(echo)字符?
在实际应用中,一般当我们在键盘上键入口令时不希望将其显示在屏幕上,为此可采用下面的两种办法:
·使用stty 命令
stty -echo # do not display password
echo "enter password: \c"
read passwd #get the password
stty echo # restore standard configuration
·使用echo命令
设置保密属性:echo "\033[
取消保密属性:echo "\033[m"
3.如何在某个目录及其所属子目录的所有文件中查找字符串?
在程序维护过程中,有时需要在某个目录及其所属子目录的所有文件中查找某一个字符串,为此可用下面两种方法(假设在*.cp文件中查找字符串"abc",结果放在文件out中):
(1)cat /dev/null > out
find ./ -name "*.cp" -exec grep "abc"{} >> out
(2)find ./ -name "*.cp" | xargs grep "abc" > out
推荐使用第二种方法,因其系统开销小、速度快。
4.如何对/etc/inittab文件中的一行进行注释?
我们都知道在shell中使用"#"作为注释符号,但在/etc/inittab中注释一行的方法是在第一个字符前插入字符":"。
5.如何转换dos和aix两种格式的文本文件?
如欲转换dos和aix两种格式的文本文件,有两种方法:
(1)用ftp命令:设置ascii传输类型,在一台运行aix的机器和另外一台运行windows的机器之间互相传送,这里不再赘述。
(2)使用aix2dos或dos2aix命令
如将dos格式的文本文件转换为aix格式,可用命令a:dos2aix inputfile outfile,反之可用命令:aix2dos inputfile outfile,关于dos2aix和aix2dos命令的详细用法可参阅"dos2aix -h "和"aix2dos -h "。注意要使用这两个命令,必须首先安装文件集bos.pci。
6.如何解决某一pv上的vgda与odm库不一致的问题?
在系统维护过程中,因为操作错误或其他特殊原因,有可能使某一pv上的lvcb和vgda与其对应的odm库不一致,导致odm库紊乱,对pv的有关操作无法进行,这时可采用如下两个aix命令加以解决:
redefinevg -d hdisk_name vg_name
该命令以指定pv上的lvm信息重新定义给定vg的odm库。
或:synclvodm -p -v vgname
该命令同步或重建给定vg的odm库和lvm信息。
7.如何设置用户的文件大小限制?
在aix系统中,用户使用系统资源是有一定限制的。如用户缺省可创建或扩展的最大文件为
如欲修改,可使用smit:
# smit chuser 选择用户,修改下面两项:
soft file size [4194302]
# (
hard file size [4194302]
# (
用该用户身份登录,使用"ulimit -f "和"ulimit -hf"可分别显示其fsize、fsize_hard的大小。
8、如何按文件大小排序列出一个文件系统下的文件?
当监控某一文件系统的空间使用情况时,如果该文件系统剩余空间较少或已使用空间增长较快,则有必要排序列出该文件系统中所有大于某一给定字节数的文件,以便进一步维护管理。为此,可用如下命令:
# find [filesystem_name] -xdev -size [512-bytes bloks] -ls | sort -r -n -k7