2009年4月30日星期四

Oracle DB link创建和应用

1 增加alaias:
[oracle@testdb11gstd admin]$ pwd
/u01/app/oracle/product/11.1.0/db_1/network/admin
vi tnsnames.ora


# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.1.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

CRDB11GS =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = crdb11gstd.localdomain)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = testdb11gstd)
)
)


db169 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostIP1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ocr)
)
)

prodrac =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostIP2)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = sername)
)
)

[oracle@testdb11gstd admin]$ sqlplus demotest/password

SQL*Plus: Release 11.1.0.6.0 - Production on Thu Apr 30 20:13:19 2009

Copyright (c) 1982, 2007, Oracle. All rights reserved.


Connected to:
Oracle Database 11g Release 11.1.0.6.0 - 64bit Production

SQL> create public database link prod_link connect to demoname identified by demopassword using 'prodrac';
--说明一下:
--prod_link 是db_link的别名
--demoname 是目标机器的用户名
--demopassword是目标机器的用户密码
--prodrac 是上面建立的别名

Database link created.

SQL> select count(*) from ps_pools@prod_link;

COUNT(*)
----------
65084
SQL> select count(*) from ps_audiofile@prod_link;

COUNT(*)
----------
42633

SQL> select count(*) from ps_programs@prod_link;

COUNT(*)
----------
327


SQL> show user
USER is "DEMOTEST"
SQL> create table ps_pools as select * from ps_pools@prod_link;

Table created.

SQL> create table ps_audiofile as select * from ps_audiofile@prod_link;

create table ps_audiofile as select * from ps_audiofile@prod_link
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
ORA-01013: user requested cancel of current operation
ORA-02063: preceding line from PROD_LINK


SQL> create table ps_audiofile as select * from ps_audiofile@prod_link where 1=0;

Table created.
SQL> insert into ps_audiofile select * from ps_audiofile@prod_link ;

42636 rows created.

SQL> commit;

Commit complete.

SQL> create table sp_pools_ori as select * from ps_pools;

Table created.

SQL> select count(*) from sp_pools_ori;

COUNT(*)
----------
65084

转文:oracle 存储过程的基本语法

ref:http://owftc.javaeye.com/blog/90032 全的!

oracle
存储过程的基本语法

1.基本结构
CREATE OR REPLACE PROCEDURE 存储过程名字
(
参数1 IN NUMBER,
参数2 IN NUMBER
) IS
变量1 INTEGER :=0;
变量2 DATE;
BEGIN

END 存储过程名字

2.SELECT INTO STATEMENT
将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条
记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)
例子:
BEGIN
SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx;
EXCEPTION
WHEN NO_DATA_FOUND THEN
xxxx;
END;
...

3.IF 判断
IF V_TEST=1 THEN
BEGIN
do something
END;
END IF;

4.while 循环
WHILE V_TEST=1 LOOP
BEGIN
XXXX
END;
END LOOP;

5.变量赋值
V_TEST := 123;

6.用for in 使用cursor
...
IS
CURSOR cur IS SELECT * FROM xxx;
BEGIN
FOR cur_result in cur LOOP
BEGIN
V_SUM :=cur_result.列名1+cur_result.列名2
END;
END LOOP;
END;

7.带参数的cursor
CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID;
OPEN C_USER(变量值);
LOOP
FETCH C_USER INTO V_NAME;
EXIT FETCH C_USER%NOTFOUND;
do something
END LOOP;
CLOSE C_USER;

8.用pl/sql developer debug
连接数据库后建立一个Test WINDOW
在窗口输入调用SP的代码,F9开始debug,CTRL+N单步调试

批量更新数据的一个模板,年纪大了记不住了!

从一个集合中找到可供替换的表字段内容,更新相应的表,本来想用一个sql语句来实现,想来想去实现不了,算了,就写了一个procedure.为了害怕忘记了记录一下,以备后查!


create or replace procedure updateTab
IS
CURSOR cur IS SELECT * FROM demo_data;
BEGIN
FOR cur_result in cur LOOP
BEGIN
update ps_audiofile set sessionno=cur_result."sessionno_a" where ps_audiofile.POOLSID = cur_result.POOLSID;
END;
commit;
END LOOP;
END;

2009年4月29日星期三

转: Today’s Sun/Oracle Announcement

捏着鼻子学E文

From:
Jonathan I. Schwartz
To: allsun@sun.com
Subject: Today’s Sun/Oracle Announcement
Date: Mon, 20 Apr 2009 04:34:16 -0700 (07:34 EDT)

Today’s Sun/Oracle Announcement(公报)

This is one of the toughest(困难的,艰难的) emails I’ve ever had to write.

It’s also one of the most hopeful about Sun’s future in the industry.

For 27 years, Sun has stood for courage, innovation, a willingness to blaze trails, to envision and engineer the future. No matter our ups and downs, we’ve remained committed to those ideals, and to the R&D that’s allowed us to differentiate. We’ve committed to decade long pursuits, from the evolution of one of the world’s most powerful datacenter operating systems, to one of the world’s most advanced multi-core microelectronics. We’ve never walked away from the wholesale reinvention of business models, the redefinition of technology boundaries or the pursuit of new routes to market.

Because of the unparalleled talent at Sun, we’ve also fueled entire industries with our people and technologies, and fostered extraordinary companies and market successes. Our products and services have driven the discovery of new drugs, transformed social media, and created a better understanding of the world and marketplace around us. All, while we’ve undergone a near constant transformation in the face of a rapidly changing marketplace and global economy. We’ve never walked away from a challenge - or an opportunity.

So today we take another step forward in our journey, but along a different path - by announcing that this weekend, our board of directors and I approved the acquisition of Sun Microsystems by the Oracle Corporation for $9.50/share in cash. All members of the board present at the meeting to review the transaction voted for it with enthusiasm, and the transaction stands to utterly transform the marketplace - bringing together two companies with a long history of working together to create a newly unified vision of the future.

Oracle’s interest in Sun is very clear - they aspire to help customers simplify the development, deployment and operation of high value business systems, from applications all the way to datacenters. By acquiring Sun, Oracle will be well positioned to help customers solve the most complex technology problems related to running a business.

To me, this proposed acquisition totally redefines the industry, resetting the competitive landscape by creating a company with great reach, expertise and innovation. A combined Oracle/Sun will be capable of cultivating one of the world’s most vibrant and far reaching developer communities, accelerating the convergence of storage, networking and computing, and delivering one of the world’s most powerful and complete portfolios of business and technical software.

I do not consider the announcement to be the end of the road, not by any stretch of the imagination. I believe this is the first step down a different path, one that takes us and our innovations to an even broader market, one that ensures the ubiquitous role we play in the world around us. The deal was announced today, and, after regulatory review and shareholder approval, will take some months to close - until that close occurs, however, we are a separate company, operating independently. No matter how long it takes, the world changed starting today.

But it’s important to note it’s not the acquisition that’s changing the world - it’s the people that fuel both companies. Having spent a considerable amount of time talking to Oracle, let me assure you they are single minded in their focus on the one asset that doesn’t appear in our financial statements: our people. That’s their highest priority - creating an inviting and compelling environment in which our brightest minds can continue to invent and deliver the future.

Thank you for everything you’ve done over the years, and for everything you will do in the future to carry the business forward. I’m incredibly proud of this company and what we’ve accomplished together.

Details will be forthcoming as we work together on the integration planning process.

Jonathan

转文: Oracle10g地SQL正则表达式支持 其实11g也适用

ref: http://www.qqgb.com/DataDB/Oracle/OracleJiQiao/DataDB_139801.html

Oracle 8 和Oracle 9i中缺乏灵活性的SQL 正则表达式最终在Oracle 10g中得到了解决。Oracle 数据库目前内建了符合POSIX 标准的正则表达式。

四个新的函数分别是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和 REGEXP_REPLACE。它们在用法上与Oracle SQL 函数LIKE、INSTR、SUBSTR 和REPLACE 用法,但是它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。

POSIX 正则表达式由标准的元字符(metacharacters)所构成:

* '^' 表示字符串的开始
* ' * '.' 表示任何字符
* 字符的范围,比如说'[a-z]',表示任何ASCII 小写字母,与字符类"[[:lower:]]"" 等价
* '?' 允许一个后继字符匹配零次或一次
* '+' 允许一个后继字符匹配一次或多次
* '*' 表示零次或多次

可以使用"{m,n}" 指定一个精确地出现范围,其意思是“出现从m 次到n 次”;"{m}" 表示“正好m次”;而"{m,}" 表示“至少m次”。还可以使用圆括号组合字符的集合使用"|"(竖线)表示可替换。例如,字符串'^([a-z]+|[0-9]+)$'匹配所有由小写字母或数字组合成的字符串。

REGEXP_LIKE 与LIKE 操作符相似。如果第一个参数匹配正则表达式它就解析为TRUE。例如WHERE REGEXP_LIKE(ENAME,'^J[AO]','i') 将在ENAME 以JA 或JO 开始的情况下返回一行数据。'I' 参数指定正则表达式是大小写敏感的。另外还可以在CHECK 约束和函数索引中指定REGEXP_LIKE。例如:

ALTER TABLE EMP ADD CONSTRAINT REGEX01

CHECK (REGEXP_LIKE(ENAME,'^[[:alpha:]]+
这条语句使得ENAME 字段只能包含字母和数字字符(也就是说没有空格或者标点符号)。试图插入或者更新这些数据将导致一个ORA-2290 异常,或者检查约束的有效性。

REGEXP_INSTR 与INSTR 函数类似。它返回一个字符串中匹配一个正则表达式的第一个子串的开始位置。例如:

SELECT REGEXP_INSTR('The total is $400 for your purchase.','$[[:digit:]]+')

FROM DUAL;

我的测试--

SQL> select regexp_instr('The total is $400 for your purchase.', '$[[:digit:]]+') from dual;

REGEXP_INSTR('THETOTALIS$400FORYOURPURCHASE.','$[[:DIGIT:]]+')
--------------------------------------------------------------
0


SQL> select regexp_instr('The total is $400 for your purchase.', '$[0-9]+') from dual;

REGEXP_INSTR('THETOTALIS$400FORYOURPURCHASE.','$[0-9]+')
--------------------------------------------------------
0

---咋回事呢?

这个查询返回14,即$400在字符串的开始位置。另外还可以指定子串出现的次数;开始搜索的位置;是返回匹配的位置还是返回匹配之后字符的位置。

REGEXP_SUBSTR 返回匹配一个正则表达式的子串。虽然结合使用SUBSTR 和REGEXP_INSTR 及LENGTH 也可以实现这一功能,但是使用这个函数却更为简单。

SELECT REGEXP_INSTR('one,two,three','[^,]*') FROM DUAL;

这个查询返回'one',将第一个参数看成一个逗号分隔的列表并返回第一个逗号之前的所有字符。

REGEXP_REPLACE 返回初始参数被匹配子串替换之后的结果。例如:

SELECT REGEXP_REPLACE('The temperature is 23°F',

'([[:digit:]])+°F',

('\1'-32)*5/9||'°C')

FROM DUAL;

这个查询将查找一个华氏温度并将其转换为摄氏度。它将返回:'The temperature is -5°C'。


总是用过就忘了,找了一篇放在这里,备查! 表示字符串的结束
* '.' 表示任何字符
* 字符的范围,比如说'[a-z]',表示任何ASCII 小写字母,与字符类"[[:lower:]]"" 等价
* '?' 允许一个后继字符匹配零次或一次
* '+' 允许一个后继字符匹配一次或多次
* '*' 表示零次或多次

可以使用"{m,n}" 指定一个精确地出现范围,其意思是“出现从m 次到n 次”;"{m}" 表示“正好m次”;而"{m,}" 表示“至少m次”。还可以使用圆括号组合字符的集合使用"|"(竖线)表示可替换。例如,字符串'^([a-z]+|[0-9]+)$'匹配所有由小写字母或数字组合成的字符串。

REGEXP_LIKE 与LIKE 操作符相似。如果第一个参数匹配正则表达式它就解析为TRUE。例如WHERE REGEXP_LIKE(ENAME,'^J[AO]','i') 将在ENAME 以JA 或JO 开始的情况下返回一行数据。'I' 参数指定正则表达式是大小写敏感的。另外还可以在CHECK 约束和函数索引中指定REGEXP_LIKE。例如:

ALTER TABLE EMP ADD CONSTRAINT REGEX01

CHECK (REGEXP_LIKE(ENAME,'^[[:alpha:]]+
这条语句使得ENAME 字段只能包含字母和数字字符(也就是说没有空格或者标点符号)。试图插入或者更新这些数据将导致一个ORA-2290 异常,或者检查约束的有效性。

REGEXP_INSTR 与INSTR 函数类似。它返回一个字符串中匹配一个正则表达式的第一个子串的开始位置。例如:

SELECT REGEXP_INSTR('The total is $400 for your purchase.','$[[:digit:]]+')

FROM DUAL;

这个查询返回14,即$400在字符串的开始位置。另外还可以指定子串出现的次数;开始搜索的位置;是返回匹配的位置还是返回匹配之后字符的位置。

REGEXP_SUBSTR 返回匹配一个正则表达式的子串。虽然结合使用SUBSTR 和REGEXP_INSTR 及LENGTH 也可以实现这一功能,但是使用这个函数却更为简单。

SELECT REGEXP_INSTR('one,two,three','[^,]*') FROM DUAL;

这个查询返回'one',将第一个参数看成一个逗号分隔的列表并返回第一个逗号之前的所有字符。

REGEXP_REPLACE 返回初始参数被匹配子串替换之后的结果。例如:

SELECT REGEXP_REPLACE('The temperature is 23°F',

'([[:digit:]])+°F',

('\1'-32)*5/9||'°C')

FROM DUAL;

这个查询将查找一个华氏温度并将其转换为摄氏度。它将返回:'The temperature is -5°C'。


总是用过就忘了,找了一篇放在这里,备查!));

这条语句使得ENAME 字段只能包含字母和数字字符(也就是说没有空格或者标点符号)。试图插入或者更新这些数据将导致一个ORA-2290 异常,或者检查约束的有效性。

REGEXP_INSTR 与INSTR 函数类似。它返回一个字符串中匹配一个正则表达式的第一个子串的开始位置。例如:

SELECT REGEXP_INSTR('The total is $400 for your purchase.','$[[:digit:]]+')

FROM DUAL;

这个查询返回14,即$400在字符串的开始位置。另外还可以指定子串出现的次数;开始搜索的位置;是返回匹配的位置还是返回匹配之后字符的位置。

REGEXP_SUBSTR 返回匹配一个正则表达式的子串。虽然结合使用SUBSTR 和REGEXP_INSTR 及LENGTH 也可以实现这一功能,但是使用这个函数却更为简单。

SELECT REGEXP_INSTR('one,two,three','[^,]*') FROM DUAL;

这个查询返回'one',将第一个参数看成一个逗号分隔的列表并返回第一个逗号之前的所有字符。

REGEXP_REPLACE 返回初始参数被匹配子串替换之后的结果。例如:

SELECT REGEXP_REPLACE('The temperature is 23°F',

'([[:digit:]])+°F',

('\1'-32)*5/9||'°C')

FROM DUAL;

这个查询将查找一个华氏温度并将其转换为摄氏度。它将返回:'The temperature is -5°C'。


总是用过就忘了,找了一篇放在这里,备查! 表示字符串的结束
* '.' 表示任何字符
* 字符的范围,比如说'[a-z]',表示任何ASCII 小写字母,与字符类"[[:lower:]]"" 等价
* '?' 允许一个后继字符匹配零次或一次
* '+' 允许一个后继字符匹配一次或多次
* '*' 表示零次或多次

可以使用"{m,n}" 指定一个精确地出现范围,其意思是“出现从m 次到n 次”;"{m}" 表示“正好m次”;而"{m,}" 表示“至少m次”。还可以使用圆括号组合字符的集合使用"|"(竖线)表示可替换。例如,字符串'^([a-z]+|[0-9]+)$'匹配所有由小写字母或数字组合成的字符串。

REGEXP_LIKE 与LIKE 操作符相似。如果第一个参数匹配正则表达式它就解析为TRUE。例如WHERE REGEXP_LIKE(ENAME,'^J[AO]','i') 将在ENAME 以JA 或JO 开始的情况下返回一行数据。'I' 参数指定正则表达式是大小写敏感的。另外还可以在CHECK 约束和函数索引中指定REGEXP_LIKE。例如:

ALTER TABLE EMP ADD CONSTRAINT REGEX01

CHECK (REGEXP_LIKE(ENAME,'^[[:alpha:]]+
这条语句使得ENAME 字段只能包含字母和数字字符(也就是说没有空格或者标点符号)。试图插入或者更新这些数据将导致一个ORA-2290 异常,或者检查约束的有效性。

REGEXP_INSTR 与INSTR 函数类似。它返回一个字符串中匹配一个正则表达式的第一个子串的开始位置。例如:

SELECT REGEXP_INSTR('The total is $400 for your purchase.','$[[:digit:]]+')

FROM DUAL;

这个查询返回14,即$400在字符串的开始位置。另外还可以指定子串出现的次数;开始搜索的位置;是返回匹配的位置还是返回匹配之后字符的位置。

REGEXP_SUBSTR 返回匹配一个正则表达式的子串。虽然结合使用SUBSTR 和REGEXP_INSTR 及LENGTH 也可以实现这一功能,但是使用这个函数却更为简单。

SELECT REGEXP_INSTR('one,two,three','[^,]*') FROM DUAL;

这个查询返回'one',将第一个参数看成一个逗号分隔的列表并返回第一个逗号之前的所有字符。

REGEXP_REPLACE 返回初始参数被匹配子串替换之后的结果。例如:

SELECT REGEXP_REPLACE('The temperature is 23°F',

'([[:digit:]])+°F',

('\1'-32)*5/9||'°C')

FROM DUAL;

这个查询将查找一个华氏温度并将其转换为摄氏度。它将返回:'The temperature is -5°C'。


总是用过就忘了,找了一篇放在这里,备查!));

这条语句使得ENAME 字段只能包含字母和数字字符(也就是说没有空格或者标点符号)。试图插入或者更新这些数据将导致一个ORA-2290 异常,或者检查约束的有效性。

REGEXP_INSTR 与INSTR 函数类似。它返回一个字符串中匹配一个正则表达式的第一个子串的开始位置。例如:

SELECT REGEXP_INSTR('The total is $400 for your purchase.','$[[:digit:]]+')

FROM DUAL;

这个查询返回14,即$400在字符串的开始位置。另外还可以指定子串出现的次数;开始搜索的位置;是返回匹配的位置还是返回匹配之后字符的位置。

REGEXP_SUBSTR 返回匹配一个正则表达式的子串。虽然结合使用SUBSTR 和REGEXP_INSTR 及LENGTH 也可以实现这一功能,但是使用这个函数却更为简单。

SELECT REGEXP_INSTR('one,two,three','[^,]*') FROM DUAL;

这个查询返回'one',将第一个参数看成一个逗号分隔的列表并返回第一个逗号之前的所有字符。

REGEXP_REPLACE 返回初始参数被匹配子串替换之后的结果。例如:

SELECT REGEXP_REPLACE('The temperature is 23°F',

'([[:digit:]])+°F',

('\1'-32)*5/9||'°C')

FROM DUAL;

这个查询将查找一个华氏温度并将其转换为摄氏度。它将返回:'The temperature is -5°C'。


总是用过就忘了,找了一篇放在这里,备查!));

这条语句使得ENAME 字段只能包含字母和数字字符(也就是说没有空格或者标点符号)。试图插入或者更新这些数据将导致一个ORA-2290 异常,或者检查约束的有效性。

REGEXP_INSTR 与INSTR 函数类似。它返回一个字符串中匹配一个正则表达式的第一个子串的开始位置。例如:

SELECT REGEXP_INSTR('The total is $400 for your purchase.','$[[:digit:]]+')

FROM DUAL;

这个查询返回14,即$400在字符串的开始位置。另外还可以指定子串出现的次数;开始搜索的位置;是返回匹配的位置还是返回匹配之后字符的位置。

REGEXP_SUBSTR 返回匹配一个正则表达式的子串。虽然结合使用SUBSTR 和REGEXP_INSTR 及LENGTH 也可以实现这一功能,但是使用这个函数却更为简单。

SELECT REGEXP_INSTR('one,two,three','[^,]*') FROM DUAL;

这个查询返回'one',将第一个参数看成一个逗号分隔的列表并返回第一个逗号之前的所有字符。

REGEXP_REPLACE 返回初始参数被匹配子串替换之后的结果。例如:

SELECT REGEXP_REPLACE('The temperature is 23°F',

'([[:digit:]])+°F',

('\1'-32)*5/9||'°C')

FROM DUAL;

这个查询将查找一个华氏温度并将其转换为摄氏度。它将返回:'The temperature is -5°C'。


总是用过就忘了,找了一篇放在这里,备查! 表示字符串的结束
* '.' 表示任何字符
* 字符的范围,比如说'[a-z]',表示任何ASCII 小写字母,与字符类"[[:lower:]]"" 等价
* '?' 允许一个后继字符匹配零次或一次
* '+' 允许一个后继字符匹配一次或多次
* '*' 表示零次或多次

可以使用"{m,n}" 指定一个精确地出现范围,其意思是“出现从m 次到n 次”;"{m}" 表示“正好m次”;而"{m,}" 表示“至少m次”。还可以使用圆括号组合字符的集合使用"|"(竖线)表示可替换。例如,字符串'^([a-z]+|[0-9]+)$'匹配所有由小写字母或数字组合成的字符串。

REGEXP_LIKE 与LIKE 操作符相似。如果第一个参数匹配正则表达式它就解析为TRUE。例如WHERE REGEXP_LIKE(ENAME,'^J[AO]','i') 将在ENAME 以JA 或JO 开始的情况下返回一行数据。'I' 参数指定正则表达式是大小写敏感的。另外还可以在CHECK 约束和函数索引中指定REGEXP_LIKE。例如:

ALTER TABLE EMP ADD CONSTRAINT REGEX01

CHECK (REGEXP_LIKE(ENAME,'^[[:alpha:]]+$'));

这条语句使得ENAME 字段只能包含字母和数字字符(也就是说没有空格或者标点符号)。试图插入或者更新这些数据将导致一个ORA-2290 异常,或者检查约束的有效性。

REGEXP_INSTR 与INSTR 函数类似。它返回一个字符串中匹配一个正则表达式的第一个子串的开始位置。例如:

SELECT REGEXP_INSTR('The total is $400 for your purchase.','$[[:digit:]]+')

FROM DUAL;

这个查询返回14,即$400在字符串的开始位置。另外还可以指定子串出现的次数;开始搜索的位置;是返回匹配的位置还是返回匹配之后字符的位置。

REGEXP_SUBSTR 返回匹配一个正则表达式的子串。虽然结合使用SUBSTR 和REGEXP_INSTR 及LENGTH 也可以实现这一功能,但是使用这个函数却更为简单。

SELECT REGEXP_INSTR('one,two,three','[^,]*') FROM DUAL;

这个查询返回'one',将第一个参数看成一个逗号分隔的列表并返回第一个逗号之前的所有字符。

REGEXP_REPLACE 返回初始参数被匹配子串替换之后的结果。例如:

SELECT REGEXP_REPLACE('The temperature is 23°F',

'([[:digit:]])+°F',

('\1'-32)*5/9||'°C')

FROM DUAL;

这个查询将查找一个华氏温度并将其转换为摄氏度。它将返回:'The temperature is -5°C'。


总是用过就忘了,找了一篇放在这里,备查!));

这条语句使得ENAME 字段只能包含字母和数字字符(也就是说没有空格或者标点符号)。试图插入或者更新这些数据将导致一个ORA-2290 异常,或者检查约束的有效性。

REGEXP_INSTR 与INSTR 函数类似。它返回一个字符串中匹配一个正则表达式的第一个子串的开始位置。例如:

SELECT REGEXP_INSTR('The total is $400 for your purchase.','$[[:digit:]]+')

FROM DUAL;

这个查询返回14,即$400在字符串的开始位置。另外还可以指定子串出现的次数;开始搜索的位置;是返回匹配的位置还是返回匹配之后字符的位置。

REGEXP_SUBSTR 返回匹配一个正则表达式的子串。虽然结合使用SUBSTR 和REGEXP_INSTR 及LENGTH 也可以实现这一功能,但是使用这个函数却更为简单。

SELECT REGEXP_INSTR('one,two,three','[^,]*') FROM DUAL;

这个查询返回'one',将第一个参数看成一个逗号分隔的列表并返回第一个逗号之前的所有字符。

REGEXP_REPLACE 返回初始参数被匹配子串替换之后的结果。例如:

SELECT REGEXP_REPLACE('The temperature is 23°F',

'([[:digit:]])+°F',

('\1'-32)*5/9||'°C')

FROM DUAL;

这个查询将查找一个华氏温度并将其转换为摄氏度。它将返回:'The temperature is -5°C'。


总是用过就忘了,找了一篇放在这里,备查!));

这条语句使得ENAME 字段只能包含字母和数字字符(也就是说没有空格或者标点符号)。试图插入或者更新这些数据将导致一个ORA-2290 异常,或者检查约束的有效性。

REGEXP_INSTR 与INSTR 函数类似。它返回一个字符串中匹配一个正则表达式的第一个子串的开始位置。例如:

SELECT REGEXP_INSTR('The total is $400 for your purchase.','$[[:digit:]]+')

FROM DUAL;

这个查询返回14,即$400在字符串的开始位置。另外还可以指定子串出现的次数;开始搜索的位置;是返回匹配的位置还是返回匹配之后字符的位置。

REGEXP_SUBSTR 返回匹配一个正则表达式的子串。虽然结合使用SUBSTR 和REGEXP_INSTR 及LENGTH 也可以实现这一功能,但是使用这个函数却更为简单。

SELECT REGEXP_INSTR('one,two,three','[^,]*') FROM DUAL;

这个查询返回'one',将第一个参数看成一个逗号分隔的列表并返回第一个逗号之前的所有字符。

REGEXP_REPLACE 返回初始参数被匹配子串替换之后的结果。例如:

SELECT REGEXP_REPLACE('The temperature is 23°F',

'([[:digit:]])+°F',

('\1'-32)*5/9||'°C')

FROM DUAL;

这个查询将查找一个华氏温度并将其转换为摄氏度。它将返回:'The temperature is -5°C'。


总是用过就忘了,找了一篇放在这里,备查!));

这条语句使得ENAME 字段只能包含字母和数字字符(也就是说没有空格或者标点符号)。试图插入或者更新这些数据将导致一个ORA-2290 异常,或者检查约束的有效性。

REGEXP_INSTR 与INSTR 函数类似。它返回一个字符串中匹配一个正则表达式的第一个子串的开始位置。例如:

SELECT REGEXP_INSTR('The total is $400 for your purchase.','$[[:digit:]]+')

FROM DUAL;

这个查询返回14,即$400在字符串的开始位置。另外还可以指定子串出现的次数;开始搜索的位置;是返回匹配的位置还是返回匹配之后字符的位置。

REGEXP_SUBSTR 返回匹配一个正则表达式的子串。虽然结合使用SUBSTR 和REGEXP_INSTR 及LENGTH 也可以实现这一功能,但是使用这个函数却更为简单。

SELECT REGEXP_INSTR('one,two,three','[^,]*') FROM DUAL;

这个查询返回'one',将第一个参数看成一个逗号分隔的列表并返回第一个逗号之前的所有字符。

REGEXP_REPLACE 返回初始参数被匹配子串替换之后的结果。例如:

SELECT REGEXP_REPLACE('The temperature is 23°F',

'([[:digit:]])+°F',

('\1'-32)*5/9||'°C')

FROM DUAL;

这个查询将查找一个华氏温度并将其转换为摄氏度。它将返回:'The temperature is -5°C'。


总是用过就忘了,找了一篇放在这里,备查! 表示字符串的结束
* '.' 表示任何字符
* 字符的范围,比如说'[a-z]',表示任何ASCII 小写字母,与字符类"[[:lower:]]"" 等价
* '?' 允许一个后继字符匹配零次或一次
* '+' 允许一个后继字符匹配一次或多次
* '*' 表示零次或多次

可以使用"{m,n}" 指定一个精确地出现范围,其意思是“出现从m 次到n 次”;"{m}" 表示“正好m次”;而"{m,}" 表示“至少m次”。还可以使用圆括号组合字符的集合使用"|"(竖线)表示可替换。例如,字符串'^([a-z]+|[0-9]+)$'匹配所有由小写字母或数字组合成的字符串。

REGEXP_LIKE 与LIKE 操作符相似。如果第一个参数匹配正则表达式它就解析为TRUE。例如WHERE REGEXP_LIKE(ENAME,'^J[AO]','i') 将在ENAME 以JA 或JO 开始的情况下返回一行数据。'I' 参数指定正则表达式是大小写敏感的。另外还可以在CHECK 约束和函数索引中指定REGEXP_LIKE。例如:

ALTER TABLE EMP ADD CONSTRAINT REGEX01

CHECK (REGEXP_LIKE(ENAME,'^[[:alpha:]]+$'));

这条语句使得ENAME 字段只能包含字母和数字字符(也就是说没有空格或者标点符号)。试图插入或者更新这些数据将导致一个ORA-2290 异常,或者检查约束的有效性。

REGEXP_INSTR 与INSTR 函数类似。它返回一个字符串中匹配一个正则表达式的第一个子串的开始位置。例如:

SELECT REGEXP_INSTR('The total is $400 for your purchase.','$[[:digit:]]+')

FROM DUAL;

这个查询返回14,即$400在字符串的开始位置。另外还可以指定子串出现的次数;开始搜索的位置;是返回匹配的位置还是返回匹配之后字符的位置。

REGEXP_SUBSTR 返回匹配一个正则表达式的子串。虽然结合使用SUBSTR 和REGEXP_INSTR 及LENGTH 也可以实现这一功能,但是使用这个函数却更为简单。

SELECT REGEXP_INSTR('one,two,three','[^,]*') FROM DUAL;

这个查询返回'one',将第一个参数看成一个逗号分隔的列表并返回第一个逗号之前的所有字符。

REGEXP_REPLACE 返回初始参数被匹配子串替换之后的结果。例如:

SELECT REGEXP_REPLACE('The temperature is 23°F',

'([[:digit:]])+°F',

('\1'-32)*5/9||'°C')

FROM DUAL;

这个查询将查找一个华氏温度并将其转换为摄氏度。它将返回:'The temperature is -5°C'。


总是用过就忘了,找了一篇放在这里,备查!

長 短 週

長 短 週
「 長 短 週 制 度 」 是 alternate Saturday-off system 還 是 alternative Saturday-off system ? 讀 英 文 報 紙 招 聘 廣 告 , 常 見 52 working days with alternative Saturday off ( 五 天 半 工 作 , 隔 星 期 六 休 假 ) 之 類 說 法 。
「 長 短 週 制 度 」 當 然 是 alternate Saturday-off system , 例 如 : His company is planning to scrap the alternate Saturday-off system in favour of a five-day week ( 他 的 公 司 計 劃 廢 除 長 短 週 制 度 , 改 行 每星 期 五 天 工 作 ) 。
Alternate 有 「 間 隔 」 、 「 輪 流 」 的 意 思 , 作 動 詞 , 往 往和 with 連 用 ; 作 形 容 詞 , 則 不 用 with , 副 詞 ( adverb ) 是 alternately , 例 如: ( 1 ) Busy and quiet weeks seemed to alternate ( with each other ) (日 子 似 乎 是 一 個 星 期 繁 忙 , 一 個 星 期 清 閑 ) 。

( 2 ) He goes to work on alternate Saturdays ( 他 隔 星 期 六 上 班 ) 。
( 3 ) She alternately walked and ran ( 一 路 上 , 她 時 而 步 行 , 時 而 跑 步 ) 。

Alternative 則 有 「 選 擇 」 的 意 思 , 作 名 詞 或 形 容 詞 都 可 以 , 副 詞 是 alternatively , 例 如 :
( 1 ) The alternatives are putting up with his harassment or resignation ( 目 前 有 兩 個 選 擇 , 一 是 忍 受 他 騷 擾 , 一 是 辭 職 ) 。
( 2 ) If it rains on the day of the outing, do you have any alternative plans? ( 假 如 遠 足 那 天 下 雨, 你 們 有 沒 有 其 他 計 劃 ? )
( 3 ) You may take a bus or alternatively a taxi ( 你 可 以 搭 巴 士 , 也 可 以 搭 的 士 ) 。

香 港 英 文 報 刊 的 廣 告 , 由 客 戶 撰 寫 , 編 輯 沒 有 責 任 改 正 英 文 , 所 以 常 見 錯 誤 , 讀 者 千 萬 不 要 以 為 見 於 英 文 報 刊 即 可 學 習 。
( 本 欄 轉 載 自 《 蘋 果 日 報 》 的 「 征 服 英 語 」 專 欄 , 作 者 為 古 德 明 先 生 )

2009年4月26日星期日

Oracle Data Guard StudyNote 1

工作需要,备份一下primary database, 查了一些资料,咨询了一些高人,推荐Data Guard(DG)
废话少说,上图:



dataguard 主要使用的是 redo log ,这个可以理解,因为redolog 记录所有的操作(大部分),然后standby 数据库用promary database的redo 重构建数据:方式主要有3种:physical, logical, snapshot,这里主要介绍physical, logical







physical 初衷是用于“保护数据”,block-to-block方式进行数据重构建
专业术语 REDO apply








logical DG初衷用于 read only 操作,构造不同物理架构的database(我觉得primary databae 使用RAC模式, standby database使用 single instance模式)
专业词汇是 sql apply

图片的来源是Oracle 11g online 文档,copyright是人家的!

2009年4月24日星期五

急中生智 与 忙中出错

工作中很多时候都是“忙中出错”的远多于“急中生智”,自己体会也是这样的,就这两个词在google上搜索了一番:果然有人有这样的论述:

ref: http://techupdate.zdnet.com.cn/techupdate/2007/0917/511378.shtml
实施操作

制订一个详细的计划后,实施操作就可以“照本宣科”,是一个简单的体力劳动。要认识到“忙中出错”的概率远比“急中生智”大得多,操作时尽量减少失误的可能性。例如,需要执行的复杂命令,尽可能从一个文件拷贝到终端执行,而不要现场输入。另外,在实施过程中, 要记录各个阶段实际的执行时间,以供以后制订类似计划时参考。

纪录之

Physical controls and People controls

Physical controls are your first of defense, while people are your last line of defense 

The functional order of controls when  deployed for physical security:
Deterrence, then denial, then detection, then delay
Deterrence--威慑
denial -- 拒绝
detection -- 检测
delay -- 拖延


再次理解,我朝太祖的:调查就像“十月怀胎”,解决问题就像“一朝分娩”。调查就是解决问题。

毛泽东:反对本本主义
(一九三○年五月)

 一 没有调查,没有发言权⑴
 你对于某个问题没有调查,就停止你对于某个问题的发言权。这不太野蛮了吗?一点也不野蛮。你对那个问题的现实情况和历史情况既然没有调查,不知底里,对于那个问题的发言便一定是瞎说一顿。瞎说一顿之不能解决问题是大家明了的,那末,停止你的发言权有什么不公道呢?许多的同志都成天地闭着眼睛在那里瞎说,这是共产党员的耻辱,岂有共产党员而可以闭着眼睛瞎说一顿的吗?
 要不得!
 要不得!
 注重调查!
 反对瞎说!
  二 调查就是解决问题

 你对于那个问题不能解决吗?那末,你就去调查那个问题的现状和它的历史吧!你完完全全调查明白了,你对那个问题就有解决的办法了。一切结论产生于调查情况的末尾,而不是在它的先头。只有蠢人,才是他一个人,或者邀集一堆人,不作调查,而只是冥思苦索地“想办法”,“打主意”。须知这是一定不能想出什么好办法,打出什么好主意的。换一句话说,他一定要产生错办法和错主意。
 许多巡视员,许多游击队的领导者,许多新接任的工作干部,喜欢一到就宣布政见,看到一点表面,一个枝节,就指手画脚地说这也不对,那也错误。这种纯主观地“瞎说一顿”,实在是最可恶没有的。他一定要弄坏事情,一定要失掉群众,一定不能解决问题。
 许多做领导工作的人,遇到困难问题,只是叹气,不能解决。他恼火,请求调动工作,理由是“才力小,干不下”。这是懦夫讲的话。迈开你的两脚,到你的工作范围的各部分各地方去走走,学个孔夫子的“每事问”⑵,任凭什么才力小也能解决问题,因为你未出门时脑子是空的,归来时脑子已经不是空的了,已经载来了解决问题的各种必要材料,问题就是这样子解决了。一定要出门吗?也不一定,可以召集那些明了情况的人来开个调查会,把你所谓困难问题的“来源”找到手,“现状”弄明白,你的这个困难问题也就容易解决了。
 调查就像“十月怀胎”,解决问题就像“一朝分娩”。调查就是解决问题。
  三 反对本本主义

 以为上了书的就是对的,文化落后的中国农民至今还存着这种心理。不谓共产党内讨论问题,也还有人开口闭口“拿本本来”。我们说上级领导机关的指示是正确的,决不单是因为它出于“上级领导机关”,而是因为它的内容是适合于斗争中客观和主观情势的,是斗争所需要的。不根据实际情况进行讨论和审察,一味盲目执行,这种单纯建立在“上级”观念上的形式主义的态度是很不对的。为什么党的策略路线总是不能深入群众,就是这种形式主义在那里作怪。盲目地表面上完全无异议地执行上级的指示,这不是真正在执行上级的指示,这是反对上级指示或者对上级指示怠工的最妙方法。
 本本主义的社会科学研究法也同样是最危险的,甚至可能走上反革命的道路,中国有许多专门从书本上讨生活的从事社会科学研究的共产党员,不是一批一批地成了反革命吗?就是明显的证据。我们说马克思主义是对的,决不是因为马克思这个人是什么“先哲”,而是因为他的理论,在我们的实践中,在我们的斗争中,证明了是对的。我们的斗争需要马克思主义。我们欢迎这个理论,丝毫不存什么“先哲”一类的形式的甚至神秘的念头在里面。读过马克思主义“本本”的许多人,成了革命叛徒,那些不识字的工人常常能够很好地掌握马克思主义。马克思主义的“本本”是要学习的,但是必须同我国的实际情况相结合。我们需要“本本”,但是一定要纠正脱离实际情况的本本主义。
 怎样纠正这种本本主义?只有向实际情况作调查。
  四 离开实际调查就要产生唯心的阶级估量和唯心的工作指导,那末,它的结果,不是机会主义,便是盲动主义

 你不相信这个结论吗?事实要强迫你信。你试试离开实际调查去估量政治形势,去指导斗争工作,是不是空洞的唯心的呢?这种空洞的唯心的政治估量和工作指导,是不是要产生机会主义错误,或者盲动主义错误呢?一定要弄出错误。这并不是他在行动之前不留心计划,而是他于计划之前不留心了解社会实际情况,这是红军游击队里时常遇见的。那些李逵⑶式的官长,看见弟兄们犯事,就懵懵懂懂地乱处置一顿。结果,犯事人不服,闹出许多纠纷,领导者的威信也丧失干净,这不是红军里常见的吗?
 必须洗刷唯心精神,防止一切机会主义盲动主义错误出现,才能完成争取群众战胜敌人的任务。必须努力作实际调查,才能洗刷唯心精神。
  五 社会经济调查,是为了得到正确的阶级估量,接着定出正确的斗争策略

 为什么要作社会经济调查?我们就是这样回答。因此,作为我们社会经济调查的对象的是社会的各阶级,而不是各种片断的社会现象。近来红军第四军的同志们一般的都注意调查工作了⑷,但是很多人的调查方法是错误的。调查的结果就像挂了一篇狗肉账,像乡下人上街听了许多新奇故事,又像站在高山顶上观察人民城郭。这种调查用处不大,不能达到我们的主要目的。我们的主要目的,是要明了社会各阶级的政治经济情况。我们调查所要得到的结论,是各阶级现在的以及历史的盛衰荣辱的情况。举例来说,我们调查农民成分时,不但要知道自耕农⑸,半自耕农⑹,佃农,这些以租佃关系区别的各种农民的数目有多少,我们尤其要知道富农,中农,贫农,这些以阶级区别阶层区别的各种农民的数目有多少。我们调查商人成分,不但要知道粮食业、衣服业、药材业等行业的人数各有多少,尤其要调查小商人、中等商人、大商人各有多少。我们不仅要调查各业的情况,尤其要调查各业内部的阶级情况。我们不仅要调查各业之间的相互关系,尤其要调查各阶级之间的相互关系。我们调查工作的主要方法是解剖各种社会阶级,我们的终极目的是要明了各种阶级的相互关系,得到正确的阶级估量,然后定出我们正确的斗争策略,确定哪些阶级是革命斗争的主力,哪些阶级是我们应当争取的同盟者,哪些阶级是要打倒的。我们的目的完全在这里。
 什么是调查时要注意的社会阶级?下面那些就是:
 工业无产阶级
 手工业工人
 雇农
 贫农
 城市贫民
 游民
 手工业者
 小商人
 中农
 富农
 地主阶级
 商业资产阶级
 工业资产阶级
 这些阶级(有的是阶层)的状况,都是我们调查时要注意的。在我们暂时的工作区域中所没有的,只是工业无产阶级和工业资产阶级,其余都是经常碰见的。我们的斗争策略就是对这许多阶级阶层的策略。
 我们从前的调查还有一个极大的缺点,就是偏于农村而不注意城市,以致许多同志对城市贫民和商业资产阶级这二者的策略始终模糊。斗争的发展使我们离开山头跑向平地了⑺,我们的身子早已下山了,但是我们的思想依然还在山上。我们要了解农村,也要了解城市,否则将不能适应革命斗争的需要。
  六 中国革命斗争的胜利要靠中国同志了解中国情况

 我们的斗争目的是要从民权主义转变到社会主义。我们的任务第一步是,争取工人阶级的大多数,发动农民群众和城市贫民,打倒地主阶级,打倒帝国主义,打倒国民党政权,完成民权主义革命。由这种斗争的发展,跟着就要执行社会主义革命的任务。这些伟大的革命任务的完成不是简单容易的,它全靠无产阶级政党的斗争策略的正确和坚决。倘若无产阶级政党的斗争策略是错误的,或者是动摇犹豫的,那末,革命就非走向暂时的失败不可。须知资产阶级政党也是天天在那里讨论斗争策略的,他们的问题是怎样在工人阶级中传播改良主义影响,使工人阶级受他们的欺骗,而脱离共产党的领导,怎样争取富农去消灭贫农的暴动,怎样组织流氓去镇压革命等等。在这样日益走向尖锐的短兵相接的阶级斗争的形势之下,无产阶级要取得胜利,就完全要靠他的政党——共产党的斗争策略的正确和坚决。共产党的正确而不动摇的斗争策略,决不是少数人坐在房子里能够产生的,它是要在群众的斗争过程中才能产生的,这就是说要在实际经验中才能产生。因此,我们需要时时了解社会情况,时时进行实际调查。那些具有一成不变的保守的形式的空洞乐观的头脑的同志们,以为现在的斗争策略已经是再好没有了,党的第六次全国代表大会的“本本”⑻保障了永久的胜利,只要遵守既定办法就无往而不胜利。这些想法是完全错误的,完全不是共产党人从斗争中创造新局面的思想路线,完全是一种保守路线。这种保守路线如不根本丢掉,将会给革命造成很大损失,也会害了这些同志自己。红军中显然有一部分同志是安于现状,不求甚解,空洞乐观,提倡所谓“无产阶级就是这样”的错误思想,饱食终日,坐在机关里面打瞌睡,从不肯伸只脚到社会群众中去调查调查。对人讲话一向是那几句老生常谈,使人厌听。我们要大声疾呼,唤醒这些同志:
 速速改变保守思想!
 换取共产党人的进步的斗争思想!
 到斗争中去!
 到群众中作实际调查去!
  七 调查的技术

 (1)要开调查会作讨论式的调查
 只有这样才能近于正确,才能抽出结论。那种不开调查会,不作讨论式的调查,只凭一个人讲他的经验的方法,是容易犯错误的。那种只随便问一下子,不提出中心问题在会议席上经过辩论的方法,是不能抽出近于正确的结论的。
 (2)调查会到些什么人?
 要是能深切明了社会经济情况的人。以年龄说,老年人最好,因为他们有丰富的经验,不但懂得现状,而且明白因果。有斗争经验的青年人也要,因为他们有进步的思想,有锐利的观察。以职业说,工人也要,农民也要,商人也要,知识分子也要,有时兵士也要,流氓也要。自然,调查某个问题时,和那个问题无关的人不必在座,如调查商业时,工农学各业不必在座。
 (3)开调查会人多好还是人少好?
 看调查人的指挥能力。那种善于指挥的,可以多到十几个人或者二十几个人。人多有人多的好处,就是在做统计时(如征询贫农占农民总数的百分之几),在做结论时(如征询土地分配平均分好还是差别分好),能得到比较正确的回答。自然人多也有人多的坏处,指挥能力欠缺的人会无法使会场得到安静。究竟人多人少,要依调查人的情况决定。但是至少需要三人,不然会囿于见闻,不符合真实情况。
 (4)要定调查纲目
 纲目要事先准备,调查人按照纲目发问,会众口说。不明了的,有疑义的,提起辩论。所谓“调查纲目”,要有大纲,还要有细目,如“商业”是个大纲,“布匹”,“粮食”,“杂货”,“药材”都是细目,布匹下再分“洋布”,“土布”,“绸缎”各项细目。
 (5)要亲身出马
 凡担负指导工作的人,从乡政府主席到全国中央政府主席,从大队长到总司令,从支部书记到总书记,一定都要亲身从事社会经济的实际调查,不能单靠书面报告,因为二者是两回事。
 (6)要深入
 初次从事调查工作的人,要作一两回深入的调查工作,就是要了解一处地方(例如一个农村、一个城市),或者一个问题(例如粮食问题、货币问题)的底里。深切地了解一处地方或者一个问题了,往后调查别处地方、别个问题,便容易找到门路了。
 (7)要自己做记录
 调查不但要自己当主席,适当地指挥调查会的到会人,而且要自己做记录,把调查的结果记下来。假手于人是不行的。


 注 释
 *毛泽东的这篇文章是为了反对当时红军中的教条主义思想而写的。那时没有用“教条主义”这个名称,而叫它做“本本主义”。

 〔1〕 一九三一年四月二日毛泽东在《总政治部关于调查人口和土地状况的通知》中,对“没有调查,没有发言权”的论断作了补充和发展,提出“我们的口号是:一,不做调查没有发言权。二,不做正确的调查同样没有发言权。”
 〔2〕 见《论语·八佾》。原文是:“子入太庙,每事问。”
 〔3〕 李逵是《水浒传》中的一个英雄人物。他朴直豪爽,对农民革命事业很忠诚,但是处事鲁莽。
 〔4〕 毛泽东历来重视调查工作,把进行社会调查作为领导工作的首要任务和决定政策的基础。在毛泽东的倡导下,红军第四军的调查工作逐渐地开展起来。毛泽东还把进行社会调查规定为工作制度,红军政治部制订了详细的调查表,包括群众斗争状况、反动派状况、经济生活情况和农村各阶级占有土地的情况等项目。红军每到一个地方,都首先要弄清当地的阶级关系状况,然后再提出切合群众需要的口号。
 〔5〕 这里是指中农。
 〔6〕 见本卷《中国社会各阶级的分析》注〔10〕。
 〔7〕 这里所说的山头指江西、湖南边界的井冈山地区,平地指江西南部、福建西部地区。一九二九年一月,毛泽东、朱德率领红军第四军的主力,自井冈山出发,向江西南部、福建西部进军,开辟赣南、闽西两大革命根据地。
 〔8〕 指一九二八年六月至七月召开的中国共产党第六次全国代表大会通过的各项决议案。一九二九年初,红军第四军前敌委员会曾经把这些决议案汇集印成单行本,发给红军和地方的党组织。

--最近在处理Oracle 的问题,想起来这句话,看了原文,醍醐灌顶,太祖就是太祖。纪录之,便于以后学习。

2009年4月23日星期四

充满现代感的简洁设计,已经成为高科技公司公认的审美标准

充满现代感的简洁设计,已经成为高科技公司公认的审美标准

Oracle中如何根据进程号查sql语句?

工作需要,要查找耗费资源的sql,google了一下,自己实践了一把记录如下

首先:
找到耗费资源的oracle process pid(这里我是根据cpu利用率比较高的那个)记录一下
然后:
select * from v$process where spid='18514'; --18514 为process 号
当然
select addr from v$process where spid='18514'; --已经足够了
查到对应的addr以后

SQL> select addr from v$process where spid='18514';

ADDR
----------------
00000002DEA19B50
根据这个process addr信息
select sql_hash_value,machine,username,program from v$session where PAddr='00000002DEA19B50'; --这里 sql_hash_value已经够了

select sql_hash_value,machine,username,program from v$session where PAddr='00000002DEA19B50';
2948483066 oracle01.example.com SYS sqlplus@oracle01.example.com (TNS V1-V3) --这里sql_hash_value


下一步根据hash_value来查对应的sql, sql_text;
select * from v$sqltext where hash_value='2948483066';


(RAW) 2948483066 dd4rkf6rvwjzu 7 1

(RAW) 2948483066 dd4rkf6rvwjzu 7 0 delete from sys.aud$ where sessionid<=36000000 and rownum <= :rn --这个语句就知道是那个sql占用资源比较大的了

如果不够还可以
select * from v$sqltext where hash_value='sql_has_value'; --我就不写了,对我来说已经够用了

书上得来终觉浅,绝知此事要躬行 说的没错,知识可以学习,但是能力是锻炼出来的。

记录之,备查

2009年4月22日星期三

如何查看一个Oracle database 空间占用情况?及使用的文件情况?

----检查数据库使用的空间---
select tablespace_name,sum(bytes)/1024/1024/1024 GB
from dba_data_files group by tablespace_name
union all
select tablespace_name,sum(bytes)/1024/1024/1024 GB
from dba_temp_files group by tablespace_name order by GB;

FLOW_1 0.00982666015625
INDEX 0.01953125
CRHK_INDEX 0.09765625
APP_TEMP 0.390625
SYSAUX 1.595458984375
CRHK_DATA 3.41796875
USERS 3.43243408203125
UNDOTBS1 3.603515625
UNDOTBS2 4.8828125
TEMP 16.1943359375
SYSTEM 33.203125

我的环境,可以看到 system比较庞大,正在处理中:-)


select file_name,bytes/1024/1024 from dba_data_files
where tablespace_name like 'SYSTEM';

+U04/oradata/crprod/system.dbf 17100
+U03/oradata/crprod/system1.dbf 16900


这里以 SYSTEM为例子

主要参考http://www.eygle.com/archives/2005/11/

如何查看Oracle asm方式下的空间使用情况?

[oracle@crdb11g ~]$ export ORACLE_SID=+ASM
[oracle@crdb11g ~]$ asmcmd
ASMCMD> du
Used_MB Mirror_used_MB
13999 28015
ASMCMD>


一个知识点记录一下!

2009年4月20日星期一

甲骨文同意斥資74億美元收購Sun

甲骨文公司(Oracle Co.)宣佈達成斥資74億美元收購Sun電子計算機公司(Sun Microsystems Inc.,又名﹕昇陽電腦)的交易﹔在國際商業機器公司(IBM)收購Sun的談判破裂後﹐這兩家軟硬件公司出人意料地走到了一起。

過去數年一直在併購實力較弱軟件公司的甲骨文公司同意以每股9.50美元的價格收購Sun。不包括Sun的現金和債務﹐這筆交易對Sun的估價約為56億美元。截至去年12月28日﹐Sun擁有大約26億美元的現金和短期投資﹐以及大約7億美元的長期債務。
ref: http://chinese.wsj.com/big5/20090421/tec071242.asp?source=channel

Oracle的蛋糕越来越大了,我们可以学习的东西越来越多了。坚持学习oracle Database!

怎么查看一個表(严格来说是对象)所占用的空間大小?

select owner,segment_name,SEGMENT_TYPE,tablespace_name,sum(bytes/1024/1024) from dba_segments
group by owner,segment_name,tablespace_name
order by 5 desc

ref:http://www.itpub.net/thread-718327-1-1.html

oracle aud$ 数据的备份和导入, Oracle aud$ table exp imp

在接手的oracle 11g database中,发现aud$占用system tablespace太大了27G,现在想一步步的转移之,为此在测试环境中做了一下相关的测试工作,记录如下:


1 创建一个表
SQL> select count(*) from sys.aud$;

COUNT(*)
----------
3332

SQL> create table asmuser_aud as select * from sys.aud$;

Table created.

SQL> select count(*) from sys.aud$;

COUNT(*)
----------
3332


2 exp 出来(因为生产环境是需要条件的所以这里也是用条件测试)
exp asmuser/password file=asmuser090421.dmp tables=asmuser_aud query=\" where NTIMESTAMP\# \<\= to_date\(\'20090421\', \'yyyymmdd\'\)\"


[[oracle@crdb11g ~]$ exp asmuser/password file=asmuser090421.dmp tables=asmuser_aud query=\" where NTIMESTAMP\# \<\= to_date\(\'20090422\', \'yyyymmdd\'\)\"

Export: Release 11.1.0.6.0 - Production on Tue Apr 21 17:34:26 2009

Copyright (c) 1982, 2007, Oracle. All rights reserved.


Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Export done in AL32UTF8 character set and AL16UTF16 NCHAR character set
server uses WE8MSWIN1252 character set (possible charset conversion)

About to export specified tables via Conventional Path ...
. . exporting table ASMUSER_AUD 3332 rows exported
Export terminated successfully without warnings.
[oracle@crdb11g ~]$


3,将该表删除,然后imp进入(相当于恢复):

[oracle@crdb11g ~]$ sqlplus asmuser/password

SQL*Plus: Release 11.1.0.6.0 - Production on Tue Apr 21 17:35:32 2009

Copyright (c) 1982, 2007, Oracle. All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> drop table asmuser_aud;

Table dropped.

4,导入数据

imp system/circri file=asmuser090421.dmp fromuser=asmuser touser=asmuser tables=asmuser_aud ignore=y

imp system/cricri file=asmuser090421.dmp fromuser=asmuser touser=asmuser tables=asmuser_aud ignore=y

Import: Release 11.1.0.6.0 - Production on Tue Apr 21 17:37:49 2009

Copyright (c) 1982, 2007, Oracle. All rights reserved.


Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

Export file created by EXPORT:V11.01.00 via conventional path

Warning: the objects were exported by ASMUSER, not by you

import done in AL32UTF8 character set and AL16UTF16 NCHAR character set
import server uses WE8MSWIN1252 character set (possible charset conversion)
. importing ASMUSER's objects into ASMUSER
. . importing table "ASMUSER_AUD" 3332 rows imported
Import terminated successfully without warnings.

[oracle@crdb11g ~]$ sqlplus asmuser/password

SQL*Plus: Release 11.1.0.6.0 - Production on Tue Apr 21 17:38:19 2009

Copyright (c) 1982, 2007, Oracle. All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select count(*) from asmuser_aud;

COUNT(*)
----------
3332

SQL>

5. 测试aud$的添加,看清楚了是测试
SQL> conn / as sysdba;
Connected.
SQL> truncate table aud$;

Table truncated.

SQL>

--insert into sys.aud$ select * from asmuser.asmuser_aud;

SQL> insert into sys.aud$ select * from asmuser.asmuser_aud;

3332 rows created.

success!!!


方法是不是笨了点,但是安全第一,日后对oracle的理解进一步深入,可能会有更巧妙的办法 ,呵呵!

好文转:游刃

ref http://magazine.caijing.com.cn/2009-01-30/110057577.html
此等好文,基本上是要反复去读的,难怪人家看的太清楚,我们太愚钝了
既然没有精神主宰,中国的读书人,在道德上,自己是自己的最高裁决者

刀尔登/文

南朝颜延之写过组诗《五君咏》,歌咏竹林七贤中的五人,而把山涛和王戎排除在外。山涛和王戎都做到大官,位列三公;其中山涛圆滑,王戎贪吝,颜延之认为这二人不配与嵇阮为伍。
  作《竹林名士传》的袁宏对山涛的评语中,有一句是“游刃一世”,最是中肯。庄子写过庖丁解牛的故事,庖丁的刀行走于骨肉之际,与物无碍,貌合神离,所以刀刃不伤,逍遥自在。按庄子本意,这种“游刃”是出世之道。但若事有不获已,化而为入世之道,也是水到渠成的事。
  山涛执掌吏部时,每次用人,一定要先密启,窥探皇帝的心意,然后拣皇帝中意的人选公奏。别人这么做,至少得落个“巧宦”的坏名声,而时人对山涛的评价,都说他识量高迈,洒脱旷远。又有一个县令遍贿朝臣,给山涛送了一百斤丝。山涛并不拒绝,因为那样做不够和光同尘。山涛收下礼物,挂在梁下。后来事发,朝廷调查到山涛时,丝已被虫子咬了,而尘封如故。山涛既未得罪大家,还落了个清廉的名声。嵇康说山涛“外不殊俗而内不失正”,就是这种本领了。
  七贤对《庄子》都有心得,最得心法的,看来还是山涛。庄子早讲过,当年桀杀关龙逢,纣杀比干,就是因为这两个人名气太大——哪怕是闭门在家修行,也可能威胁到政权对人心的影响力,特别是当这一政权已宣称自己是道德领袖。对这种盛名之累,嵇阮之辈自然心里明白,也时常讨论;但能言之不一定能知之,能知之不一定能行之,能行之,也不一定能像山涛那样做得好。
  嵇康之死,当时是大事件,太学生好几千人抗议,终于无效。嵇康是曹家的女婿,司马氏要代魏,先得剪除曹氏的羽翼。嵇康早已知道自己身处险地,所以作风上,诗文中,常表白自己无意于政治。那时政情险恶,名士少有全者。嵇康已尽量小心了。他学阮籍口不臧否人物,虽然做不到,但王戎说与他相知20年,没见过他喜怒形于色,便有些夸张,嵇康的自制,也可见一斑了。山涛投靠司马氏,知道些风声,荐嵇康出来做官,有帮他免祸的意思,不料竟速其死。嵇康何尝不清楚他的好意,但如《与山巨源绝交书》里所说,“性有所不堪,真不可强”。嵇康的绝交书,他明骂山涛,暗里为他开脱,算是回报,关于自己,一再表示只是“性情问题”。他讲了“七不堪二不可”,共是九患;然而避重就轻,在司马氏看来,更显得居心叵测,因为他既不肯投靠,立场是明明白白的,仅一封信又怎么可以蒙混过关?
  嵇康和山涛之间,绝不如信中所说的“偶与足下相知”,而是相知颇深。嵇康对山涛又是敬重,又对他的“无所不堪”有些牢骚。他比山涛和阮籍都小了十几岁,在三人中是小老弟,发发脾气,山涛不会见怪。嵇康顾影之时,山涛定是很难受的;而等到山阳旧友或老或死,他一个人徘徊垆下时,又不知如何叹息。嵇康临死时说,有山涛在,儿子不孤矣。后来山涛果然照顾嵇绍,并荐他做了官。山涛就是这样面面俱到,是谓“达人”。
  山涛,嵇、阮,钟会,也算得上是“知识分子”的三种类型(当然并不只有这三种)。就山涛而言,如何判断他是吏隐,还是巧宦?内直外曲,如何证明?既然与时俯仰,又何以见得心存事外?人心隔肚皮,这些问题,本没什么一定的答案,而且事情的关键,不在于这些人怎么做,而在于其不得不做处,不论他怎么做。王戎说山涛如“浑金朴玉”,尽管常识告诉我们,浑金非金,朴玉非玉,我们还是宁愿相信王戎的意见。全身远祸,是七贤的共识,自己做不到的,未必不情愿别人做到。我们看嵇康的《家诫》,叮嘱细密,可推而知道他并不经常率性而行,而是一直舍小图大,对世俗多做让步,想保住自己的大志;至于不免于刑戮,那是没办法的事,因为他只能做到这个地步了。嵇康希望儿子做一个“保守的好人”,坚守志向的程度,要与全身远祸的能力相配。和他一起的,阮籍也不愿意儿子像自己一样放达。
  颜延之则写过一篇《庭诰》,更加完备,所说的不过是游刃之道,而他自己本和七贤大致是一路的人。到后世,庄子的哲学,渐渐被儒士处理为与时舒卷的理论,其尤下者,用为一切的辩词,便是昧利苟得,良心上也没什么过不去。因为他令自己相信自己另有襟期,竟能不受现实事务的牵制。既然没有精神主宰,中国的读书人,在道德上,自己是自己的最高裁决者。这种裁决,当然要比照他所信奉的价值观,但立法在人,执法在己,中间可以做手脚处,比比皆是了。■
  刀尔登:诗人

2009年4月19日星期日

wtf:cipher block chaining

密码段链接(cipher block chaining,CBC)是一种操作分段密码的方式(将一段bit序列加密成一个单独的单元或分成一个密钥提供给整个部分)。密码段链接使用一定长度初始化向量(IV)。它的一个主要特点是完全依靠前面的密码文段来译码后面的内容。因此,整个过程的正确性决定于前面的部分。各部分的顺序必须保持正确。

  在密码段链接中,每个明文段先用前面密文进行异或运算,然后加密。如果密文段顺序不发生改变,使用相同的密钥和初始化向量时,只有同样的密文段可以起作用。因为异或过程隐藏了原文,密码段链接要优于电子密码书模式。

  理论上,两条信息使用相同的密钥加密会产生不同的初始化向量。所以初始化向量不需要保密,这会极大方便某些场合下的应用。
ref: http://www.searchsecurity.com.cn/word_983.htm

Cipher-block chaining (CBC)

CBC mode of operation was invented by IBM in 1976. [1] In the cipher-block chaining (CBC) mode, each block of plaintext is XORed with the previous ciphertext block before being encrypted. This way, each ciphertext block is dependent on all plaintext blocks processed up to that point. Also, to make each message unique, an initialization vector must be used in the first block.

ref: http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
这个图看的很清晰

database security

ref: cissp all in one 4th

The two main database security issues this section addresses are aggregation and inference.

aggregation--集合

inference--推理


Content-dependent access control is based on the sensitivity of the data. The more sensitive the data, the smaller the subset of individuals who can gain access to the data.


Context-dependent access control means that the software “understands” what actions should be allowed based upon the state and sequence of the request. It means the software must keep track of previous access attempts by the user and understand what sequences of access steps are allowed.


Common attempts to prevent inference attacks are cell suppression, partitioning the database, and noise and perturbation. 


Cell suppression is a technique used to hide specific cells that contain information that could be used in inference attacks.


Partitioning a database involves dividing the database into different parts, which makes it much harder for an unauthorized individual to find connecting pieces of data that can be brought together and other information that can be deduced or uncovered. 


Noise and perturbation is a technique of inserting bogus information虚假信息 in the hopes of misdirecting

an attacker or confusing the matter enough that the actual attack will not be fruitful.

WTF:正确的做事, 做正确的事,把事做正确

正确的做事, 做正确的事,把事做正确 谁能说的清楚!?

看到一个有意思的
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://52752.blog.51cto.com/42752/85489

Due Care and Due Diligence
Due care and due diligence are terms used throughout this book. Due diligence is the act of investigating and understanding the risks the company faces.

A company practices due care by developing and implementing security policies, procedures,  and standards. 

Due care shows that a company has taken responsibility for the activities that take place within the corporation and has taken the necessary steps to help protect the company, its resources, and employees from possible threats.

So, due diligence is understanding the current threats and risks, and due care is implementing countermeasures to provide protection from those threats.

If a company does not practice due care and due diligence pertaining to the security of its assets, it can be legally charged with negligence and held accountable for any ramifications of that negligence.

The following are some tricks to remember the difference between these two concepts. 

Due Diligence = Do Detect. 
Due diligence maps with Do Detect. It is the steps you take to identify the risks using best practices, published standards, and other tools. 

Due Care = Do Correct. 
This is what you do to correct the threat identified or to minimize it to an acceptable level of risk.

1、Due care 正确的去做某种事情 (Due care=Do Correct)
2、Due diligence 做正确的事情(Due diligence=Do Detect)

A Fingerprint Identification Algorithm Based on Ridge-Sampling

基于脊线采样的指纹识别算法
A Fingerprint Identification Algorithm Based on Ridge-Sampling

2009年4月18日星期六

访问控制的跟踪审计和监控

ref:http://www.cisps.org/knowledge/access_control/ac_audit.htm
对访问控制系统进行审计跟踪和监控是保证有效实施访问控制的重要手段,也是访问控制系统管理的重要内容。访问控制的审计跟踪和监控包括以下内容:

审计跟踪概述
审计跟踪的目的
审计跟踪和日志的类型
审计跟踪的实施
监控、审计跟踪和保证的关系
审计的方法和工具
监控的方法和工具
报警和纠错

1. 审计跟踪概述

职能(accountability)问责是1.记录系统活动并可以2.跟踪到对这些活动应负责任人员的能力。审计跟踪(audit trail)是系统活动的流水记录。该记录按事件从始至终的途径,顺序检查、审查和检验每个事件的环境及活动。审计跟踪通过书面方式提供应负责任人员的活动证据以支持职能的实现。审计跟踪记录系统活动和用户活动。系统活动包括操作系统和应用程序进程的活动;用户活动包括用户在操作系统中和应用程序中的活动。通过借助适当的工具和规程,审计跟踪可以发现违反安全策略的活动、影响运行效率的问题以及程序中的错误。

审计跟踪可以做为对正常系统操作的一种支持,也可以做为一种保证策略前两者兼而有之。做为保证策略,所维护的审计跟踪只在需要时使用,比如系统中断。做为对操作的支持,审计跟踪用于帮助系统管理员确保系统及其资源免遭黑客、内部使用者或技术故障的伤害。

在很大程度上,信息的完整性和机密性取决于使用人的职能(保密性是限制什么人可以看,完整性是限制什么人可以改)。也就是说,人们必须为他们的行为负责。这是一种探测和威慑机制。首先应该制定一系列行为标准,使用人必须认可这些行为标准;还要由较高级别的管理者对违反标准的人进行处罚。让用户知道自己的行为被监控也可以阻止潜在的破坏者对安全的侵害。用户职能可以通过策略、授权方案、识别和鉴别机制、访问控制、审计跟踪和审计实现。


2. 审计跟踪的目的

审计跟踪提供了实现多种安全相关目标的一种方法,这些目标包括个人职能、事件重建、入侵探测和故障分析。

个人职能(individual accountability)
审计跟踪是管理人员用来维护个人职能的技术手段。通过告知用户应该为自己的行为负责,通过审计跟踪记录用户的活动,管理人员可以改善用户的行为方式如果用户知道他们的行为被记录在审计日志中,他们就不太会违反安全策略和绕过安全控制措施。

例如在访问控制中,审计跟踪可以用于鉴别对数据的不恰当修改(如在数据库中引入一条错误记录)和提供与之相关的信息。审计跟踪可以记录改动前和改动后的记录,以确定所作的实际改动。这可以帮助管理层确定错误到底是由用户、操作系统、应用软件还是由其它因素造成的。

逻辑访问控制是用于限制对系统资源的访问,允许用户访问特定资源意味着用户通常要通过这种访问完成他们的工作。当然,被授权的访问也会被滥用,这种情况下审计跟踪就能发挥作用。当无法阻止用户通过其合法身份访问资源时,审计跟踪就可以用于检查他们的活动。比方说人事部的某员工需要访问他们所负责的员工的人事记录,通过审计跟踪发现该员工对人事记录的超常打印,这也许意味着盗卖人事数据。再比方说某工程师需要通过使用计算机来设计新产品,通过审计跟踪发现在该工程师在设计结束前通过调制解调器进行了可疑的对外通信,这可以用来协助调查公司的专利数据被非法泄漏给其它公司的事件。

事件重建(reconstruction of events)
在故障发生后,审计跟踪可以用于重建事件。通过审查系统活动的审计跟踪可以比较容易地评估故障损失,确定故障发生的时间、原因和过程。通过对审计跟踪的分析通常可以辨别故障是操作引起的还是系统引起的。例如,当系统失败或文件的完整性受到质疑时,通过对审计跟踪的分析就可以重建系统、用户或应用程序的完整的操作步骤。在对诸如系统崩溃这样的故障的发生条件有清晰认识的前提下,就能够避免未来发生此类系统中断的情况。而且,在发生技术故障(如数据文件损坏)时,审计跟踪可以协助进行恢复(通过更改记录可以重建文件)。

入侵探测(intrusion detection)
如果用审计跟踪记录适当的信息,也可以用来协助入侵探测工作。如果在审计记录产生时就进行检查(通过使用某种警告标志或提示),就可以进行实时的入侵探测,不过事后检查(定时检查审计记录)也是可行的。

实时入侵探测主要用于探测外部对系统的非法访问。也可以用于探测系统性能指标的变化以发现病毒或蠕虫攻击。但是实时审计可能会降低系统性能。

事后鉴别可以标示出非法访问的企图(或事实)。这样就可以提醒人们对损失进行评估或重新检查受攻击的控制方式。

故障分析(problem analysis)
在线的审计跟踪还可以用于鉴别入侵以外的故障。这常被称为实时审计或监控。如果操作系统或应用系统对公司的业务非常重要,可以使用实时审计对这些进程进行监控。



3. 审计跟踪和日志的类型

系统可以同时维护多个审计跟踪。有两种典型的审计记录(1)所有键盘敲击的记录,通常称为击键监控,和(2)面向事件的审计日志。这些日志通常包括描述系统事件、应用事件或用户事件的记录。

审计跟踪应该包括足够的信息,以确定事件的内容和引起事件的因素。通常,事件记录应该列有事件发生的时间、和事件有关的用户识别码、启动事件的程序或命令以及事件的结果。日期和时间戳可以帮助确定用户到底是假冒的还是真实的。

击键监控(keystroke monitoring)
击键监控用于对计算机交互过程中的用户键盘输入和计算机的反应数据进行检查或记录。击键监控通常被认为是审计跟踪的一种特殊应用。击键监控的例子包括检查用户敲入的字符,阅读用户的电子邮件以及检查用户敲入的其它信息。

有些系统维护功能会记录用户的击键。如果这些记录保存与之相关的用户鉴别码就可以协助管理员确定击键人从而达到击键监控的目的。击键监控致力于保护系统和数据免遭非法入侵和合法用户的滥用。入侵者的击键记录可以协助管理员评估和修复入侵造成的损失。

面向事件的审计日志(event-oriented audit logs)
系统审计日志一般用于监控和微调系统性能。应用审计跟踪可以用于辨别应用程序中的错误和对安全策略的违背。用户审计记录通常用于将用户的行为和职能联系起来。分析用户审计记录可以发现各种不安全的事件,如安装木马或获取非法权限。

系统本身都会有诸如文件和系统访问的约束性的策略。对用于实施这些策略的系统配置文件更改的监控非常重要。如果特定的访问(如安全管理员的访问)用于修改配置文件,那么系统应该在这种访问发生时产生相应的审计记录。

有时比系统审计跟踪更详细的记录也是需要的。应用审计跟踪就可以提供更详细的记录。如果应用是很关键的,那么就不但要记录应用的发起者,还要记录每一个用户的具体细节。例如电子邮件应用,可能要记录发件人、收件人和信息长度。再比如数据库应用,应该记录数据库的访问者以及其具体读取(或更改、删除)哪个表的哪个行或列,而不是仅仅记录数据库程序的执行。

用户审计跟踪通过记录用户启动的事件(如访问文件、记录和字段;使用调制解调器)来监控和记录系统或应用中该用户的活动。

适应性是审计跟踪的关键特性。理想(从安全角度看)的情况是系统管理员能够监控所有的系统和用户活动,又能有选择地记录系统和应用的特定功能。至于日志记录的数量和需要审查的数量取决于相关应用或数据敏感性,应该由职能部门经理或应用所有者在系统管理员和计算机安全管理人的指导下根据日志的性价比确定。通常审计日志包含隐私内容。用户应该熟悉使用环境下和隐私相关的现行法律、法规和政策。

(A)系统级审计跟踪
系统级审计要求审计跟踪至少要能够记录登录(成功和失败)、登录识别号、每次登录尝试的日期和时间、每次退出的日期和时间、所使用的设备、登录后运行的内容(如用户启动应用的尝试,无论成功或失败)。典型的系统级日志还包括和安全无关的信息,如系统操作、费用记帐和网络性能。

系统级审计跟踪应该能够鉴别登录的成功和失败,在系统不能限制失败登录的尝试次数时尤其需要这样。遗憾的是,有些系统级审计跟踪无法探测登录尝试,所以无法进行记录以便日后检查。这样的审计跟踪只能监控和记录成功的登录及其登录后的活动。记录失败的登录尝试对于有效的入侵探测是必须的。

(B)应用级审计跟踪
系统级审计跟踪可能无法跟踪和记录应用中的事件,也可能无法提供应用和数据拥有者需要的足够的细节信息。通常,应用级审计跟踪监控和记录诸如打开和关闭数据文件,读取、编辑和删除记录或字段的特定操作以及打印报告之类的用户活动。有些应用会对数据的可用性、机密性和完整性比较敏感,这些应用的审计跟踪应该记录数据修改前后的数据快照。

(C)用户审计跟踪
用户审计跟踪通常记录(1)用户直接启动的所有命令,(2)所有的鉴别和认证尝试,和(3)所访问的文件和资源。

如果连同命令的选项和参数一同记录将会更有用。因为知道用户想要删除日志文件(以掩盖非法访问)比仅仅知道用户使用了删除命令更有价值。

4. 审计跟踪的实施

为了确保审计跟踪数据的可用性和正确性,审计跟踪数据需要受到保护,因为不正确的数据也是没用的。而且,如果不对日志数据进行及时审查,规划和实施得再好的审计跟踪也会失去价值。审计跟踪应该根据需要(经常由安全事件触发)定期审查、自动实时审查、或两者兼而有之。系统管理人和系统管理员应该根据计算机安全管理的要求确定需要维护多长时间的审计跟踪数据,其中包括系统内保存的和归档保存的数据。

与实施有关的问题包括(1)保护审计跟踪数据,(2)审查审计跟踪数据,和(3)用于审计跟踪分析的工具。

(A)保护审计跟踪数据
访问在线审计日志必须受到严格限制。计算机安全管理人员和系统管理员或职能部门经理出于检查的目的可以访问,但是维护逻辑访问功能的安全和管理人员没有必要访问审计日志。

防止非法修改以确保审计跟踪数据的完整性尤其重要。使用数字签名是实现这一目标的一种途径。另一类方法是使用只读设备。入侵者会试图修改审计跟踪记录以掩盖自己的踪迹是审计跟踪文件需要保护的原因之一。使用强访问控制是保护审计跟踪记录免受非法访问的有效措施。当牵涉到法律问题时,审计跟踪信息的完整性尤为重要(这可能需要每天打印和签署日志)。此类法律问题应该直接咨询相关法律顾问。

审计跟踪信息的机密性也需要受到保护,例如审计跟踪所记录的用户信息可能包含诸如交易记录等不宜披露的个人信息。强访问控制和加密在保护机密性方面非常有效。

(B)审查审计跟踪数据
审计跟踪的审查和分析可以分为在事后检查、定期检查或实时检查。审查人员应该知道如何发现异常活动。他们应该知道怎么算是正常活动。如果可以通过用户识别码、终端识别码、应用程序名、日期时间或其它参数组来检索审计跟踪记录并生成所需的报告,那么审计跟踪检查就会比较容易。

事后检查
当系统或应用软件发生了故障、用户违反了操作规范、或发现了系统或用户的异常问题时,系统级或应用级的管理员就会检查审计跟踪。应用或数据的拥有者在检查审计跟踪数据后会生成一个独立的报告以评估他们的资源是否遭受损失。

定期检查
应用的拥有者、数据的拥有者、系统管理员、数据处理管理员和计算机安全管理员应该根据非法活动的严重程度确定检查审计跟踪的频率。

实时检查
通常,审计跟踪分析是在批处理模式下定时执行的。审计记录会定时归档用于以后的分析。审计分析工具可用于实时和准实时模式下。此类入侵探测工具基于审计数据精选、攻击特征识别、和差异分析技术。由于数据量过大,所以在大型多用户系统中使用人工方式对审计数据进行实时检查是不切实际的。但是,对于特定用户和应用的审计记录进行实时检查还是可能的。这类似于击键监控,不过这可能会涉及到法律是否允许的问题。

(C)审计跟踪工具
许多工具是用于从大量粗糙原始的审计数据中精选出有用信息。尤其是在大系统中,审计跟踪软件产生的数据文件非常庞大,用人工方式分析非常困难。使用自动化工具就是从审计信息中将无用的信息剔除。其它工具还有差异探测工具和攻击特征探测工具。

审计精选工具(audit reduction tools)
此类工具用于从大量的数据中精选出有用的信息以协助人工检查。在安全检查前,此类工具可以剔除大量对安全影响不大的信息。这类工具通常可以剔除由特定类型事件产生的记录,例如由夜间备份产生的记录将被剔除。

趋势/差别探测工具(trends/variance-detection tools)
此类工具用于发现系统或用户的异常活动。可以建立较复杂的处理机制以监控系统使用趋势和探测各种异常活动。例如,如果用户通常在上午9点登录,但却有一天在凌晨4点半登录,这可能是一件值得调查的安全事件。

攻击特征探测工具(attack signature-detection tools)
此类工具用于查找攻击特征,通常一系列特定的事件表明有可能发生了非法访问尝试。一个简单的例子是反复进行失败的登录尝试。


5. 监控、审计跟踪和保证的关系

对设计和实施的保证关系到系统中建立的安全特性的质量。对操作的保证关系到系统的技术部件是否可以被绕过或者含有缺陷以至于要求有相应的规程予以辅助。

在系统生存周期的操作期安全性有被降级的趋势。系统用户和操作员会发现新的方法可以有意或无意地绕过或破坏安全特性(在预期能够得到更多操作功能的情况下尤其如此)。职能用户和系统管理员通常认为他们的系统不会发生安全入侵,所以也就不关心安全问题。严格的安全规程经常不被遵守,而且规程经常变得过时,系统管理中的错误也常常发生。

有两种保证操作的基本方法:(1)系统审计,是一次性或定期的对安全进行的评估。审计的范围可以非常广泛:它可以是出于重新鉴定的目的而对整个系统的检查,也可以是对某一反常事件的调查。如对长达数个月的历史审计跟踪记录进行检查通常可以称为审计。

(2)监控,是对系统、系统用户或环境进行检查的持续性的活动。通常,越是“实时”的活动越会归于“监控”这一类别。每日或每周对审计跟踪(有关非法登录尝试)的检查通常可以称为监控。

好文转: 访问控制的基本概念:访问控制的定义

ref: http://www.cisps.org/knowledge/access_control/ac_basic_concepts_1.htm

1. 访问控制的定义

访问使信息主体和对象流动的一种交互方式

主体是指主动的实体,该实体造成了信息的流动和系统状态的改变,主体通常包括人、进程和设备。

对象是指包含或接受信息的被动实体。对对象的访问意味着对其中所包含信息的访问。对象通常包括记录、块、页、段、文件、目录、目录树和程序以及位、字节、字、字段、处理器、显示器、键盘、时钟、打印机和网络节点。

访问控制决定了谁能够访问系统能访问系统的何种资源以及如何使用这些资源。适当的访问控制能够阻止未经允许的用户有意或无意地获取数据。访问控制的手段包括

用户识别代码、

口令、

登录控制、

资源授权(例如用户配置文件、资源配置文件和控制列表)、

授权核查、

日志和审计。

2. 访问控制和内部控制的关系

控制(control)是为了达成既定的目的和目标而采取的管理行动(控制是管理行为)。管理通过计划、组织和指导一系列有效的活动为目的和目标的达成提供保障。这样,控制就成为适当的管理计划、组织和指导的必然结果。

内部控制(internal control)是为了在组织内保障以下目标的实现而采取的方法:

(1)信息的可靠性和完整性,

(2)政策、计划、规程、法律、法规和合同的执行,

(3)资产的保护,

(4)资源使用的经济性和有效性,

(5)业务及计划既定目的和目标的达成。

访问控制(access control)计算机信息系统相关(但是并不仅限于computer system)的内容包括

(1)限制主体对客体的访问,

(2)限制主体和其它主体通信或使用计算机系统或网络中的功能或服务的权力或能力。比如,人是主体,文件是客体。

“保护资产”是内部控制和访问控制的共同目标。

例如,内部控制涉及所有的资产,包括有形的和无形的资产,包括计算机相关的资产也包括和计算机无关的资产。访问控制涉及无形(知识)资产如程序、数据、程序库以及有形资产如硬件和放置计算机的房产。访问控制是整体安全控制的一部分。

3. 访问控制的类型

安全控制包括六种类型的控制手段如防御型探测型矫正型以及管理型技术型操作型控制。

防御型控制用于阻止不良事件的发生。

侦测型控制用于探测已经发生的不良事件。

矫正型控制用于矫正已经发生的不良事件。

管理型控制(行政)用于管理系统的开发、维护和使用,包括针对系统的策略、规程、行为规范、个人的角色和义务、个人职能和人事安全决策。

技术型控制是用于为信息技术系统和应用提供自动保护的硬件和软件控制手段。技术型控制应用于技术系统和应用中。

操作型控制是用于保护操作系统和应用的日常规程和机制。它们主要涉及在人们(相对于系统)使用和操作中使用的安全方法。操作型控制影响到系统和应用的环境。

另外三种和控制有关的概念是补偿型控制综合型控制规避型控制

补偿型控制在一个领域的控制能力较弱而在另一个领域控制能力较强,反之亦然。综合型控制使用两个或更多的控制来加强对功能、程序或操作的控制效果。这里,两个控制协同工作能够强化整个控制环境。

规避型控制原理就是对资源进行分割管理。资源是系统或系统网络中需要管理的实体。资源可以包括物理实体如打印机、盘库、路由器和逻辑实体如用户和用户组。规避型控制的目的是将两个实体彼此分开以保证实体的安全和可靠。规避型控制的例子有

(1)将资产和威胁分隔开来以规避潜在的风险。

(2)计算机设备和无线电接收设备分隔开来以避免扩散的电磁信号被外界截获。

(3)生产系统和测试系统分隔开来以避免对程序代码的污染和数据的破坏。

(4)将系统开发过程和数据输入过程分隔开来。

(5)将系统组件相互分隔开来。

4. 访问控制的手段

以下分类列出部分访问控制手段:

  • 物理类控制手段
    • 防御型手段
      • 文书备份
      • 围墙和栅栏
      • 保安
      • 证件识别系统
      • 加锁的门
      • 双供电系统
      • 生物识别型门禁系统
      • 工作场所的选择
      • 灭火系统
    • 探测型手段
      • 移动监测探头
      • 烟感和温感探头
      • 闭路监控
      • 传感和报警系统
  • 管理类控制手段
    • 防御型手段
      • 安全知识培训
      • 职务分离
      • 职员雇用手续
      • 职员离职手续
      • 监督管理
      • 灾难恢复和应急计划
      • 计算机使用的登记
    • 探测型手段
      • 安全评估和审计
      • 性能评估
      • 强制假期
      • 背景调查
      • 职务轮换
  • 技术类控制手段
    • 防御型手段
      • 访问控制软件
      • 防病毒软件
      • 库代码控制系统
      • 口令
      • 智能卡
      • 加密
      • 拨号访问控制和回叫系统
    • 探测型手段
      • 日志审计
      • 入侵探测系

      5. 访问控制模型

      访问控制模型是用于规定如何作出访问决定的模型传统的访问控制模型包括一组由操作规则定义的基本操作状态典型的状态包含一组主体(S)、一组对象(O)、一组访问权(A[S,O])包括读、写、执行和拥有

      访问控制模型涵盖对象、主体和操作,通过对访问者的控制达到保护重要资源的目的。对象包括终端、文本和文件,系统用户和程序被定义为主体。操作是主体和对象的交互。访问控制模型除了提供机密性和完整性外,还提供记帐性(accountability 问责)。记帐性是通过审计访问记录实现的,访问记录包括主体访问了什么对象和进行了什么操作。下面介绍三种访问控制模型。

      任意访问控制
      任意访问控制(discretionary access control  自主访问控制)是一种允许主体对访问控制施加特定限制的访问控制类型。在很多机构中,用户在没有系统管理员介入的情况下,需要具有设定其他用户访问其所控制资源的能力。这使得控制具有任意性。在这种环境下,用户对信息的访问能力是动态的,在短期内会有快速的变化。任意访问控制经常通过访问控制列表实现访问控制列表难于集中进行访问控制和访问权力的管理。任意访问控制包括身份型(identity-based)访问控制和用户指定型(user-directed)访问控制。

      强制访问控制
      强制访问控制(mandatory access control)是一种不允许主体干涉的访问控制类型。它是基于安全标识和信息分级等信息敏感性的访问控制。强制访问控制包括规则型(rule-based)访问控制和管理指定型(administratively-based 行政)访问控制。

      --可以简单的理解为rule-based的访问控制基本上是MAC的

      非任意访问控制
      非任意访问控制(non-discretionary access control)是为满足安全策略和目标而采用的一系列集中管理的控制手段。访问控制是由访问者在机构中的角色决定的。角色包括职务特征、任务、责任、义务和资格。访问者在系统中的角色有管理者赋予或吊销。当员工离开机构时,其在系统中的所有角色都应该吊销。大的公司通常会有频繁的人员流动,基于角色的安全策略是唯一合理的选择。晶格型访问(lattice-based)控制将主体和对象排列成一组元素对,每个元素对的访问权都有上限和下限。

      保证系统各部分协调工作对访问控制来说是很重要的。至少必须考虑三种基本的访问控制类型:物理的、操作系统的和应用的。通常,应用层面的访问控制是随应用的不同而各不一样的。但是,为了保证应用层面的访问控制的有效性,必须提供有效的操作系统层面访问控制。否则,就有可能绕过应用控制直接访问应用资源。而操作系统和应用系统都需要物理访问控制的保护。



6. 访问控制管理

访问控制管理涉及访问控制在系统中的部署、测试、监控以及对用户访问的终止。虽然不一定需要对每一个用户设定具体的访问权限,但是访问控制管理依然需要大量复杂和艰巨的工作。访问控制决定需要考虑机构的策略、员工的职务描述、信息的敏感性、用户的职务需求(’need-to-know’)等因素。

有三种基本的访问管理模式:集中式、分布式和混合式。每种管理模式各有优缺点。应该根据机构的实际情况选择合适的管理模式。

集中式管理
集中管理就是由一个管理者设置访问控制。当用户对信息的需求发生变化时,只能由这个管理者改变用户的访问权限。由于只有极少数人有更改访问权限的权力,所以这种控制是比较严格的。每个用户的账号都可以被集中监控,当用户离开机构时,其所有的访问权限可以被很容易地终止。因为管理者较少,所以整个过程和执行标准的一致性就比较容易达到。但是,当需要快速而大量修改访问权限时,管理者的工作负担和压力就会很大。

分布式管理
分布式管理就是把访问的控制权交给了文件的拥有者或创建者,通常是职能部门的管理者(functional managers)。这就等于把控制权交给了对信息负有直接责任、对信息的使用最熟悉、最有资格判断谁需要信息的管理者的手中。但是这也同时造成在执行访问控制的过程和标准上的不一致性。在任一时刻,很难确定整个系统所有的用户的访问控制情况。不同管理者在实施访问控制时的差异会造成控制的相互冲突以致无法满足整个机构的需求。同时也有可能造成在员工调动和离职时访问权不能有效地清除。

混合式管理
混合式管理是集中式管理和分布式管理的结合。它的特点是由集中式管理负责整个机构中基本的访问控制,而由职能管理者就其所负责的资源对用户进行具体的访问控制。混合式管理的主要缺点是难以划分哪些访问控制应集中控制,哪些应在本地控制。


增广昔时贤文二

176数口之家,可以无饥矣。
177常将有日思无日,莫把无时当有时。
178时来风送滕王阁,运去雷轰荐福碑。
179入门休问荣枯事,观看容颜便得知。
180官清书吏瘦,神灵庙祝肥。
181息却雷霆之怒,罢却虎狼之威。
182饶人算之本,输人算之机。
183好言难得,恶语易施。
184一言既出,驷马难追。
185道吾好者是吾贼,道吾恶者是吾师。
186路逢险处须当避,不是才人莫献诗。
187三人同行,必有我师焉。
188择其善者而从之,其不善者而改之。
189少年不努力,老大徒伤悲。
190人有善愿,天必从之。
191莫饮卯时酒,昏昏醉到酉。
192莫骂酉时妻,一夜受孤凄。
193种瓜得瓜,种豆得豆。
194天网恢恢,疏而不漏。
195见官莫向前,做客莫在后。
196宁添一斗,莫添一口。
197螳螂捕蝉,岂知黄雀在后。
198不求金玉重重贵,但愿儿孙个个贤。
199一日夫妻,百世姻缘。
200百世修来同船渡,千世修来共枕眠。
201杀人一万,自损三千。
202伤人一语,利如刀割。
203枯木逢春犹再发,人无两度少年时。
204未晚先投宿,鸡鸣早看天。
205将相额头堪走马,公侯肚里好撑船。
206富人思来年,贫人思眼前。
207世上若要人情好,赊去物件莫取钱。
208死生有命,富贵在天。
209击石原有火,不击乃无烟。
210人学始知道,不学亦徒然。
211莫笑他人老,终须还到我。
212但能依本分,终身无烦恼。
213君子爱财,取之有道。
214贞妇爱色,纳之以礼。
215善有善报,恶有恶报。
216不是不报,日子未到。
217人而无信,不知其可也。
218一人道好,千人传实。
219凡事要好,须问三老。
220若争小利,便失大道。
221年年防饥,夜夜防盗。
222学者如禾如稻,不学者如蒿如草。
223遇饮酒时须饮酒,得高歌处且高歌。
224因风吹火,用力不多。
225不因渔父引,怎得见波涛。
226无求到处人情好,不饮任他酒价高。
227知事少时烦恼少,识人多处是非多。
228入山不怕伤人虎,只怕人情两面刀。
229强中自有强中手,恶人自有恶人磨。
230会使不在家豪富,风流不用着衣多。
231光阴似箭,日月如梭。
232天时不如地利,地利不如人和。
233黄金未为贵,安乐值钱多。
234世上万般皆下品,思量惟有读书高。
235世间好语佛说尽,天下名山僧占多。
236为善最乐,为恶难逃。
237羊有跪乳之恩,鸦有反哺之义。
238你急他未急,人闲心不闲。
239隐恶扬善,执其两端。
240妻贤夫祸少,子孝父心宽。
241既坠釜甑,反顾无益。
242反复之水,收之实难。
243人生知足何时足,人老偷闲且自闲。
244但有绿杨堪系马,处处有路透长安。
245见者易,学者难。
246莫将容易得,便作等闲看。
247用心计较般般错,退步思量事事难。
248道路各别,养家一般。
249从俭入奢易,从奢入俭难。
250知音说与知音听,不是知音莫与谈。
251点石化成金,人心犹未足。
252饱了肚,卖了屋。
253他人睨睨,不涉你目。
254他人碌碌,不涉你足。
255谁人不爱子孙贤,谁人不爱千钟粟,奈五行不是这般题目。
256莫把真心空计较,儿孙自有儿孙福。
257与人不和,劝人养鹅。
258与人不睦,劝人架屋。
259但行好事,莫问前程。
260河狭水急,人急计生。
261明知山有虎,莫向虎山行。
262路不行不到,事不为不成。
263人不劝不善,钟不打不鸣。
264无钱方断酒,临老始看经。
265万事劝人休瞒眛,举头三尺有神明。
266但存方寸地,留与子孙耕。
267灭却心头火,剔起佛前灯。
268惺惺常不足,蒙蒙作公卿。
269点塔七层,不如暗处一灯。
270众星朗朗,不如孤月独明。
271兄弟相害,不如陌生。
272合理可作,小利莫争。
273牡丹花好空入目,枣花虽小结实成。
274欺老莫欺少,欺人心不明。
275随分耕锄收地利,他时饱暖谢苍天。
276得忍且忍得耐且耐,不忍不耐小事成大。
277相论逞英雄,家计渐渐退。
278贤妇令夫贵,恶妇令夫败。
279一人有庆,兆民咸赖。
280人老心未老,人穷志不穷。
281人无千日好,花无百日红。
282杀人可恕,情理难容。
283乍富不知新受用,乍贫难改旧家风。
284座上客常满,杯中酒不空。
285屋漏偏逢连夜雨,行船更遇打头风。
286笋因落箨方成竹,鱼为奔波始化龙。
287记得少年骑竹马,看看又是白头翁。
288礼义生于富足,盗贼出于贫穷。
289天上众星皆拱北,世间无水不朝东。
290君子安贫,达人知命。
291忠言逆耳利于行,良药苦口利于病。
292顺天者存,逆天者亡。
293人为财死,鸟为食亡。
294夫妻相和合,琴瑟与笙簧。
295有儿贫不久,无子富不长。
296善必寿考,恶必早亡。
297爽口食多偏作病,快心事过恐生殃。
298富贵定要安本分,贫穷不必枉思量。
299画水无风空作浪,绣花虽好不闻香。
300贪他一斗米,失却半年粮。
301争他一脚豚,反失一腿羊。
302龙归晚洞云犹湿,麝过春山草木香。
303平生只会量人短,何不回头把自量。
304见善如不及,见恶如探汤。
305人穷志短,马瘦毛长。
306自家心里急,他人未知忙。
307病有高人说药方,贫无达士将金赠。
308触来莫与说,事过心清凉。
309秋至满山多秀色,春来无处不花香。
310凡人不可貌相,海水不可斗量。
311清清之水为土所防,济济之士为酒所伤。
312高草之下或有兰香,茅茨之屋或有公王。
313无限朱门生饿殍,几多白屋出公卿。
314醉后乾坤大,壶中日月长。
315万事命已定,浮生空自忙。
316千里送毫毛,寄得不寄失。
317一人传虚,百人传实。
318世事明如镜,前程暗似漆。
319人生一世,如驹过隙。
320良田万顷,日食一升。
321大厦千间,夜眠八尺。
322千经万典,孝义为先。
323一字入公门,九牛拖不出。
324衙门八字开,有理无钱莫进来。
325富从升合起,贫由不算来。
326家无读书子,官从何处来。
327万事不由人计较,一身都是命安排。
328急行慢行,前程只有多少路。
329人间私语,天闻若雷。
330暗室亏心,神目如电。
331一毫之恶劝人莫作,一毫之善与人方便。
332亏人是祸饶人是福,天眼恢恢报应甚速。
333圣贤言语,神钦鬼服。
334人各有心,心各有志。
335口说不如身逢,耳闻不如目见。
336养军千日,用在一朝。
337国清才子贵,家富小儿骄。
338利刀割体痕易合,恶语伤人恨难消。
339公道世间惟白发,贵人头上不曾饶。
340有钱堪出众,无衣懒出门。
341为官须作相,及第必争先。
342苗从地发,树向枝分。
343父子和而家不退,兄弟和而家不分。
344官有正条,民有私约。
345闲时不烧香,急时抱佛脚。
346幸生太平无事日,恐逢年老不多时。
347国乱思良将,家贫思贤妻。
348池塘积水须防旱,田地深耕足养家。
349根深不怕风摇动,树正何愁月影斜。
350奉劝君子,各宜守己。
351只此呈示,万无一失。

增广昔时贤文一

001昔时贤文,诲汝谆谆。
002集韵增广,多见多闻。
003观今宜鉴古,无古不成今。
004知己知彼,将心比心。
005酒逢知己饮,诗向会人吟。
006相识满天下,知心能几人。
007相逢好似初相识,到老终无怨恨心。
008近水知鱼性,近山识鸟音。
009易涨易退山溪水,易反易覆小人心。
010运去金成铁,时来铁成金。
011读书须用意,一字值千金。
012逢人且说三分话,未可全抛一片心。
013有意栽花花不发,无心插柳柳成荫。
014画虎画皮难画骨,知人知面不知心。
015钱财如粪土,仁义值千金。
016流水下滩非有意,白云出岫本无心。
017当时若不登高望,谁信东流海洋深。
018路遥知马力,事久见人心。
019两人一般心,有钱堪买金。
020一人一般心,无钱堪买针。
021相见易得好,久住难为人。
022马行无力皆因瘦,人不风流只为贫。
023饶人不是痴汉,痴汉不会饶人。
024是亲不是亲,非亲却是亲。
025美不美山中水,亲不亲故乡人。
026莺花犹怕春光老,岂可教人枉度春。
027相逢不饮空归去,洞口桃花也笑人。
028红粉佳人休便老,风流浪子莫教贫。
029在家不会迎宾客,出门方知少主人。
030客来主不顾,应恐是痴人。
031贫居闹市无人问,富在深山有远亲。
032谁人背后无人说,那个人前不说人。
033有钱道真语,无钱语不真。
034不信但看筵中酒,杯杯先敬有钱人。
035闹里有钱,静处安身。
036来如风雨,去似微尘。
037长江后浪推前浪,世上新人换旧人。
038近水楼台先得月,向阳花木早逢春。
039古人不见今时月,今月曾经照古人。
040先到为君,后到为臣。
041莫道君行早,更有早行人。
042莫信直中直,须防仁不仁。
043山中有直树,世上无直人。
044自恨枝无叶,莫怨太阳偏。
045万般皆是命,半点不由人。
046一年之计在于春,一日之计在于晨。
047一家之计在于和,一生之计在于勤。
048责人之心责己,恕己之心恕人。
049守口如瓶,防意如城。
050宁可负我,切莫负人。
051积善成名,积恶灭身。
052再三行好事,第一莫欺心。
053虎生犹可近,人熟不堪亲。
054来说是非者,便是是非人。
055远水难救近火,远亲不如近邻。
056有钱有酒多兄弟,急难何曾见一人。
057人情似纸张张薄,世事如棋局局新。
058山中也有千年树,世上难逢百岁人。
059力微休负重,言轻莫劝人。
060无钱休入众,遭难莫寻亲。
061平生莫做皱眉事,世上应无切齿人。
062士者国之宝,儒为席上珍。
063若要断酒法,醒眼看醉人。
064求人须求大丈夫,济人须济急时无。
065渴时一滴如甘露,醉后添杯不如无。
066久住令人贱,贫来亲也疏。
067酒中不语真君子,财上分明大丈夫。
068出家如初,成佛有余。
069积金千两,不如明解经书。
070养子不教如养驴,养女不教如养猪。
071有田不耕仓廪虚,有书不读子孙愚。
072仓廪虚兮岁月乏,子孙愚兮礼义疏。
073同君一夜话,胜读十年书。
074人不通古今,马牛而襟裾。
075茫茫四海人无数,那个男儿是丈夫。
076白酒酿成延好客,黄金散尽为收书。
077救人一命,胜造七级浮屠。
078城门失火,殃及池鱼。
079庭前生瑞草,好事不如无。
080欲求真富贵,须下死工夫。
081百年成之不足,一旦坏之有余。
082人心似铁,官法如炉。
083善化不足,恶化有余。
084水太清则无鱼,人太紧则无智。
085智者减半,愚者全无。
086在家由父,出嫁从夫。
087痴人畏妇,贤女敬夫。
088是非终日有,不听自然无。
089宁可正而不足,不可邪而有余。
090宁可信其有,不可信其无。
091竹篱茅舍风光好,道院僧房总不如。
092命里有时终须有,命里无时莫强求。
093道院迎仙客,书房隐相儒。
094庭栽栖凤竹,池养化龙鱼。
095结交须胜己,似我不如无。
096但看三五日,相见不如初。
097人情似水分高下,世事如云任卷舒。
098会说说都是,不会说无理。
099磨刀恨不利,刀利伤人指。
100求财恨不多,财多害人己。
101知足常足终身不辱,知止常止终身不耻。
102有福伤财,无福伤己。
103差之毫厘,失之千里。
104若登高必自卑,若行远必自迩。
105三思而行,再斯可矣。
106使口不如自走,求人不如求己。
109小时是兄弟,长大各乡里。
110妒财莫妒食,怨生莫怨死。
111人见白头嗔,我见白头喜。
112多少少年亡,不到白头死。
113墙有缝,壁有耳。
114好事不出门,恶事传千里。
115贼是小人,智过君子。
116君子固穷,小人穷斯滥矣。
117贫穷自在,富贵多忧。
118不以我为德,反以我为仇。
119宁向直中取,莫向曲中求。
120人无远虑,必有近忧。
121知我者谓我心忧,不知我者谓我何求。
122晴干不肯去,直待雨淋头。
123成事莫说,覆水难收。
124是非只为多开口,烦恼皆因强出头。
125忍得一时之气,免得百日之忧。
126近来学得乌龟法,得缩头时且缩头。
127惧法朝朝乐,欺公日日忧。
128人生一世,草生一春。
129白发不随人而去,看来又是白头翁。
130月到十五光明少,人到中年万事休。
131儿孙自有儿孙福,莫把儿孙作马牛。
132人生不满百,常怀千岁忧。
133今朝有酒今朝醉,明日愁来明日忧。
134路逢险处难回避,事到头来不自由。
135药能医假病,酒不解真愁。
136人平不语,水平不流。
137一家养女百家求,一马不行百马忧。
138有花方酌酒,无月不登楼。
139三杯通大道,一醉解千愁。
140深山毕竟藏猛虎,大海终须纳细流。
141惜花须检点,爱月不梳头。
142大抵选他肌骨好,不敷红粉也风流。
143受恩深处宜先退,得意浓时便可休。
144莫待是非来入耳,从前恩爱反成仇。
145留得五湖明月在,不愁无处下金钩。
146休别有鱼处,莫恋浅滩头。
147去时终须去,再三留不住。
148忍一句息一怒,饶一著退一步。
149三十不豪,四十不富,五十将近寻死路。
150生不认魂,死不认尸。
151父母恩深终有别,夫妻义重也分离。
152人生似鸟同林宿,大限来时各自飞。
153人善被人欺,马善被人骑。
154人无横财不富,马无夜草不肥。
155人恶人怕天不怕,人善人欺天不欺。
156善恶到头终有报,只争来早与来迟。
157黄河尚有澄清日,岂可人无得运时。
158得宠思辱,居安思危。
159念念有如临敌日,心心常似过桥时。
160英雄行险道,富贵似花枝。
161人情莫道春光好,只怕秋来有冷时。
162送君千里,终须一别。
163但将冷眼观螃蟹,看他横行到几时。
164见事莫说,问事不知。
165闲事莫管,无事早归。
166假袍染就真红色,也被旁人说是非。
167善事可作,恶事莫为。
168许人一物,千金不移。
169龙生龙子,虎生豹儿。
170龙游浅水遭虾戏,虎落平阳被犬欺。
171一举首登龙虎榜,十年身到凤凰池。
172十年窗下无人问,一举成名天下知。
173酒债寻常到处有,人生七十古来稀。
174养儿防老,积谷防饥。
175鸡豚狗彘之畜,无失其时。

2009年4月16日星期四

asmcmd cp的问题

在oracle11g以后,asmcmd中新增了cp这个命令,今天有机会用了一下,开始的时候报错:
export ORACLE_SID=+ASM
asmcmd进入

ASMCMD> cp spfilecrdb11gstd.ora /tmp
source +data/CRDB11GSTD/spfilecrdb11gstd.ora
target /tmp
ASMCMD-08015: can not create file->'/tmp'
ORA-15056: additional error message
ORA-27038: created file already exists
Additional information: 1
ORA-06512: at "SYS.X$DBMS_DISKGROUP", line 142
ORA-06512: at line 3 (DBD ERROR: OCIStmtExecute)
ASMCMD-08016: copy source->'+data/CRDB11GSTD/spfilecrdb11gstd.ora' and target->'/tmp' failed
ASMCMD>

为啥子呢?查了n多的文档,没有问题啊
后来发现是我的问题:

ASMCMD> cp spfilecrdb11gstd.ora /tmp/spfile2
source +data/CRDB11GSTD/spfilecrdb11gstd.ora
target /tmp/spfile2
copying file(s)...
file, /tmp/spfile2, copy committed.

没有指明具体的文件名字。
记录一下。

2009年4月15日星期三

發現好的線上字典,記錄一下,还有一个词 suck up

http://hk.dictionary.yahoo.com/
http://www.answers.com/

suck-up:n. Informal.

A person who flatters or defers to others obsequiously; a sycophant.
Idioms: suck up to
Behave obsequiously towards, ingratiate oneself with, as in Now that he's the boss they're all sucking up to him, hoping to get big raises. [Vulgar slang; mid-1800s]

raises--有加薪的意思

We are obliged to thank you for your kind attention in this matter.

We are obliged to thank you for your kind attention in this matter.

不胜感激贵方对此事的关照。

Dell1950 raid0 IO

有点令人困惑

1.write

第一次
[root@crdb11gstd home]# time dd if=/dev/zero of=/home/dell1950_w bs=4k count=1000000
1000000+0 records in
1000000+0 records out
4096000000 bytes (4.1 GB) copied, 21.3064 seconds, 192 MB/s

real 0m21.308s
user 0m0.477s
sys 0m9.540s

后面几次
[root@crdb11gstd home]# time dd if=/dev/zero of=/home/dell1950_w bs=4k count=1000000
1000000+0 records in
1000000+0 records out
4096000000 bytes (4.1 GB) copied, 10.1052 seconds, 405 MB/s

real 0m10.107s
user 0m0.465s
sys 0m9.639s

2 read write
第一次

[root@crdb11gstd home]# time dd if=/home/dell1950_w of=/home/dell1950_rw bs=4k count=1000000
1000000+0 records in
1000000+0 records out
4096000000 bytes (4.1 GB) copied, 103.937 seconds, 39.4 MB/s

real 1m43.938s
user 0m0.499s
sys 0m12.467s

后面几次
[root@crdb11gstd home]# time dd if=/home/dell1950_w of=/home/dell1950_rw3 bs=4k count=1000000
1000000+0 records in
1000000+0 records out
4096000000 bytes (4.1 GB) copied, 11.9869 seconds, 342 MB/s

real 0m11.988s
user 0m0.484s
sys 0m11.500s


3 read
[root@crdb11gstd home]# time dd if=/home/dell1950_w of=/dev/null bs=4k count=1000000
1000000+0 records in
1000000+0 records out
4096000000 bytes (4.1 GB) copied, 2.40624 seconds, 1.7 GB/s

real 0m2.408s
user 0m0.365s
sys 0m2.043s

2009年4月14日星期二

redhat 5.1 + oracle 11g + asm installation notebook

redhat 5.1 + oracle 11g + asm installation notebook

[root@crdb11gstd Server]# rpm -ivh elfutils-libelf-devel*.x86_64.rpm glibc-devel-2* gcc-4*.x86_64.rpm gcc-c++-4*.x86_64.rpm libstdc++-devel-4*.x86_64.rpm glibc-headers*.x86_64.rpm libgomp*.x86_64.rpm
warning: elfutils-libelf-devel-0.125-3.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
package glibc-headers-2.5-18 is already installed
package libgomp-4.1.2-14.el5 is already installed
package glibc-devel-2.5-18 is already installed
package gcc-4.1.2-14.el5 is already installed
package libstdc++-devel-4.1.2-14.el5 is already installed
package gcc-c++-4.1.2-14.el5 is already installed
package elfutils-libelf-devel-static-0.125-3.el5 is already installed
package elfutils-libelf-devel-0.125-3.el5 is already installed


[root@crdb11gstd Server]# rpm -ivh compat-libstdc++-33* libaio-devel*.x86_64.rpm
warning: compat-libstdc++-33-3.2.3-61.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
package compat-libstdc++-33-3.2.3-61 is already installed



[root@crdb11gstd Server]# rpm -ivh sysstat*
warning: sysstat-7.0.0-3.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:sysstat ########################################### [100%]
[root@crdb11gstd Server]#


[root@crdb11gstd Server]# /usr/sbin/groupadd oinstall
[root@crdb11gstd Server]# /usr/sbin/groupadd dba
[root@crdb11gstd Server]# /usr/sbin/useradd -m -g oinstall -G dba oracle
[root@crdb11gstd Server]# id oracle
uid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba)

[root@crdb11gstd Server]# passwd oracle
Changing password for user oracle.
New UNIX password:
BAD PASSWORD: it is based on a dictionary word
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

mkdir -p /u01/app/oracle
chown -R oracle:oinstall /u01/app
chmod -R 775 /u01/app



[root@crdb11gstd Server]# cat >> /etc/sysctl.conf <> kernel.shmmni = 4096
> kernel.sem = 250 32000 100 128
> fs.file-max = 65536
> net.ipv4.ip_local_port_range = 1024 65000
> net.core.rmem_default=4194304
> net.core.wmem_default=262144
> net.core.rmem_max=4194304
> net.core.wmem_max=262144
> EOF
[root@crdb11gstd Server]# /sbin/sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 4194304
net.core.wmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_max = 262144
[root@crdb11gstd Server]#


[root@crdb11gstd Server]# cat >> /etc/security/limits.conf <> oracle soft nproc 2047
> oracle hard nproc 16384
> oracle soft nofile 1024
> oracle hard nofile 65536
> EOF



[root@crdb11gstd Server]# cat >> /etc/pam.d/login <> session required /lib/security/pam_limits.so
> EOF
[root@crdb11gstd Server]#


[root@crdb11gstd Server]# cat >> /etc/profile <> if [ \$USER = "oracle" ]; then
> if [ \$SHELL = "/bin/ksh" ]; then
> ulimit -p 16384
> ulimit -n 65536
> else
> ulimit -u 16384 -n 65536
> fi
> umask 022
> fi
> EOF
[root@crdb11gstd Server]#


[root@crdb11gstd Server]# cat >> /etc/csh.login <> if ( \$USER == "oracle" ) then
> limit maxproc 16384
> limit descriptors 65536
> umask 022
> endif
> EOF
[root@crdb11gstd Server]#



[root@crdb11gstd Server]# uname -r
2.6.18-53.el5
[root@crdb11gstd Server]# uname -a
Linux crdb11gstd.localdomain 2.6.18-53.el5 #1 SMP Wed Oct 10 16:34:19 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux
[root@crdb11gstd Server]#

[root@crdb11gstd Server]# uname -rm
2.6.18-53.el5 x86_64


http://www.oracle.com/technology/software/tech/linux/asmlib/rhel5.html

* oracleasm-support-2.1.3-1.el5.x86_64.rpm
* oracleasmlib-2.0.4-1.el5.x86_64.rpm

oracleasm-2.6.18-53.el5-2.0.4-1.el5.x86_64.rpm


[root@crdb11gstd software]# rpm -Uvh oracleasm-support-2.1.3-1.el5.x86_64.rpm
Preparing... ########################################### [100%]
1:oracleasm-support ########################################### [100%]
[root@crdb11gstd software]# rpm -Uvh oracleasm-2.6.18-53.el5-2.0.4-1.el5.x86_64.rpm
Preparing... ########################################### [100%]
1:oracleasm-2.6.18-53.el5########################################### [100%]
[root@crdb11gstd software]# rpm -Uvh oracleasmlib-2.0.4-1.el5.x86_64.rpm
Preparing... ########################################### [100%]
1:oracleasmlib ########################################### [100%]
[root@crdb11gstd software]#


[root@crdb11gstd init.d]# ./oracleasm configure
Configuring the Oracle ASM library driver.

This will configure the on-boot properties of the Oracle ASM library
driver. The following questions will determine whether the driver is
loaded on boot and what permissions it will have. The current values
will be shown in brackets ('[]'). Hitting without typing an
answer will keep that current value. Ctrl-C will abort.

Default user to own the driver interface []: oracle
Default group to own the driver interface []: dba
Start Oracle ASM library driver on boot (y/n) [n]: y
Scan for Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: done
Initializing the Oracle ASMLib driver: [ OK ]
Scanning the system for Oracle ASMLib disks: [ OK ]


[root@crdb11gstd init.d]# ./oracleasm
Usage: ./oracleasm {start|stop|restart|enable|disable|configure|createdisk|deletedisk|querydisk|listdisks|scandisks|status}
[root@crdb11gstd init.d]# ./oracleasm createdisk VOL1 /dev/sda2
Marking disk "VOL1" as an ASM disk: [ OK ]
[root@crdb11gstd init.d]# ./oracleasm createdisk VOL2 /dev/sda3
Marking disk "VOL2" as an ASM disk: [ OK ]
[root@crdb11gstd init.d]# ./oracleasm createdisk VOL3 /dev/sda5
Marking disk "VOL3" as an ASM disk: [ OK ]
[root@crdb11gstd init.d]# ./oracleasm createdisk VOL4 /dev/sda6
Marking disk "VOL4" as an ASM disk: [ OK ]
[root@crdb11gstd init.d]# ./oracleasm listdisks
VOL1
VOL2
VOL3
VOL4
[root@crdb11gstd init.d]#



接下来就是按照asm方式安装oracle software
dbca创建数据库了,不做过多描述了

转文: 盖茨的十条“金口玉言”

ref: http://blog.china.alibaba.com/blog/sznsdy/article/b6-i6364666.html
姑且不论是真的是假的,读了确实有启发

盖茨的十条“金口玉言”

  1 . 社会充满不公平现象。你先不要想去改造它,只能先适应它。(因为你管不了它)。

  2 . 世界不会在意你的自尊,人们看的只是你的成就。在你没有成就以前,切勿过分强调自尊。(因为你越强调自尊,越对你不利)。

  3 . 你只是中学毕业,通常不会成为CEO,直到你把CEO职位拿到手为止。(直到此时,人们才不会介意你只是中学毕业)。

  4 . 当你陷入人为困境时,不要抱怨,你只能默默地吸取教训。(你要悄悄地振作起来,重新奋起)。

  5 . 你要懂得:在没有你之前,你的父母并不像现在这样“乏味”。你应该想到,这是他们为了抚养你所付出的巨大代价。(你永远要感恩和孝敬他们,才是硬道理)。

  6 . 在学校里,你考第几已不是那么重要,但进入社会却不然。不管你去到哪里,都要分等排名。(社会、公司要排名次,是常见的事,要鼓起勇气竞争才对)。

  7 . 学校里有节假日,到公司打工则不然,你几乎不能休息,很少能轻松地过节假日。(否则你职业生涯中一起跑就落后了,甚至会让你永远落后)。

  8 . 在学校,老师会帮助你学习,到公司却不会。如果你认为学校的老师要求你很严格,那是你还没有进入公司打工。因为,如果公司对你不严厉,你就要失业了。(你必须清醒地认识到:公司比学校更要严格要求自己)。

  9 . 人们都喜欢看电视剧,但你不要看,那并不是你的生活。只要在公司工作,你是无暇看电视剧的。(奉劝你不要看,否则你走上看电视连续剧之路,而且看得津津有味,那你将失去成功的资格)。

  10 . 永远不要在背后批评别人,尤其不能批评你的老板无知、刻薄和无能。(因为这样的心态,会使你走上坎坷艰难的成长之路)。

  这十条金科玉律般的职工座右铭,我建议作为职工必读的经典之作。要把它张贴在自己工作生活的墙上,经常阅读反省,对我们大有好处。比尔·盖茨之成为最受尊敬的人,成为近十年“世界首富”,恐怕一个重要道理正在于此。

  大家放眼望去会发现:大凡成功者,在谈到成功时,很少谈“做事”,而都在讲“做人”。

  因为不会做人,就不会做事,就会走上无为的一生,或走上大起大落坎坷艰难的不归之路。著名经济学家茅于轼先生说:“要在三四十岁思考人生,七老八十再想用处就不大了。”人,出生入死要深思!才是大道理。