2009年02月16日
通常ORACLE数据库占用硬盘空间过大的原因有这么几个(以oracle 10.2.0版本为例):
1、oracle的安装目录…\oracle\product\10.2.0\admin\orcl\udump目录下,追踪日志文件占用大量硬盘空间;
2、oracle的安装目录…\oracle\product\10.2.0\oradata\orcl目录下,UNDO表空间文件占用大量硬盘空间。

针对以上两个问题,解决方法如下。
第一个问题解决方法:
udump目录下面是oracle的追踪日志文件,如果平常不去关心的话,建议删除掉。对数据库不会造成影响。另外在SQLPLUS中输入:
alter system set sql_trace =false;
如果需要保留追踪日志文件的,那可以给设定一个限额。命令行如下:
alter  system  set  max_dump_file_size=’100m’ ;
注:max_dump_file_size默认大小值的单位是数据块,因此如果限定了大小为100M,需要加单引号。

第二个问题的解决方法:
需要回收UNDO表空间。先创建一个新的过度的表空间UNDOTBS02,将UNDO表空间指向到UNDOTBS02,然后DROP原来的表空间UNDOTBS01,删除UNDOTBS01.DBF文件,释放磁盘空间。接着创建新的表空间UNDUTBS01,再将UNDO表空间指向到新建表空间的UNDOTBS01,DROP过度的表空间UNDOTBS02。
具体操作如下:
1)、使用DBA登陆SQLPLUS。
2)建立过度表空间undotbs02
create undo tablespace undotbs02 datafile ‘e:\undotbs02.dbf’ size 100M;
3)切换UNDO表空间为新的UNDO表空间
alter system set undo_tablespace=undotbs02 scope=both;
4)删除原UNDO表空间
drop tablespace undotbs01 including contents;
5)删除硬盘上…\oracle\product\10.2.0\oradata\orcl目录下的undotbs01.dbf文件。
6)建立新的表空间undotbs01,切换UNDO表空间到新建的undotbs01,删除undotbs02表空间。方法同上。
至此,完成了UNDO表空间回收。

上面的操作是临时解决UNDO表空间过大的方法。Oracle的AUM(Auto Undo Management)从出生以来就经常出现只扩展,不收缩(shrink),通常我们可以设置足够的UNDO表空间大小,然后取消其自动扩展属性。

2009年01月21日

表空间:
Oracle的UNDOTBS01.DBF文件太大的解决办法
1、.禁止undo tablespace自动增长
alter   database   datafile   ‘full_path\undotbs01.dbf’   autoextend   off;
2.– 创建一个新的小空间的undo tablespace
create undo tablespace undotBS2 datafile ‘full_path\UNDOTBS02.DBF’  size 100m;
                                                                
– 设置新的表空间为系统undo_tablespace
alter system set undo_tablespace=undotBS2;

– Drop 旧的表空间
drop tablespace undotbs1 including contents;

–查看所有表空间的情况
select * from dba_tablespaces

–创建表空间
create tablespace  HRPM0
    datafile ‘/oradata/misdb/HRPM0.DBF’ size 5m  autoextend   on next  10m maxsize unlimited

–删除表空间
DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;

–修改表空间大小
     alter database datafile ‘/path/NADDate05.dbf’ resize 100M   

分区表:

当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。
    Oracle中提供了以下几种表分区:
一、范围分区:这种类型的分区是使用列的一组值,通常将该列成为分区键。
示例1:假设有一个CUSTOMER表,表中有数据200000行,我们将此表通过CUSTOMER_ID进行分区,每个分区存储100000行,我们将每个分区保存到单独的表空间中,这样数据文件就可以跨越多个物理磁盘。下面是创建表和分区的代码,如下:
CREATE TABLE CUSTOMER
(
  CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,
  FIRST_NAME VARCHAR2(30) NOT NULL,
  LAST_NAME VARCHAR2(30) NOT NULL,
  PHONE VARCHAR2(15) NOT NULL,
  EMAIL VARCHAR2(80),
  STATUS CHAR(1)
)
PARTITION BY RANGE (CUSTOMER_ID)
(
  PARTITION CUS_PART1 VALUES LESS THAN (100000) TABLESPACE CUS_TS01,
  PARTITION CUS_PART2 VALUES LESS THAN (200000) TABLESPACE CUS_TS02
)
注意:在创建表进行分区时,表空间必须先存在,而且建议将不同的分区放入不同的表空间中。
示例2:假设有ORDER_ACTIVITIES表,每6个月对订单进行清理,我们可以按月份对表进行分区,分区代码如下:
CREATE TABLE ORDER_ACTIVITIES
(
  ORDER_ID NUMBER(7) NOT NULL,
  ORDER_DATE DATE,
  TOTAL_AMOUNT NUMBER,
  CUSTOTMER_ID NUMBER(7),
  PAID CHAR(1)
)
PARTITION BY RANGE (ORDER_DATE)
(
  PARTITION ORD_ACT_PART01 VALUES LESS THAN (TO_DATE(‘01-MAY-2003′,’DD-MON-YYYY’)) TABLESPACE ORD_TS01,
  PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE(‘01-JUN-2003′,’DD-MON-YYYY’)) TABLESPACE ORD_TS02,
  PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE(‘01-JUL-2003′,’DD-MON-YYYY’)) TABLESPACE ORD_TS03
)

二、列表分区:该分区的特点是某列的值只有几个,基于这样的特点我们可以采用列表分区。
示例1:
CREATE TABLE PROBLEM_TICKETS
(
  PROBLEM_ID NUMBER(7) NOT NULL PRIMARY KEY,
  DESCRIPTION VARCHAR2(2000),
  CUSTOMER_ID NUMBER(7) NOT NULL,
  DATE_ENTERED DATE NOT NULL,
  STATUS VARCHAR2(20)
)
PARTITION BY LIST (STATUS)
(
  PARTITION PROB_ACTIVE      VALUES (‘ACTIVE’)       TABLESPACE PROB_TS01,
  PARTITION PROB_INACTIVE    VALUES (‘INACTIVE’)     TABLESPACE PROB_TS02
)

三、散列分区:这类分区是在列值上使用散列算法,以确定将行放入哪个分区中。当列的值没有合适的条件时,建议使用散列分区。请看下列示例:
示例1:
CREATE TABLE HASH_TABLE
(
  COL NUMBER(8),
  INF VARCHAR2(100)
)
PARTITION BY HASH (COL)
(
  PARTITION PART01 TABLESPACE HASH_TS01,
  PARTITION PART02 TABLESPACE HASH_TS02,
   PARTITION PART03 TABLESPACE HASH_TS03
)

四、复合范围列表分区:这种分区是基于范围分区和列表分区,表首先按某列进行范围分区,然后再按某列进行列表分区,分区之中的分区被称为子分区。
示例1:
CREATE TABLE SALES
(
  PRODUCT_ID VARCHAR2(5),
  SALES_DATE DATE,
  SALES_COST NUMBER(10),
  STATUS VARCHAR2(20)
)
PARTITION BY RANGE(SALES_DATE)
  SUBPARTITION BY LIST (STATUS)
(
  PARTITION P1 VALUES LESS THAN (TO_DATE(‘2003-01-01′,’YYYY-MM-DD’)) TABLESPACE P1_TS
  (
    SUBPARTITION P1SUB1 VALUES (‘ACTIVE’) TABLESPACE SUBP1_TS1,
    SUBPARTITION P1SUB2 VALUES (‘INACTIVE’) TABLESPACE SUBP1_TS2
  ),
  PARTITION P2 VALUES LESS THAN (TO_DATE(‘2003-03-01′,’YYYY-MM-DD’)) TABLESPACE P2_TS
  (
    SUBPARTITION P2SUB1 VALUES (‘ACTIVE’) TABLESPACE SUBP2_TS1,
    SUBPARTITION P2SUB2 VALUES (‘INACTIVE’) TABLESPACE SUBP2_TS2
  )
)
示例2:使用TEMPLATE模板
CREATE TABLE SALES
(
  PRODUCT_ID VARCHAR2(5),
  SALES_DATE DATE,
  SALES_COST NUMBER(10),
  STATUS VARCHAR2(20)
)
PARTITION BY RANGE(SALES_DATE)
  SUBPARTITION BY LIST (STATUS)
  SUBPARTITION TEMPLATE
  (
    SUBPARTITION SUB1 VALUES (‘ACTIVE’) TABLESPACE SUBP1_TS1,
    SUBPARTITION SUB2 VALUES (‘INACTIVE’) TABLESPACE SUBP2_TS2
  )
(
  PARTITION P1 VALUES LESS THAN (TO_DATE(‘2003-01-01′,’YYYY-MM-DD’)) TABLESPACE P1_TS,
  PARTITION P2 VALUES LESS THAN (TO_DATE(‘2003-03-01′,’YYYY-MM-DD’)) TABLESPACE P2_TS
)
五、复合范围散列分区:这种分区是基于范围分区和散列分区,表首先按某列进行范围分区,然后再按某列进行散列分区。与上面的定义方式非常的类似,在此不单独举例。

    表分区对于用户来说是透明的,我们在插入数据时Oracle会自动判断插入的数据,然后放入相应的表分区中。但有时我们想单独查询某个分区中的数据时,就必须手工指定分区的名称。
示例1:(此示例基于:四、复合范围列表分区的示例一)
向SALES表插入记录,不必指定表分区。
INSERT INTO SALES VALUES(‘00001′,’01-1月-02′,100,’ACTIVE’)
/
INSERT INTO SALES VALUES(‘00002′,’01-1月-01′,200,’ACTIVE’)
/
INSERT INTO SALES VALUES(‘00003′,’01-2月-03′,300,’INACTIVE’)
/
INSERT INTO SALES VALUES(‘00004′,’04-2月-03′,300,’INACTIVE’)
/
INSERT INTO SALES VALUES(‘00005′,’04-2月-02′,300,’INACTIVE’)
/
不指定表分区查看SALES表信息:
SELECT * FROM SALES;  结果如下所示:
指定P1表分区查询SALES表信息:
SELECT * FROM SALES PARTITION(P1);  结果如下所示:
指定P1SUB1子分区查询SALES表信息:
SELECT * FROM SALES SUBPARTITION(P1SUB1);  结果如下所示:
示例2:(此示例基于:四、复合范围列表分区的示例二)
    示例2基于TEMPLATE模板的表分区,查询稍稍烦琐一点。
指定P1表分区查询SALES表信息:
SELECT * FROM SALES PARTITION(P1);  结果如下所示,和刚才查询一致。
指定SUB1子分区查询SALES表信息:
SELECT * FROM SALES SUBPARTITION(SUB1);   出现如下错误信息:
怎么解决以上问题呢?我们通过sys模式查看分区信息的数据字典,如下:
可以看出子分区不叫SUB1,而是P1_SUB1,重新查询信息,如下图所示:

    有关表分区的一些维护性操作:
一、添加分区
以下代码给SALES表添加了一个P3分区
ALTER TABLE SALES ADD PARTITION P3 VALUES LESS THAN(TO_DATE(‘2003-06-01′,’YYYY-MM-DD’));
注意:以上添加的分区界限应该高于最后一个分区界限。

以下代码给SALES表的P3分区添加了一个P3SUB1子分区
ALTER TABLE SALES MODIFY PARTITION P3 ADD SUBPARTITION P3SUB1 VALUES(‘COMPLETE’);

二、删除分区
以下代码删除了P3表分区:
ALTER TABLE SALES DROP PARTITION P3;

在以下代码删除了P4SUB1子分区:
ALTER TABLE SALES DROP SUBPARTITION P4SUB1;
注意:如果删除的分区是表中唯一的分区,那么此分区将不能被删除,要想删除此分区,必须删除表。

三、截断分区
    截断某个分区是指删除某个分区中的数据,并不会删除分区,也不会删除其它分区中的数据。当表中即使只有一个分区时,也可以截断该分区。通过以下代码截断分区:
ALTER TABLE SALES TRUNCATE PARTITION P2;
通过以下代码截断子分区:
ALTER TABLE SALES TRUNCATE SUBPARTITION P2SUB2;

四、合并分区
    合并分区是将相邻的分区合并成一个分区,结果分区将采用较高分区的界限,值得注意的是,不能将分区合并到界限较低的分区。以下代码实现了P1 P2分区的合并:
ALTER TABLE SALES MERGE PARTITIONS P1,P2 INTO PARTITION P2;

五、拆分分区
    拆分分区将一个分区拆分两个新分区,拆分后原来分区不再存在。注意不能对HASH类型的分区进行拆分。
ALTER TABLE SALES SBLIT PARTITION P2 AT(TO_DATE(‘2003-02-01′,’YYYY-MM-DD’))
INTO (PARTITION P21,PARTITION P22);

六、接合分区(coalesca)
    结合分区是将散列分区中的数据接合到其它分区中,当散列分区中的数据比较大时,可以增加散列分区,然后进行接合,值得注意的是,接合分区只能用于散列分区中。通过以下代码进行接合分区:
ALTER TABLE SALES COALESCA PARTITION;

七、重命名表分区
以下代码将P21更改为P2
ALTER TABLE SALES RENAME PARTITION P21 TO P2;

九、跨分区查询
select sum( *) from (
(select count(*)  cn from t_table_SS PARTITION (P200709_1)
union all
select count(*)  cn from t_table_SS PARTITION (P200709_2));

十、查询表上有多少分区
SELECT * FROM useR_TAB_PARTITIONS WHERE TABLE_NAME=’tableName’

十一、查询索引信息
select object_name,object_type,tablespace_name,sum(value)
from v$segment_statistics
where statistic_name IN (‘physical reads’,'physical write’,'logical reads’)and object_type=’INDEX’
group by object_name,object_type,tablespace_name
order by 4 desc

–显示数据库所有分区表的信息:
select * from DBA_PART_TABLES

–显示当前用户可访问的所有分区表信息:
select * from ALL_PART_TABLES

–显示当前用户所有分区表的信息:
select * from USER_PART_TABLES

–显示表分区信息 显示数据库所有分区表的详细分区信息:
select * from DBA_TAB_PARTITIONS

–显示当前用户可访问的所有分区表的详细分区信息:
select * from ALL_TAB_PARTITIONS

–显示当前用户所有分区表的详细分区信息:
select * from USER_TAB_PARTITIONS

–显示子分区信息 显示数据库所有组合分区表的子分区信息:
select * from DBA_TAB_SUBPARTITIONS

–显示当前用户可访问的所有组合分区表的子分区信息:
select * from ALL_TAB_SUBPARTITIONS

–显示当前用户所有组合分区表的子分区信息:
select * from USER_TAB_SUBPARTITIONS

–显示分区列 显示数据库所有分区表的分区列信息:
select * from DBA_PART_KEY_COLUMNS

–显示当前用户可访问的所有分区表的分区列信息:
select * from ALL_PART_KEY_COLUMNS

–显示当前用户所有分区表的分区列信息:
select * from USER_PART_KEY_COLUMNS

–显示子分区列 显示数据库所有分区表的子分区列信息:
select * from DBA_SUBPART_KEY_COLUMNS

–显示当前用户可访问的所有分区表的子分区列信息:
select * from ALL_SUBPART_KEY_COLUMNS

–显示当前用户所有分区表的子分区列信息:
select * from USER_SUBPART_KEY_COLUMNS

–怎样查询出oracle数据库中所有的的分区表
select * from user_tables a where a.partitioned=’YES’

–删除一个表的数据是
truncate   table   table_name;

–删除分区表一个分区的数据是
alter   table   table_name   truncate   partition   p5;

注:分区根据具体情况选择。

表分区有以下优点:
1、数据查询:数据被存储到多个文件上,减少了I/O负载,查询速度提高。
2、数据修剪:保存历史数据非常的理想。
3、备份:将大表的数据分成多个文件,方便备份和恢复。
4、并行性:可以同时向表中进行DML操作,并行性性能提高。
================================================

索引:
1、一般索引:
create index index_name on table(col_name);
2、Oracle 分区索引详解
语法:Table Index
   CREATE [UNIQUE|BITMAP] INDEX [schema.]index_name
ON [schema.]table_name [tbl_alias]
(col [ASC | DESC]) index_clause index_attribs

index_clauses:
分以下两种情况

1. Local Index
   就是索引信息的存放位置依赖于父表的Partition信息,换句话说创建这样的索引必须保证父表是Partition
1.1 索引信息存放在父表的分区所在的表空间。但是仅可以创建在父表为HashTable或者composite分区表的。
    LOCAL STORE IN (tablespace)
1.2 仅可以创建在父表为HashTable或者composite分区表的。并且指定的分区数目要与父表的分区数目要一致
LOCAL STORE IN (tablespace)  (PARTITION [partition       [LOGGING|NOLOGGING]       [TABLESPACE {tablespace|DEFAULT}]       [PCTFREE int]       [PCTUSED int]       [INITRANS int]       [MAXTRANS int]       [STORAGE storage_clause]       [STORE IN {tablespace_name|DEFAULT]       [SUBPARTITION [subpartition [TABLESPACE tablespace]]]])

1.3 索引信息存放在父表的分区所在的表空间,这种语法最简单,也是最常用的分区索引创建方式。
    Local
1.4 并且指定的Partition 数目要与父表的Partition要一致
LOCAL (PARTITION [partition
[LOGGING|NOLOGGING]
[TABLESPACE {tablespace|DEFAULT}]
[PCTFREE int]
[PCTUSED int]
[INITRANS int]
[MAXTRANS int]
[STORAGE storage_clause]
[STORE IN {tablespace_name|DEFAULT]
[SUBPARTITION [subpartition [TABLESPACE tablespace]]]])

Global Index
  索引信息的存放位置与父表的Partition信息完全不相干。甚至父表是不是分区表都无所谓的。语法如下:
GLOBAL PARTITION BY RANGE (col_list)
( PARTITION partition VALUES LESS THAN (value_list)
[LOGGING|NOLOGGING]
[TABLESPACE {tablespace|DEFAULT}]
[PCTFREE int]
[PCTUSED int]
[INITRANS int]
[MAXTRANS int]
[STORAGE storage_clause] )
但是在这种情况下,如果父表是分区表,要删除父表的一个分区都必须要更新Global Index ,否则索引信息不正确
ALTER TABLE TableName DROP PARTITION PartitionName  Update Global Indexes

–查询索引
select object_name,object_type,tablespace_name,sum(value)
from v$segment_statistics
where statistic_name IN (‘physical reads’,'physical write’,'logical reads’)and object_type=’INDEX’
group by object_name,object_type,tablespace_name
order by 4 desc

2009年01月20日

牛年将至,不说年初的雪灾,也不说年中的地震,也不说年终的金融危机。
回顾这么一年时间,酸甜苦辣五味俱全,大喜大悲跌宕起伏。
人生是一张白纸,而我就是一支笔,我怎么画,我的人生就什么样了。回顾08,一声叹息。

2008年11月25日

Samba使用/etc/samba/smb.conf作为它的配置文件。如果你改变了这个配置文件,这个改变直到你使用service smb restart命令重启Samba守护进程后才会生效。要指定Windows工作组和对它的简短描述,编辑 smb.conf 文件中的以下几行:

    workgroup = WORKGROUPNAME
    server string = BRIEF COMMENT ABOUT SERVER

    把WORKGROUPNAME换成你的机器所属的Windows工作组名。BRIEFCOMMENT ABOUT SERVER 是可选的,它被用作关于Samba系统的Windows注释。

    要在你的Linux系统上创建Samba共享目录,在smb.conf文件中添加以下几行(根据你和你的系统需要修改了该文件之后):

[sharename]
comment = Insert a comment here
path = /home/share/
valid users = tfox carole
public = no
writable = yes
printable = no
create mask = 0765

    上面的例子允许用户 tfox 和 carole 从 Samba 客户中读写 Samba 服务器上的目录 /home/share。

加密口令

    在 Red Hat Linux 9中,加密口令被默认启用,因为它更安全。如果加密口令没有被使用,纯文本口令就会被使用,它能够被别人使用网络分组嗅探器来截取。建议你使用加密口令。

    Microsoft SMB协议最初使用纯文本口令。然而,带有服务包3或更高的 Windows NT 4.0、Windows 98、Windows 2000、Windows ME、以及 Windows XP要求加密的Samba口令。要在RedHatLinux系统和运行以上Windows操作系统的系统间使用Samba,你可以编辑Windows注册器来使用纯文本口令过配置你的Linux系统的Samba来使用加密口令。如果你选择要修改你的注册器,你必须为你的全部Windows机器这么做—这很冒险,有可能导致进一步的冲突。为了更高的安全性,推荐你使用加密口令。

    要在你的RedHatLinux系统上配置Samba使用加密口令,遵循以下步骤:

    1.为 Samba 创建一个单独的口令文件。要根据你的现存 /etc/passwd 文件来创建,在 shell 提示下键入以下命令:

    cat /etc/passwd | mksmbpasswd.sh > /etc/samba/smbpasswd

    如果系统使用 NIS,键入以下命令:

    ypcat passwd | mksmbpasswd.sh > /etc/samba/smbpasswd
    mksmbpasswd.sh 脚本和 samba 软件包一起被安装在你的 /usr/bin 目录上。

    2.改变Samba口令文件的权限许可,因此只有根用户才有读写权限:

    chmod 600 /etc/samba/smbpasswd

    3.这个脚本不会把用户口令复制到新文件,Samba用户账号在没有设置口令之前不会被激活。为了更高的安全性,建议你把用户的 Samba 口令设置为不同于用户的 Red Hat Linux 口令的口令。要设置每个 Samba 用户的口令,使用以下命令(把 username 替换为每个用户的用户名):

    smbpasswd username

    4.加密口令必须在Samba配置文件中被启用。在smb.conf文件中,请确定以下行没有被注释掉:
    encrypt passwords = yes
    smb passwd file = /etc/samba/smbpasswd

    5.在 shel提示下键入 service smb restart来确定smb服务被启动。

    6.如果你想让 smb 服务被自动启动,使用 ntsysv、chkconfig、或 服务配置工具来在运行时间启用它。

窍门

    阅读 /usr/share/doc/samba-/docs/htmldocs/ENCRYPTION.html 来进一步了解有关加密口令的信息。(替换你安装了的 Samba 版本号码)。

    当使用了 passwd 命令后,pam_smbpass PAM模块能够被用来同步用户的 Samba口令和他们的系统口令。如果用户启用了passwd命令,他用来登录到RedHatLinux系统的口令以及他要连接 Samba 共享所必须提供的口令就会被改变。

    要启动这个功能,把以下行添加到 /etc/pam.d/system-auth 的启动 pam_cracklib.so 之下:password required /lib/security/pam_smbpass.so nullok use_authtok try_first_pass

启动和停止服务器

    在通过Samba共享目录的服务器上必须运行 smb 服务。

    使用以下命令来查看 Samba 守护进程的状态:
    /sbin/service smb status

    使用以下命令来启动守护进程:
    /sbin/service smb start

    使用以下命令来停止守护进程:
    /sbin/service smb stop

    要在引导时启动 smb 服务,使用以下命令:
    /sbin/chkconfig –level 345 smb on

    你还可以使用chkconfig、ntsysv或服务配置工具来配置要在引导时启动的服务

2008年11月18日

比如想把以下的ip地址表按升序进行排列
192.1.8.1
192.1.8.2
192.1.8.128
192.1.8.168
192.1.8.233
192.1.82.159
192.1.8.221
192.1.8.6
192.1.8.85
可是当使用"排序"选项进行排序时,就变成以下顺序:
192.1.8.1
192.1.8.128
192.1.8.168
192.1.8.2
192.1.8.221
192.1.8.233
192.1.8.6
192.1.8.85
192.1.82.159

除非把192.1.8.1这样形式的地址都变成192.1.8.001才可以正常排列出来,可是这样手动改起来太麻烦啦,有没有简单的方法呢?

方法如下:
首先添加个辅助列,输入下面的公式,再按该列排序即可(其中A1为原始IP列的坐标)。

程序代码 程序代码
=LEFT(A1,FIND("%",SUBSTITUTE(A1,".","%",3))-1)&"."&TEXT(RIGHT(A1,LEN(A1)-FIND("%",SUBSTITUTE(A1,".","%",3))),"000")
引用内容 引用内容
SUBSTITUTE语法:
SUBSTITUTE(text,old_text,new_text,instance_num)
Text   为需要替换其中字符的文本,或对含有文本的单元格的引用。
Old_text   为需要替换的旧文本。
New_text   用于替换 old_text 的文本。
Instance_num   为一数值,用来指定以 new_text 替换第几次出现的 old_text。如果指定了 instance_num,则只有满足要求的 old_text 被替换;否则将用 new_text 替换 Text 中出现的所有 old_text。
示例
SUBSTITUTE("Sales Data", "Sales", "Cost") 等于 "Cost Data"
SUBSTITUTE("Quarter 1, 1991", "1", "2", 1) 等于 "Quarter 2, 1991"
SUBSTITUTE("Quarter 1, 1991", "1", "2", 3) 等于 "Quarter 1, 1992"
如果要在名称为 CellCont2 的单元格中,用方括号来替换所有出现的文本常量 "Separator",请输入:
SUBSTITUTE(CellCont2, Separator, "] [")
2008年10月29日

Broadcast message 向该服务器的用户广播消息
Broadcast message usernames 向该服务器的某一用户广播消息
Dbcache Flush 关闭当前在数据库高速缓存中打开的所有数据库。使用此命令可以在高速缓存中维护数据库,例如:备份或恢复数据库。
Drop username 关闭一个或多个服务器会话。如果希望亲眼确认哪些会话已被关闭,则必须在服务器的 NOTES.INI 文件中输入Log_Sessions=1 的设置。
Drop "username" 关闭在指定用户名下运行的当前会话
Drop "username1 ""username2" 关闭在用户username1和username2下运行的会话
Drop All 关闭所有服务器会话
Exit 关闭服务器,注:不能用远程控制台重起服务器
Hangup portname 挂断指定端口
Help 显示服务器命令列表,并附有每个命令的简短描述、参数(如果有的话)和正确的语法。
Load 启动服务器外接程序
Load Fixup 加载并运行 Fixup 服务器任务
Load Object Info OBJECT.NSF 加载并运行共享邮件管理者,并传递执行 Info 任务所需的参数
Load http 加载web服务
Load decs 加载外部数据连接服务
Load calconn 加载日历管理器
Load event 加载事件管理器
Load sched 加载日程安排管理器
Load stats 加载统计信息收集管理器
Load maps 加载路由表(路由拓扑结构)管理器
Load Router 加载邮件路由管理器
Load Replica 加载复制管理器
Load Update 加载更新管理器
Load Amgr 加载代理管理器
Load AdminP 加载管理进程
Pull servername 强制与指定服务器进行单向仅拉入复制。
Pull servername databasename 强制从指定服务器单向仅拉入复制指定的数据库文件。
Push servername 强制与指定服务器进行单向仅推出复制。
Push servername databasename 强制将指定的数据库文件单向仅推出复制到指定服务器。
Replicate 初始化与指定服务器之间的双向复制强制在两个服务器之间进行复制。发起复制的服务器(也就是当前正在使用的服务器)首先将其他服务器上的更改拉入进来,然后让将它的更改推出到其他服务器。使用该命令可以快速传递数据库的更新,或者解决复制或通讯疑难问题。
Replicate servername 在本地服务器和指定服务器之间发起复制。服务器控制台显示指明复制进行的起始时间的信息。
Replicate servername databasename 在本地服务器和指定服务器之间发起,指定数据库文件的复制。
Restart server 禁用当前服务器,然后在短暂延迟后重新启动服务器。
Restart Port portname 禁用指定端口上的事务(或消息)然后在短暂延迟后重新启动端口。此命令使您不用停止 Domino 服务器就可以停止并启动端口。
Route servername 使用特定服务器发起邮件路由。初始化与指定服务器的待发邮件的未安排邮件传送。
Set Configuration setting 在 NOTES.INI 文件中增加或更改设置。
Set Secure currentpassword 口令保护Domino服务器控制台如果不输入口令,则无法使用 Load、Tell、Exit、Quit 和 Set Configuration 服务器命令,也无法使用那些不是通过“Domino 目录”中的“程序”文档或 NOTES.INI 文件来自动运行的程序。除非使用相同口令再次输入 Set Secure 命令来清除口令,否则控制台的安全性将保持有效。
Set Secure password 若当前没有有效口令,则设置口令保护控制台。 如果控制台已经受口令(这里为“password”)保护,请再次输入带有此口令的 Set Secure 命令,来清除该口令。
Set Secure password newpassword 将现有口令“password”更改为“newpassword”。
Set Statistics statisticname 重设累计的统计信息。Statisticname 是命名待重设的统计信息所需参数。此参数不能使用通配符 (*)。
Show Cluster 本地服务器的群集名称缓存区,它包括一个所有群集成员及其状态的列表
Show Config 显示Notes.ini文件中参数设置的值。
Show Config h* 则显示h开头的参数名。
Show Database 显示指定数据库的文档和视图信息
Show Directory       在Notes目录中显示每个数据库的信息
Show Disk       显示全部服务器驱动器的磁盘释放统计信息
Show Memory       显示此数据库的内存统计信息
Show Performance 触发性能统计信息的一分钟显示
Show Allports       显示服务器上的所有启用或禁用端口的配置。
Show Port       显示指定端口的信息
Show Schedule 显示安排但未执行的命令
Show Server       仅显示核心服务器状态信息
Show Tasks       显示运行在服务器上的所有任务的状态信息
Show UserS       显示所有活动会话的使用信息
Stop Port Portname       禁用端口禁用指定端口的事务(或消息)。此命令允许更改端口,而且不用停止 Domino server 就可以立即生效。
Stop Port TCP 禁用名为 TCP 的端口。
Start Port portname       启用指定端口的事务(或消息)。
Start Port TCP 启用名为 TCP 的端口
Tell serverprogram       将命令串发送给任务。
Tell Router Quit       只关闭 Router 任务。服务器上其他所有任务继续运行。
Tell Adminp Process All 处理所有新的和更改过的立即、时间间隔、每天和延迟的请求。该命令并不重设计时请求的执行时间。
Tell Adminp Process Daily 处理下列请求:所有新的和更改过的每日请求,以更新“Domino 目录”中的“个人”文档。 任何突出的 Rename Person in Unread List 请求。
Tell Adminp Process Delayed 处理所有新的和修改过的延迟请求。这些请求通常依照“服务器”文档中的“开始执行日期”和“开始执行时间”设置运行。
Tell Adminp Process Interval 处理所有立即请求,以及所有依照“服务器”文档中的“时间间隔”设置执行的请求。
Tell Adminp Process New       处理所有新请求。
Tell Adminp Process People 处理所有新的和修改过的请求,以更新“Domino 目录”中的“个人”文档。
Tell Adminp Process Time       处理所有新的和修改过的请求来删除未链接的邮件文件。
Tell Adminp Show Databases       显示(并在服务器的日志文件中记录)下列信息:特定的管理服务器更新的数据库。 在所更新数据库中更新了“读者”和“作者”域的位置。没有为其指定管理服务器的数据库。
Tell Adminp Quit       关闭服务器的 Administration Process。
Tell Amgr Pause       暂停代理的日程安排。
Tell Amgr Resume       继续代理的日程安排。
Tell Amgr Schedule       显示预定在当天运行所有代理的时间安排表。此外,该命令也显示代理触发类型、代理预定的运行时间、代理名称和代理运行于其上的数据库名称。检查 Agent Manager 的日程安排表可查到代理是否在 Agent Manager 队列中等候。Agent Manger 队列:E = 能够运行的代理       S = 预设运行的代理        V = 等待事件发生的事件触发代理触发类型:S = 预设运行的代理       M = 新邮件触发代理         U = 新建 / 更新文档触发代理Tell Amgr Status 快速显示 Agent Manager 队列并且在“服务器”文档中显示“代理管理器”的设置。
Tell Amgr Quit       关闭服务器的 Agent Manager。
Tell Clrepl Log       立即在服务器日志 (LOG.NSF) 中记录信息,而不是等待下一个日志时间间隔。
Tell Clrepl Quit       关闭服务器上 Cluster Replicator 的所有实例。为了防止 Clrepl 任务在以后的会话中运行,那么请删除 NOTES.INI 文件的 ServerTasks 设置中所有 Clrepl 任务实例。禁用服务器的 Clrepl 任务只能防止此服务器到其他服务器的复制,而不防止其他群集服务器向此服务器进行复制。
Tell NNTP Newgroup groupname       新建一个新闻组,使用此命令创建在新闻事务期间没被自动创建的新闻组。
Tell NNTP Newgroup Delete group_name(s)       删除指定新闻组。
Tell NNTP Newgroup groupname pathname         提醒 NNTP 将带有指定群组名和路径名的群组添加到它的当前高速缓存列表。通过模板创建群组时使用此命令。
Tell NNTP print cache list       打印当前 NNTP 讨论群组和相应 Notes 数据库的列表。
Tell NNTP Print config        打印当前 NNTP 配置变量和他们的值的列表。
Tell NNTP Quit       终止 NNTP 任务。
Tell NNTP Reset servername       重新设置新闻事务,以便此服务器的下次输入或输出可以象首次输入或输出一样对文章进行推出或拉入。
Tell NNTP Show Config       显示 NNTP 服务器配置设置,此设置在“服务器”文档的 NNTP 区段中进行指定。
Tell NNTP Show Groups       显示服务器的新闻组的名称和路径。
Tell LDAP reloadschema       更新 LDAP 服务器上的目录模式以反映由定制“Domino 目录”而引起的更改。
Tell LDAP exportschema       建立或更新 Domino LDAP Schema 数据库。
Tell Router Delivery Stats       显示 Router 邮递的统计信息。
Tell Router Compact       压缩 MAIL.BOX 并清理开放的 Router 队列。
Tell Router Show Queues       显示发向指定服务器的传送队列中的邮件。
Tell Router Exit       终止服务器上的 Router 任务。
Tell Router Use databasename 创建指定的共享邮件数据库,并将 NOTES.INI 的 Shared_Mail 的值设置为 2,这样就能为了将邮件传送和邮递到该服务器而启用共享邮件数据库。
Tell Router Quit       关闭服务器的 Router 任务。
Tell Sched Stats       显示空闲时间数据库中预定和约会的总数。
Tell Sched Show username 在服务器控制台上显示指定用户的时间安排。使用此命令来调查空闲时间数据库中存在的问题。
Tell Sched Validate       立即校验服务器上的空闲时间数据库。
Tell Sched Validate username       校验指定用户的信息。
Tell Sched Quit       关闭服务器上的 Schedule Manager 任务。
Tell Collector Collect        在所有指定服务器上运行统计信息收集,并生成统计信息报告。
Tell Collector Quit       关闭服务器的 Collect 任务。
Tell Web Help       列出所有的 Web Navigator 服务器控制台命令。
Tell Web Refresh       刷新所有的 Web Navigator 的全局设置。如果在运行 Web 服务器任务时编辑了“管理”文档,就需要使用这个命令。
Tell Web Quit       停止所有运行 Web Navigator 的复本。
Tell HTTP Restart       更改下列各项中的设置来刷新 Web 服务器:
·为用作“Web 服务器”而设的“服务器”文档。
·“Domino 目录”中的“文件保护”、“虚拟服务器”和“URL 映射”文档。影响 HTTP 服务器任务的 NOTES.INI 文件。
·HTTPD.CNF 和 BROWSER.CNF 文件。
·对 Java 服务器小程序或 servlet.properties 文件的更改。
Tell HTTP Show File Access       显示计算机及虚拟服务器上有关文件系统保护的信息。
Tell HTTP Show Security       显示关于 SSL 和服务器密钥集文件的信息(包括关于服务器是否启动 SSL 的信息)。如果在计算机上设置了虚拟服务器,则会显示有关虚拟服务器的 SSL 信息。
Tell HTTP Show Users       显示使用基于会话验证进行用户验证的用户名、IP 地址和会话的过期时间,基于会话的验证只使用基本验证。
Tell HTTP Show Virtual Servers       显示运行于计算机上的虚拟服务器的列表。
Tell HTTP Quit       关闭 Web Server 任务。
Trace servername       使用 Trace 命令测试与服务器的连接。此命令显示每个服务器跳段的详细信息,并且有助于解决网络连接的疑难问题。
Trace portname !!! servername       测试与服务器的连接跟踪指定的端口。

2008年10月23日
如果ID没有备份,而又忘记了ID的口令,可以通过重新注册获得同名的ID。
比如,用户abcd的需要恢复id。则—-
第一步,需要将服务器上的用户邮件数据库拷贝出来。
Domino\data\mail\abcd.nsf。
 

第二步:注册用户
使用同名,邮件系统选择“无”,选择ID位置。

第三步:注册成功后,拷贝abcd.nsf回到原来的mail目录下。使用新注册的ID登陆吧!!!

 

2008年08月15日

史记·谭望嵩·郑智列传 
1 史记.谭望嵩.郑智列传 
谭望嵩,蜀地成都人,共和三十六年生,少有大志,尝观蹴鞠,见西人汹汹,国足溃溃,乃怒,击股曰:“朝廷若用我为将,必封狼居胥矣!”乡人皆以为能,不敢侧目,及年长,身高七尺,削肩嬴腹,状清瘦,久习技击,颇精进,喜走江湖,遇辽东人士名郑智者,情意相投,结为兄弟。 

智亦习技击,尝与望嵩讲手,望嵩擅腿法,曰“七十二路探裆腿”,智擅搏击,曰“三十六路破面拳”,二人酣战半日,力竭方止。智曰:“贤弟好本事,何不去疆场搏个功名?”望嵩曰:“早有此意,怎奈没个相识,侯门似海。”智曰:“吾幼习蹴鞠,识得京师教头谢亚龙,贤弟若不弃,兄当引荐。”望嵩拜谢曰: “若恁的,不胜惶恐,有劳兄台!”言罢摆酒款待,二人把盏言欢,不胜快意。 

他日,智与望嵩备得厚礼,访亚龙于府上,亚龙见望嵩瘦削,笑曰:“汝有何能?”望嵩怒,只一腿,踢得亚龙昏沉,左右急救,良久方苏,竟不怒反笑,曰:“吾苦无悍将,今日方得矣!”智见望嵩得宠,心下恨恨,暗道:“若不露两手,倒显得有他无我!”便也不搭话,反身一肘,正中亚龙下颌,登时闭气,左右慌忙再救,徐徐睁目,问:“何人又伤我?”答曰:“郑智。”亚龙曰:“善,刚得猛虎,又来蛟龙,吾并收之!” 

自此,望嵩与智皆为亚龙麾下矣。 
亚龙有蹴鞠部曲一支,曰“山寨军”,军中有谚:风林火山,战时满场乱舞,却不知绣球何在,此曰“疾如风”;人虽众,却传球不中,跑动乏力,木戳戳不知所谓,此曰“徐如林”;对方稍一犯边,即前锋惶惶,后卫乱阵,此曰“乱如火”;敌军单刀而入,我军巍然,视球入网而不动,此曰“稳如山”,自望嵩、智入得军中,三军大振,以望嵩为后军校尉,智为前军校尉。 

共和五十九年,国际有奥林匹亚盛会组织者至京师,邀万国竞技,亚龙奉朝廷令率军赴前敌讨战,耀武扬威,自夸英勇,万国中有欧罗巴洲曰比利时者,颇为不忿,出兵应战,但见兵势弥天,“山寨军”狼狼大败,球门两番失守,势不能敌,亚龙哭曰:“天乎?天乎?”望嵩曰:“主公休得惊慌,待俺破敌!”言罢蹂身而上,奋击之,怎奈本学技击,不谙蹴鞠,虽舍身大战,却球毛未碰,不由得大怒,两股岔气忿忿直冲顶梁,施展“七十二路探裆腿”,一招“鸳鸯撞裆”,只一下,一番将捂裆倒地,二目一翻,三魂渺渺,七魄荡荡,不知生死,场上裁者大怒,探一支赤色令箭,令望嵩出局,望嵩曰:“吾自幼习武,目中无球,但有人尔,如何怪我?”怀恨而下。 

亚龙见望嵩退,大急曰:“望嵩退军,今番罢了!”郑智曰:“尚有我在,何必惊慌?”话音未落人已飞出,正逢球来,智探腿便踢,怎奈腿功荒疏,三绕两转,不知颠倒,智恼羞成怒,偏一番将靠其身边,智扬手一记“武老二反臂肘”,正中腋下,登时颓倒,裁者大惊,出赤色令箭一枚,罚智下场,俄顷,“山寨军”败,全军覆没,望嵩、智谓亚龙曰:“此乃天意,非人力所能挽回也,吾等尽其所能,然不能回天,气数也。”亚龙怅然曰:“尔等已尽力,明知不可为而为之,吾甚感动!”三人抱头痛哭。 

使臣曰:十三亿泱泱,国脉荡荡,竟不敌远洋小国,何也?飞脚拽拳,揪发扯辫,蹴鞠发祥之地,竟以暴力示人,亦何也?吾有一树,盼其开花结果二十余年矣,施肥莫不勤勉,浇水莫不用心,土质莫不膏腴,日光莫不充裕,然二十年仅开花一次,果实半个也无,而今一看,竟成腐木,此亦何也?!!!!!!!!!

2008年04月07日

 "如果你死后,墓志铭打算写点啥?"以下是一些回复:
1.一居室,求合租,面议。
2.小事招魂,大事挖坟。
3.我觉得我还可以抢救一下!
4.提供鞭尸服务,一次100!
5.基因重组中,请稍候二十年
6.单挑冥王哈迪斯中,征求组队!
7.当你看清这行字的时候:朋友,你踩到我了。
8.老子终于不用怕鬼了!
9.给爷笑一个,要不爷给你笑一个?
10.陪聊,提供夜间上门服务。
11.还看,你丫也会有这一天的
12.我從前是個胖子,現在和所有躺著的人一樣有骨感。
13.强力推荐这个给我挖坑的,电话:xxxxxxxxx
14.曾经很黄很暴力,现在很黑很安静
15.谢谢来访,改日登门回拜.呵呵
16.来客请便,无人倒茶,站累躺下一起聊聊?
17.终于解决住房问题了

2007年08月17日

        IDC双线路技术就是在互联网数据中心(IDC)通过特殊的技术手段把不同的网络接入商(ISP)服务接入到一台服务器上或服务器集群,使服务器所提供的网络服务访问用户能尽可能以同一个ISP或互访速度较快的ISP连接来进行访问,从而解决或者减轻跨ISP用户访问网站的缓慢延迟(南北网络瓶颈)问题。IDC双线路是一个技术概念可以多有具体实现方式,目前国内的IDC提供商分别提出了“双IP双线路”、“单IP双线路”、“CDN多线路”和“BGP单IP双线路”等双线路实现方法,下面来对以上提出的双线路实现方式进行具体说明:

  一、 双IP双线路实现方式

  双IP双线路实现方式是指在一台服务器上安装两块网卡,分别接入电信网线与网通网线并设置一个网通IP与一个电信IP,这样一台服务器上就有了两个IP地址,需要在服务器上添加网通或电信的路由表来实现网通用户与电信用户分别从不同的线路访问。双IP双线路具有常用的两种使用方式:

  1. ICP用户在网站设置两个IP地址不同的链接,网通用户点击网通IP访问服务器,电信用户点击电信IP访问。

  2. 使用BIND9(DNS服务器软件)对不同的IP地址请求返回不同的服务器IP的功能来实现网通用户请求域名时返回网通的IP,电信用户请求域名时返回电信的IP,这个方式就是一些IDC提出的智能DNS的方案。

  双IP双线路在一定程度上提高了网通与电信用户访问网站的速度,但缺点是由于服务器接入的是双网卡必须在服务器上进行路由表设置,这给普通用户增加了维护难度,并且所有的数据包都需要在服务器上进行路由判断然后再发往不同的网卡,当访问量较大时服务器资源占用很大。此方案是最简单的双线解决方案,一般限于规模较小的IDC提供商使用。

  二、 单IP双线路

  普通的单IP双线路是指在服务器上设置一个IP,此IP是网通IP或是电信IP,通过路由设备设置数据包是通过是电信网络或是网通网络发出来实现的双线技术。此方案也可以提高网通用户与电信用户的访问速度,解决了双IP双线需要在服务器上设置路由的问题,但由于IP地址采用的是网通或电信的IP,访问用户在发送请求数据包时不会自动判别最好的路由。所以这种解决方案只能说是半双线的技术方案、是一种过渡形式的解决方案。此方案一般为单线IDC服务商往双线IDC服务商转型期所采用的临时方案。

  三、 CDN方式实现双线路

  CDN(Content Delivery Network)互联网内容分发网络,就是多服务器分网托管加智能域名DNS,即服务器是CDN服务商提供,放在不同网络节点上,通过缓冲程序自动抓取用户源服务器的数据,然后缓存在不同网段节点的服务器上。再配合智能DNS服务器的分网解析功能,实现不同网络用户都能访问到离自己最近网段上的网站,从而避免因为网络问题而影响网站访问速度的目的。现绝大部份CDN技术在处理静态网站上比较成熟,对交互性很强如全动态页面的网站还不是很成熟。目前CDN方案主要作为一种辅助的解决方案需要配合其它的双线方案才能达到最好的效果。

  四、 用BGP协议实现的单IP双线路

  BGP(边界网关协议)协议主要用于互联网AS(自治系统)之间的互联,BGP的最主要功能在于控制路由的传播和选择最好的路由。中国网通与中国电信都具有AS号(自治系统号),全国各大网络运营商多数都是通过BGP协议与自身的AS号来互联的。使用此方案来实现双线路需要在CNNIC(中国互联网信息中心)申请IDC自己的IP地址段和AS号,然后通过BGP协议将此段IP地址广播到网通、电信等其它的网络运营商,使用BGP协议互联后网通与电信的所有骨干路由设备将会判断到IDC机房IP段的最佳路由,以保证网通、电信用户的高速访问。

  使用此方案具体以下优点:

  1. 服务器只需要设置一个IP地址,最佳访问路由是由网络上的骨干路由器根据路由跳数与其它技术指标来确定的,不会对占用服务器的任何系统资源。服务器的上行路由与下行路由都能选择最优的路径,所以能真正实现高速的单IP双线访问。

  2. 由于BGP协议本身具有冗余备份、消除环路的特点,所以当IDC服务商有多条BGP互联线路时可以实现路由的相互备份,在一条线路出现故障时路由会自动切换到其它线路。

  3. 使用BGP协议还可以使网络具有很强的扩展性可以将IDC网络与其他运营商互联,轻松实现单IP多线路,做到所有互联运营商的用户访问都很快。这个是双IP双线无法比拟的。

  虽然BGP方案是最好的解决方案但由于此方案需要IDC提供商的设备投入与带宽投入方面较大并且技术上较为复杂,所以目前国内采用此方案仅限于实力较强的专业IDC服务商。

  综上所述,以上各种双线实现的方式各有优缺点,双IP双线成本较低,但网络不够稳定并且占用大量的服务器资源,普通单IP双线路只是实现了部分双线路的效果所以访问速度不佳,CDN方式对静态网页效果很好但对交互性很强的网页效果不太理想,BGP单IP双线路解决了以上所有的问题是最好的实现方式但国内采用此种方案的IDC服务商较少,如果能将BGP单IP双线与CDN加速结合起来将会是最优的解决方案。目前全国已有不少合用BGP技术方案的数据中心,但大多为特殊客户提供服务,很少有针对普通用户和IDC商的机房。