首先你必须先了解到 "dd 指令" 的定义:
dd即可从标准输入设备(或档案读取数据)?
经过指定的格式来转换数据,
再输出至档案、装置或标准输出。
先用 df 观看扇区
扇区备份需要不同扇区才行
例:
hda1 挂载根目录 / 为扇区1
hda2 挂载 /home 为扇区2
备份:
dd if=/dev/hda1 of=/home/backup_system/file_name
还原:
dd if=/home/backup_system/file_name of=/dev/hda1
实例一:
制作swap只是其中之一个应用。
# dd if=/dev/zero of=/tmp/swap bs=4k count=16382
(此指令是在 /tmp 底下做个空间约64M的 file size 给swap使用,
当您做完这个file时,还要做swpaon、mount…等动作才可以达到目的,
致于如何利用硬盘制作swap不在此说明内,鸟哥和酷学园都找的到相关教学!)
实例二:
备分档案、partition或整个硬盘。
以下是将第一个硬盘整个做到第二颗硬盘备分的指令~~
#dd if=/dev/hda of=/dev/hdb
(这个实例很实用喔!
切记如果你要备分的是partition,不能将"要备分的分割区"放在同一个partition内,
如指令:# dd if=/dev/hda1 of=/dev/hda2/copy_datas)
实例三:
在linux下制作开机片。
#dd if=boot.img of=/dev/fd0 bs=1440k
实例四:
做一个测试的file。(于/tmp下做一个100m的测试档案,动作如同作swap一样)
# dd if=/dev/zero of=/tmp/100M bs=1M count=100
5/11/2009
DD指令解释
4/01/2009
Debian下安装SSH and Telnet服务
1.SSH
debian:~# apt-get install openssh-server
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会安装下列额外的软件包:
openssh-blacklist openssh-blacklist-extra
建议安装的软件包:
ssh-askpass rssh molly-guard
下列【新】软件包将被安装:
openssh-blacklist openssh-blacklist-extra openssh-server
共升级了 0 个软件包,新安装了 3 个软件包,要卸载 0 个软件包,有 0 个软件未被升级。
需要下载 0B/4547kB 的软件包。
解压缩后会消耗掉 9179kB 的额外空间。
您希望继续执行吗?[Y/n]y
更换介质:请把标有
“Debian GNU/Linux 5.0.0 _Lenny_ - Official i386 DVD Binary-1 20090214-16:54”
的碟片插入驱动器“/cdrom/”再按回车键
正在预设定软件包 ...
选中了曾被取消选择的软件包 openssh-blacklist。
(正在读取数据库 ... 系统当前总共安装有 97277 个文件和目录。)
正在解压缩 openssh-blacklist (从 .../openssh-blacklist_0.4.1_all.deb) ...
选中了曾被取消选择的软件包 openssh-blacklist-extra。
正在解压缩 openssh-blacklist-extra (从 .../openssh-blacklist-extra_0.4.1_all.deb) ...
选中了曾被取消选择的软件包 openssh-server。
正在解压缩 openssh-server (从 .../openssh-server_5.1p1-5_i386.deb) ...
正在处理用于 man-db 的触发器...
正在设置 openssh-blacklist (0.4.1) ...
正在设置 openssh-blacklist-extra (0.4.1) ...
正在设置 openssh-server (1:5.1p1-5) ...
Creating SSH2 RSA key; this may take some time ...
Creating SSH2 DSA key; this may take some time ...
Restarting OpenBSD Secure Shell server: sshd.
2.Telnet
debian:~# apt-get install xinetd
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包将被【卸载】:
openbsd-inetd
下列【新】软件包将被安装:
xinetd
共升级了 0 个软件包,新安装了 1 个软件包,要卸载 1 个软件包,有 0 个软件未被升级。
需要下载 0B/136kB 的软件包。
解压缩后会消耗掉 180kB 的额外空间。
您希望继续执行吗?[Y/n]y
dpkg:openbsd-inetd:有依赖问题,但是如您所愿还是继续删除:
swat 依赖于 openbsd-inetd inet-superserver;然而:
即将删除 openbsd-inetd。
未曾安装软件包“inet-superserver”。
提供了 inet-superserver 的软件包 openbsd-inetd 即将被删除。
swat 依赖于 openbsd-inetd inet-superserver;然而:
即将删除 openbsd-inetd。
未曾安装软件包“inet-superserver”。
提供了 inet-superserver 的软件包 openbsd-inetd 即将被删除。
(正在读取数据库 ... 系统当前总共安装有 97243 个文件和目录。)
正在删除 openbsd-inetd ...
Stopping internet superserver: inetd.
正在处理用于 man-db 的触发器...
选中了曾被取消选择的软件包 xinetd。
(正在读取数据库 ... 系统当前总共安装有 97237 个文件和目录。)
正在解压缩 xinetd (从 .../xinetd_2.3.14-7_i386.deb) ...
正在处理用于 man-db 的触发器...
正在设置 xinetd (1:2.3.14-7) ...
Stopping internet superserver: xinetd.
Starting internet superserver: xinetd.
debian:~# apt-get install telnetd
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列【新】软件包将被安装:
telnetd
共升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 0 个软件未被升级。
需要下载 0B/42.3kB 的软件包。
解压缩后会消耗掉 106kB 的额外空间。
更换介质:请把标有
“Debian GNU/Linux 5.0.0 _Lenny_ - Official i386 DVD Binary-2 20090214-16:54”
的碟片插入驱动器“/cdrom/”再按回车键
选中了曾被取消选择的软件包 telnetd。
(正在读取数据库 ... 系统当前总共安装有 97265 个文件和目录。)
正在解压缩 telnetd (从 .../telnetd_0.17-36_i386.deb) ...
正在处理用于 man-db 的触发器...
正在设置 telnetd (0.17-36) ...
正在将用户“telnetd”加入到“utmp”组中
--------- IMPORTANT INFORMATION FOR XINETD USERS ----------
The following line will be added to your /etc/inetd.conf file:
telnet stream tcp nowait telnetd /usr/sbin/tcpd /usr/sbin/in.telnetd
If you are indeed using xinetd, you will have to convert the
above into /etc/xinetd.conf format, and add it manually. See
/usr/share/doc/xinetd/README.Debian for more information.
Suggested entry (automatically converted using itox):
service telnet
{
socket_type = stream
protocol = tcp
wait = no
user = telnetd
You must use option -daemon_dir if you use tcpd
-----------------------------------------------------------
然后新建了一个/etc/xinetd.d/telnet,内容如下:
debian:~#vi /etc/xinetd.d/telnet
service telnet
{
disable=no
flags=REUSE
socket_type+stream
wait=no
user=root
server=/usr/sbin/in.telnetd
server_args=-h
log_on_failure +=USERID
}
保存ok.
debian:~# apt-get install openssh-server
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会安装下列额外的软件包:
openssh-blacklist openssh-blacklist-extra
建议安装的软件包:
ssh-askpass rssh molly-guard
下列【新】软件包将被安装:
openssh-blacklist openssh-blacklist-extra openssh-server
共升级了 0 个软件包,新安装了 3 个软件包,要卸载 0 个软件包,有 0 个软件未被升级。
需要下载 0B/4547kB 的软件包。
解压缩后会消耗掉 9179kB 的额外空间。
您希望继续执行吗?[Y/n]y
更换介质:请把标有
“Debian GNU/Linux 5.0.0 _Lenny_ - Official i386 DVD Binary-1 20090214-16:54”
的碟片插入驱动器“/cdrom/”再按回车键
正在预设定软件包 ...
选中了曾被取消选择的软件包 openssh-blacklist。
(正在读取数据库 ... 系统当前总共安装有 97277 个文件和目录。)
正在解压缩 openssh-blacklist (从 .../openssh-blacklist_0.4.1_all.deb) ...
选中了曾被取消选择的软件包 openssh-blacklist-extra。
正在解压缩 openssh-blacklist-extra (从 .../openssh-blacklist-extra_0.4.1_all.deb) ...
选中了曾被取消选择的软件包 openssh-server。
正在解压缩 openssh-server (从 .../openssh-server_5.1p1-5_i386.deb) ...
正在处理用于 man-db 的触发器...
正在设置 openssh-blacklist (0.4.1) ...
正在设置 openssh-blacklist-extra (0.4.1) ...
正在设置 openssh-server (1:5.1p1-5) ...
Creating SSH2 RSA key; this may take some time ...
Creating SSH2 DSA key; this may take some time ...
Restarting OpenBSD Secure Shell server: sshd.
2.Telnet
debian:~# apt-get install xinetd
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包将被【卸载】:
openbsd-inetd
下列【新】软件包将被安装:
xinetd
共升级了 0 个软件包,新安装了 1 个软件包,要卸载 1 个软件包,有 0 个软件未被升级。
需要下载 0B/136kB 的软件包。
解压缩后会消耗掉 180kB 的额外空间。
您希望继续执行吗?[Y/n]y
dpkg:openbsd-inetd:有依赖问题,但是如您所愿还是继续删除:
swat 依赖于 openbsd-inetd inet-superserver;然而:
即将删除 openbsd-inetd。
未曾安装软件包“inet-superserver”。
提供了 inet-superserver 的软件包 openbsd-inetd 即将被删除。
swat 依赖于 openbsd-inetd inet-superserver;然而:
即将删除 openbsd-inetd。
未曾安装软件包“inet-superserver”。
提供了 inet-superserver 的软件包 openbsd-inetd 即将被删除。
(正在读取数据库 ... 系统当前总共安装有 97243 个文件和目录。)
正在删除 openbsd-inetd ...
Stopping internet superserver: inetd.
正在处理用于 man-db 的触发器...
选中了曾被取消选择的软件包 xinetd。
(正在读取数据库 ... 系统当前总共安装有 97237 个文件和目录。)
正在解压缩 xinetd (从 .../xinetd_2.3.14-7_i386.deb) ...
正在处理用于 man-db 的触发器...
正在设置 xinetd (1:2.3.14-7) ...
Stopping internet superserver: xinetd.
Starting internet superserver: xinetd.
debian:~# apt-get install telnetd
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列【新】软件包将被安装:
telnetd
共升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 0 个软件未被升级。
需要下载 0B/42.3kB 的软件包。
解压缩后会消耗掉 106kB 的额外空间。
更换介质:请把标有
“Debian GNU/Linux 5.0.0 _Lenny_ - Official i386 DVD Binary-2 20090214-16:54”
的碟片插入驱动器“/cdrom/”再按回车键
选中了曾被取消选择的软件包 telnetd。
(正在读取数据库 ... 系统当前总共安装有 97265 个文件和目录。)
正在解压缩 telnetd (从 .../telnetd_0.17-36_i386.deb) ...
正在处理用于 man-db 的触发器...
正在设置 telnetd (0.17-36) ...
正在将用户“telnetd”加入到“utmp”组中
--------- IMPORTANT INFORMATION FOR XINETD USERS ----------
The following line will be added to your /etc/inetd.conf file:
telnet stream tcp nowait telnetd /usr/sbin/tcpd /usr/sbin/in.telnetd
If you are indeed using xinetd, you will have to convert the
above into /etc/xinetd.conf format, and add it manually. See
/usr/share/doc/xinetd/README.Debian for more information.
Suggested entry (automatically converted using itox):
service telnet
{
socket_type = stream
protocol = tcp
wait = no
user = telnetd
You must use option -daemon_dir if you use tcpd
-----------------------------------------------------------
然后新建了一个/etc/xinetd.d/telnet,内容如下:
debian:~#vi /etc/xinetd.d/telnet
service telnet
{
disable=no
flags=REUSE
socket_type+stream
wait=no
user=root
server=/usr/sbin/in.telnetd
server_args=-h
log_on_failure +=USERID
}
保存ok.
3/16/2009
DBMS常用包介绍
首先介绍:dbms_rowid
DBMS_ROWID包主要是用来获得数据库块的block number,object number等信息
常用的选项有下:
ROWID_BLOCK_NUMBER Function
Returns the block number of a ROWID
根据ROWID获取数据块的NUMBER
SQL> select * from T4 2 ;
ID NAME———- ——————– 1 seagull80 2 liguohua80
SQL> select dbms_rowid.rowid_block_number(rowid) from T4;
DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)———————————— 1514 1514
这个常用来DUMP数据块号,分析
ROWID_CREATE Function
Creates a ROWID, for testing only
用来创建ROWID,一般用来测试
格式如下:
BMS_ROWID.ROWID_CREATE ( rowid_type IN NUMBER, object_number IN NUMBER, relative_fno IN NUMBER, block_number IN NUMBER, row_number IN NUMBER) RETURN ROWID;
ROWID_RELATIVE_FNO Function
Returns the file number of a ROWID
返回ROWID所在文件号
SQL> select dbms_rowid.rowid_relative_fno(rowid) from T4;
DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID)———————————— 6 6
SQL> select dbms_rowid.rowid_relative_fno(rowid), dbms_rowid.rowid_block_number(rowid) from T4;
DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)———————————— ———————————— 6 1514 6 1514
ROWID_ROW_NUMBER Function
Returns the row number
返回行号
还有如下几个,大家可以参照官方文档
ROWID_TO_ABSOLUTE_FNO Function
Returns the absolute file number associated with the ROWID for a row in a specific table
ROWID_TO_EXTENDED Function
Converts a ROWID from restricted format to extended
ROWID_TO_RESTRICTED Function
Converts an extended ROWID to restricted format
ROWID_TYPE Function
Returns the ROWID type: 0 is restricted, 1 is extended
ROWID_VERIFY Function
Checks if a ROWID can be correctly extended by the ROWID_TO_EXTENDED function
ROWID_INFO Procedure
Returns the type and components of a ROWID
ROWID_OBJECT Function
Returns the object number of the extended ROWID
第2个包:dbms_utility
可以用来将数据块地址转换为块的地址和文件块号
比如我们在分析索引接受时就可以用到
SQL> create index ind_dbms on T4(id);
索引已创建。
SQL> select object_id from dba_objects where object_name=’IND_DBMS’;
OBJECT_ID———- 54147
SQL> alter session set events ‘immediate trace name treedump level 54147′;
会话已更改。
—– begin tree dumpleaf: 0×1000b74 16780148 (0: nrow: 2 rrow: 2)—– end tree dump
我们可以将叶块地址16780148转换为叶块所在文件和块号
SQL> select dbms_utility.data_block_address_file(16780148) “file”, 2 dbms_utility.data_block_address_block(16780148) “block” from dual;
file block———- ———- 4 2932
当然相应我们可以夸大表结构然后重建索引,可以DUMP索引结果的分支快啥的
从汪海BLOG看到如下信息:
unique index和non-unique index它的构造是不一样的。对于unique index,它的branch block里面只保存key value和leaf block的address,因为根据这2个值就可以定位当新值插入时会选择哪个leaf block进行插入,leaf block里面的值也没必要按照rowid的顺序排列了,只需要按照key value排序就行了。但是如果是non-unique index,branch block里面必须保存key value,leaf block的address,和rowid。在leaf block里面如果key value相同的话要按照rowid做升序排列,我个人觉得这样做会有2个好处,一个是可以提高相同一个leaf block内相同key value能尽量关联到相同的data block。第2个好处是当插入新的相同key value时能很容易定位插入到哪个block。为了能做到这些,non-unique index必须在branch block里面放入rowid
功能模块有如下:
ACTIVE_INSTANCES Procedure
Returns the active instance
ANALYZE_DATABASE Procedure
Analyzes all the tables, clusters, and indexes in a database [see alsoDeprecated Subprograms]
ANALYZE_PART_OBJECT Procedure
Analyzes the given tables and indexes
ANALYZE_SCHEMA Procedure
Analyzes all the tables, clusters, and indexes in a schema [see also Deprecated Subprograms]
CANONICALIZE Procedure
Canonicalizes a given string
COMMA_TO_TABLE Procedures
Converts a comma-delimited list of names into a PL/SQL table of names
COMPILE_SCHEMA Procedure
Compiles all procedures, functions, packages, and triggers in the specified schema
CREATE_ALTER_TYPE_ERROR_TABLE Procedure
Creates an error table to be used in the EXCEPTION clause of the ALTER TYPE statement
CURRENT_INSTANCE Function
Returns the current connected instance number
DATA_BLOCK_ADDRESS_BLOCK Function
Gets the block number part of a data block address
DATA_BLOCK_ADDRESS_FILE Function
Gets the file number part of a data block address
DB_VERSION Procedure
Returns version information for the database
EXEC_DDL_STATEMENT Procedure
Executes the DDL statement in parse_string
FORMAT_CALL_STACK Function
Formats the current call stack
FORMAT_ERROR_BACKTRACE Function
Formats the backtrace from the point of the current error to the exception handler where the error has been caught
FORMAT_ERROR_STACK Function
Formats the current error stack
GET_CPU_TIME Function
Returns the current CPU time in 100th’s of a second
GET_DEPENDENCY Procedure
Shows the dependencies on the object passed in.
GET_HASH_VALUE Function
Computes a hash value for the given string
GET_PARAMETER_VALUE Function
Gets the value of specified init.ora parameter
GET_TIME Function
Finds out the current time in 100th’s of a second
INVALIDATE Procedure
Invalidates a database object and (optionally) modifies its PL/SQL compiler parameter settings
IS_CLUSTER_DATABASE Function
Finds out if this database is running in cluster database mode
MAKE_DATA_BLOCK_ADDRESS Function
Creates a data block address given a file number and a block number
NAME_RESOLVE Procedure
Resolves the given name
NAME_RESOLVE Procedure
Calls the parser to parse the given name
PORT_STRING Function
Returns a string that uniquely identifies the version of Oracle and the operating system
TABLE_TO_COMMA Procedures
Converts a PL/SQL table of names into a comma-delimited list of names
VALIDATE Procedure
Converts a PL/SQL table of names into a comma-delimited list of names
这些东西了解下OK,具体用的时候可以看下
第三个dbms_stats
用来收集对象信息比如表 索引,这些信息对于CBO下产生计划有着重要的影响
统计信息包括下面几类:
表统计:包括记录数、block数和记录平均长度。
列统计:列中不同值的数量(NVD)、空值的数量和数据分布(HISTOGRAM)。
索引统计:索引叶块的数量、索引的层数和聚集因子(CLUSTERING FACTOR)。
系统统计:I/O性能和利用率和CPU性能和利用率。
生成统计信息:
统计信息生成技术包括三种:
基于数据采样的估计方式;
精确计算方式;
用户自定义的统计信息收集方式;
其中采用估算方式可以指定总记录数的估算百分比或者总块数的估算百分比。
分区表的统计信息分为几级:分区表的整体信息、分区的统计信息和子分区的统计信息。
最常用的收集统计信息的方式包括:DBMS_STATS包和ANALYZE语句,Oracle推荐使用DBMS_STATS包来收集统计信息。
dbms_stats.gather_database_stats:收集数据库中所有对象的统计信息;在CREATE INDEX和ALTER INDEX REBUILD时可以指定COMPUTE STATISTICS语句,对于非分区表重建索引时会收集表、列和索引的统计信息。对于分区表,只收集索引信息,不会收集表和列信息。
可以在将METHOD_OPT参数设置为“FOR ALL HIDDEN COLUMNS SIZE N”来收集函数索引的索引表达式信息。Oracle根据下列条件来决定使用哪些索引:
索引中的记录数;
索引中不同键值的数量;
索引的层数;
索引中的叶块数;
聚集因子;
每个键值平均叶块数;
如果两个索引的选择性、查询代价和集势都相同,那么优化器会根据索引名称的字母顺序选
常用的有如下:
DBMS_STATS包中用于收集统计信息的过程包括:
dbms_stats.gather_table_stats 收集表、列和索引的统计信息; dbms_stats.gather_schema_stats 收集SCHEMA下所有对象的统计信息; dbms_stats.gather_index_stats 收集索引的统计信息; dbms_stats.gather_system_stats 收集系统统计信息。 dbms_stats.delete_table_stats 删除表的统计信息
dbms_stats.delete_index_stats 删除索引的统计信息 dbms_stats.export_table_stats 输出表的统计信息 dbms_stats.create_state_table dbms_stats.set_table_stats 设置 表的统计 dbms_stats.auto_sample_size
要注意的是,在删除统计信息前最好做个备份以免删除后发生问题用来恢复。
导出 导入 收集、删除统计信息可以:按数据库 数据字典 用户 表 索引来进行
其他可以作为了解
ALTER_DATABASE_TAB_MONITORING ProcedureALTER_SCHEMA_TAB_MONITORING ProcedureALTER_STATS_HISTORY_RETENTION ProcedureCONVERT_RAW_VALUE ProceduresCONVERT_RAW_VALUE_NVARCHAR ProcedureCONVERT_RAW_VALUE_ROWID ProcedureCREATE_STAT_TABLE ProcedureDELETE_COLUMN_STATS ProcedureDELETE_DATABASE_STATS ProcedureDELETE_DICTIONARY_STATS ProcedureDELETE_FIXED_OBJECTS_STATS ProcedureDELETE_INDEX_STATS ProcedureDELETE_SCHEMA_STATS ProcedureDELETE_SYSTEM_STATS ProcedureDELETE_TABLE_STATS ProcedureDROP_STAT_TABLE ProcedureEXPORT_COLUMN_STATS ProcedureEXPORT_DATABASE_STATS ProcedureEXPORT_DICTIONARY_STATS ProcedureEXPORT_FIXED_OBJECTS_STATS ProcedureEXPORT_INDEX_STATS ProcedureEXPORT_SCHEMA_STATS ProcedureEXPORT_SYSTEM_STATS ProcedureEXPORT_TABLE_STATS ProcedureFLUSH_DATABASE_MONITORING_INFO ProcedureGATHER_DATABASE_STATS ProceduresGATHER_DICTIONARY_STATS ProcedureGATHER_FIXED_OBJECTS_STATS ProcedureGATHER_INDEX_STATS ProcedureGATHER_SCHEMA_STATS ProceduresGATHER_SYSTEM_STATS ProcedureGATHER_TABLE_STATS ProcedureGENERATE_STATS ProcedureGET_COLUMN_STATS ProceduresGET_INDEX_STATS ProceduresGET_PARAM FunctionGET_STATS_HISTORY_AVAILABILITY FunctionGET_STATS_HISTORY_RETENTION FunctionGET_SYSTEM_STATS ProcedureGET_TABLE_STATS ProcedureIMPORT_COLUMN_STATS ProcedureIMPORT_DATABASE_STATS ProcedureIMPORT_DICTIONARY_STATS ProcedureIMPORT_FIXED_OBJECTS_STATS ProcedureIMPORT_INDEX_STATS ProcedureIMPORT_SCHEMA_STATS ProcedureIMPORT_SYSTEM_STATS ProcedureIMPORT_TABLE_STATS ProcedureLOCK_SCHEMA_STATS ProcedureLOCK_TABLE_STATS ProcedurePREPARE_COLUMN_VALUES ProceduresPREPARE_COLUMN_VALUES_NVARCHAR2 ProcedurePREPARE_COLUMN_VALUES_ROWID ProcedurePURGE_STATS ProcedureRESET_PARAM_DEFAULTS ProcedureRESTORE_DATABASE_STATS ProcedureRESTORE_DICTIONARY_STATS ProcedureRESTORE_FIXED_OBJECTS_STATS ProcedureRESTORE_SCHEMA_STATS ProcedureRESTORE_SYSTEM_STATS ProcedureRESTORE_TABLE_STATS ProcedureSET_COLUMN_STATS ProceduresSET_INDEX_STATS ProceduresSET_PARAM ProcedureSET_SYSTEM_STATS ProcedureSET_TABLE_STATS ProcedureUNLOCK_SCHEMA_STATS ProcedureUNLOCK_TABLE_STATS ProcedureUPGRADE_STAT_TABLE Procedure以DBMS_STATS.GATHER_SCHEMA_SATTS为例
exec dbms_stats.gather_schema_stats( -ownname => ‘SCOTT’, -options => ‘GATHER AUTO’, -estimate_percent => dbms_stats.auto_sample_size, -method_opt => ‘for all columns size repeat’, -degree => 15 -)
为了充分认识dbms_stats的好处,你需要仔细体会每一条主要的预编译指令(directive)。下面让我们研究每一条指令,并体会如何用它为基于代价的SQL优化器收集最高质量的统计数据。
options参数使用4个预设的方法之一,这个选项能控制Oracle统计的刷新方式:
gather——重新分析整个架构(Schema)。gather empty——只分析目前还没有统计的表。gather stale——只重新分析修改量超过10%的表(这些修改包括插入、更新和删除)。gather auto——重新分析当前没有统计的对象,以及统计数据过期(变脏)的对象。注意,使用gather auto类似于组合使用gather stale和gather empty。注意,无论gather stale还是gather auto,都要求进行监视。如果你执行一个alter table xxx monitoring命令,Oracle会用dba_tab_modifications视图来跟踪发生变动的表。这样一来,你就确切地知道,自从上一次分析统计数据以来,发生了多少次插入、更新和删除操作。
estimate_percent选项以下estimate_percent参数是一种比较新的设计,它允许Oracle的dbms_stats在收集统计数据时,自动估计要采样的一个segment的最佳百分比:estimate_percent => dbms_stats.auto_sample_size
要验证自动统计采样的准确性,你可检视dba_tables sample_size列。一个有趣的地方是,在使用自动采样时,Oracle会为一个样本尺寸选择5到20的百分比。记住,统计数据质量越好,CBO做出的决定越好。
method_opt选项dbms_stats的method_opt参数尤其适合在表和索引数据发生变化时刷新统计数据。method_opt参数也适合用于判断哪些列需要直方图(histograms)。
某些情况下,索引内的各个值的分布会影响CBO是使用一个索引还是执行一次全表扫描的决策。例如,假如在where子句中指定的值的数量不对称,全表扫描就显得比索引访问更经济。
如果你有一个高度倾斜的索引(某些值的行数不对称),就可创建Oracle直方图统计。但在现实世界中,出现这种情况的机率相当小。使用CBO时,最常见的错误之一就是在CBO统计中不必要地引入直方图。根据经验,只有在列值要求必须修改执行计划时,才应使用直方图。
为了智能地生成直方图,Oracle为dbms_stats准备了method_opt参数。在method_opt子句中,还有一些重要的新选项,包括skewonly,repeat和auto:method_opt=>’for all columns size skewonly’method_opt=>’for all columns size repeat’method_opt=>’for all columns size auto’
skewonly选项会耗费大量处理时间,因为它要检查每个索引中的每个列的值的分布情况。
假如dbms_stat发现一个索引的各个列分布得不均匀,就会为那个索引创建直方图,帮助基于代价的SQL优化器决定是进行索引访问,还是进行全表扫描访问。例如,在一个索引中,假定有一个列在50%的行中,如清单B所示,那么为了检索这些行,全表扫描的速度会快于索引扫描。–*************************************************************– SKEWONLY option—Detailed analysis–– Use this method for a first-time analysis for skewed indexes– This runs a long time because all indexes are examined–*************************************************************
begin dbms_stats.gather_schema_stats( ownname => ‘SCOTT’, estimate_percent => dbms_stats.auto_sample_size, method_opt => ‘for all columns size skewonly’, degree => 7 );end;重新分析统计数据时,使用repeat选项,重新分析任务所消耗的资源就会少一些。使用repeat选项(清单C)时,只会为现有的直方图重新分析索引,不再搜索其他直方图机会。定期重新分析统计数据时,你应该采取这种方式。–**************************************************************– REPEAT OPTION - Only reanalyze histograms for indexes– that have histograms–– Following the initial analysis, the weekly analysis– job will use the “repeat” option. The repeat option– tells dbms_stats that no indexes have changed, and– it will only reanalyze histograms for– indexes that have histograms.–**************************************************************begin dbms_stats.gather_schema_stats( ownname => ‘SCOTT’, estimate_percent => dbms_stats.auto_sample_size, method_opt => ‘for all columns size repeat’, degree => 7 );end;使用alter table xxx monitoring;命令来实现Oracle表监视时,需要使用dbms_stats中的auto选项。如清单D所示,auto选项根据数据分布以及应用程序访问列的方式(例如通过监视而确定的一个列的工作量)来创建直方图。使用method_opt=>’auto’类似于在dbms_stats的option参数中使用gather auto。begin dbms_stats.gather_schema_stats( ownname => ‘SCOTT’, estimate_percent => dbms_stats.auto_sample_size, method_opt => ‘for all columns size auto’, degree => 7 );end;
并行收集Oracle允许以并行方式来收集CBO统计数据,这就显著提高了收集统计数据的速度。但是,要想并行收集统计数据,你需要一台安装了多个CPU的SMP服务器。
更快的执行速度dbms_stats是提高SQL执行速度的一种出色机制。通过使用dbms_stats来收集最高质量的统计数据,CBO能够正确判断执行任何SQL查询时的最快途径。dbms_stats还在不断地改进。目前,它的一些令人激动的新特性(自动样本大小和自动直方图生成)已经显著简化了Oracle专家的工作。
详细DBMS包见 http://lbdwww.epfl.ch/f/teaching/courses/oracle8i/server.815/a68001/dbms_sta.htm
DBMS_ROWID包主要是用来获得数据库块的block number,object number等信息
常用的选项有下:
ROWID_BLOCK_NUMBER Function
Returns the block number of a ROWID
根据ROWID获取数据块的NUMBER
SQL> select * from T4 2 ;
ID NAME———- ——————– 1 seagull80 2 liguohua80
SQL> select dbms_rowid.rowid_block_number(rowid) from T4;
DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)———————————— 1514 1514
这个常用来DUMP数据块号,分析
ROWID_CREATE Function
Creates a ROWID, for testing only
用来创建ROWID,一般用来测试
格式如下:
BMS_ROWID.ROWID_CREATE ( rowid_type IN NUMBER, object_number IN NUMBER, relative_fno IN NUMBER, block_number IN NUMBER, row_number IN NUMBER) RETURN ROWID;
ROWID_RELATIVE_FNO Function
Returns the file number of a ROWID
返回ROWID所在文件号
SQL> select dbms_rowid.rowid_relative_fno(rowid) from T4;
DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID)———————————— 6 6
SQL> select dbms_rowid.rowid_relative_fno(rowid), dbms_rowid.rowid_block_number(rowid) from T4;
DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)———————————— ———————————— 6 1514 6 1514
ROWID_ROW_NUMBER Function
Returns the row number
返回行号
还有如下几个,大家可以参照官方文档
ROWID_TO_ABSOLUTE_FNO Function
Returns the absolute file number associated with the ROWID for a row in a specific table
ROWID_TO_EXTENDED Function
Converts a ROWID from restricted format to extended
ROWID_TO_RESTRICTED Function
Converts an extended ROWID to restricted format
ROWID_TYPE Function
Returns the ROWID type: 0 is restricted, 1 is extended
ROWID_VERIFY Function
Checks if a ROWID can be correctly extended by the ROWID_TO_EXTENDED function
ROWID_INFO Procedure
Returns the type and components of a ROWID
ROWID_OBJECT Function
Returns the object number of the extended ROWID
第2个包:dbms_utility
可以用来将数据块地址转换为块的地址和文件块号
比如我们在分析索引接受时就可以用到
SQL> create index ind_dbms on T4(id);
索引已创建。
SQL> select object_id from dba_objects where object_name=’IND_DBMS’;
OBJECT_ID———- 54147
SQL> alter session set events ‘immediate trace name treedump level 54147′;
会话已更改。
—– begin tree dumpleaf: 0×1000b74 16780148 (0: nrow: 2 rrow: 2)—– end tree dump
我们可以将叶块地址16780148转换为叶块所在文件和块号
SQL> select dbms_utility.data_block_address_file(16780148) “file”, 2 dbms_utility.data_block_address_block(16780148) “block” from dual;
file block———- ———- 4 2932
当然相应我们可以夸大表结构然后重建索引,可以DUMP索引结果的分支快啥的
从汪海BLOG看到如下信息:
unique index和non-unique index它的构造是不一样的。对于unique index,它的branch block里面只保存key value和leaf block的address,因为根据这2个值就可以定位当新值插入时会选择哪个leaf block进行插入,leaf block里面的值也没必要按照rowid的顺序排列了,只需要按照key value排序就行了。但是如果是non-unique index,branch block里面必须保存key value,leaf block的address,和rowid。在leaf block里面如果key value相同的话要按照rowid做升序排列,我个人觉得这样做会有2个好处,一个是可以提高相同一个leaf block内相同key value能尽量关联到相同的data block。第2个好处是当插入新的相同key value时能很容易定位插入到哪个block。为了能做到这些,non-unique index必须在branch block里面放入rowid
功能模块有如下:
ACTIVE_INSTANCES Procedure
Returns the active instance
ANALYZE_DATABASE Procedure
Analyzes all the tables, clusters, and indexes in a database [see alsoDeprecated Subprograms]
ANALYZE_PART_OBJECT Procedure
Analyzes the given tables and indexes
ANALYZE_SCHEMA Procedure
Analyzes all the tables, clusters, and indexes in a schema [see also Deprecated Subprograms]
CANONICALIZE Procedure
Canonicalizes a given string
COMMA_TO_TABLE Procedures
Converts a comma-delimited list of names into a PL/SQL table of names
COMPILE_SCHEMA Procedure
Compiles all procedures, functions, packages, and triggers in the specified schema
CREATE_ALTER_TYPE_ERROR_TABLE Procedure
Creates an error table to be used in the EXCEPTION clause of the ALTER TYPE statement
CURRENT_INSTANCE Function
Returns the current connected instance number
DATA_BLOCK_ADDRESS_BLOCK Function
Gets the block number part of a data block address
DATA_BLOCK_ADDRESS_FILE Function
Gets the file number part of a data block address
DB_VERSION Procedure
Returns version information for the database
EXEC_DDL_STATEMENT Procedure
Executes the DDL statement in parse_string
FORMAT_CALL_STACK Function
Formats the current call stack
FORMAT_ERROR_BACKTRACE Function
Formats the backtrace from the point of the current error to the exception handler where the error has been caught
FORMAT_ERROR_STACK Function
Formats the current error stack
GET_CPU_TIME Function
Returns the current CPU time in 100th’s of a second
GET_DEPENDENCY Procedure
Shows the dependencies on the object passed in.
GET_HASH_VALUE Function
Computes a hash value for the given string
GET_PARAMETER_VALUE Function
Gets the value of specified init.ora parameter
GET_TIME Function
Finds out the current time in 100th’s of a second
INVALIDATE Procedure
Invalidates a database object and (optionally) modifies its PL/SQL compiler parameter settings
IS_CLUSTER_DATABASE Function
Finds out if this database is running in cluster database mode
MAKE_DATA_BLOCK_ADDRESS Function
Creates a data block address given a file number and a block number
NAME_RESOLVE Procedure
Resolves the given name
NAME_RESOLVE Procedure
Calls the parser to parse the given name
PORT_STRING Function
Returns a string that uniquely identifies the version of Oracle and the operating system
TABLE_TO_COMMA Procedures
Converts a PL/SQL table of names into a comma-delimited list of names
VALIDATE Procedure
Converts a PL/SQL table of names into a comma-delimited list of names
这些东西了解下OK,具体用的时候可以看下
第三个dbms_stats
用来收集对象信息比如表 索引,这些信息对于CBO下产生计划有着重要的影响
统计信息包括下面几类:
表统计:包括记录数、block数和记录平均长度。
列统计:列中不同值的数量(NVD)、空值的数量和数据分布(HISTOGRAM)。
索引统计:索引叶块的数量、索引的层数和聚集因子(CLUSTERING FACTOR)。
系统统计:I/O性能和利用率和CPU性能和利用率。
生成统计信息:
统计信息生成技术包括三种:
基于数据采样的估计方式;
精确计算方式;
用户自定义的统计信息收集方式;
其中采用估算方式可以指定总记录数的估算百分比或者总块数的估算百分比。
分区表的统计信息分为几级:分区表的整体信息、分区的统计信息和子分区的统计信息。
最常用的收集统计信息的方式包括:DBMS_STATS包和ANALYZE语句,Oracle推荐使用DBMS_STATS包来收集统计信息。
dbms_stats.gather_database_stats:收集数据库中所有对象的统计信息;在CREATE INDEX和ALTER INDEX REBUILD时可以指定COMPUTE STATISTICS语句,对于非分区表重建索引时会收集表、列和索引的统计信息。对于分区表,只收集索引信息,不会收集表和列信息。
可以在将METHOD_OPT参数设置为“FOR ALL HIDDEN COLUMNS SIZE N”来收集函数索引的索引表达式信息。Oracle根据下列条件来决定使用哪些索引:
索引中的记录数;
索引中不同键值的数量;
索引的层数;
索引中的叶块数;
聚集因子;
每个键值平均叶块数;
如果两个索引的选择性、查询代价和集势都相同,那么优化器会根据索引名称的字母顺序选
常用的有如下:
DBMS_STATS包中用于收集统计信息的过程包括:
dbms_stats.gather_table_stats 收集表、列和索引的统计信息; dbms_stats.gather_schema_stats 收集SCHEMA下所有对象的统计信息; dbms_stats.gather_index_stats 收集索引的统计信息; dbms_stats.gather_system_stats 收集系统统计信息。 dbms_stats.delete_table_stats 删除表的统计信息
dbms_stats.delete_index_stats 删除索引的统计信息 dbms_stats.export_table_stats 输出表的统计信息 dbms_stats.create_state_table dbms_stats.set_table_stats 设置 表的统计 dbms_stats.auto_sample_size
要注意的是,在删除统计信息前最好做个备份以免删除后发生问题用来恢复。
导出 导入 收集、删除统计信息可以:按数据库 数据字典 用户 表 索引来进行
其他可以作为了解
ALTER_DATABASE_TAB_MONITORING ProcedureALTER_SCHEMA_TAB_MONITORING ProcedureALTER_STATS_HISTORY_RETENTION ProcedureCONVERT_RAW_VALUE ProceduresCONVERT_RAW_VALUE_NVARCHAR ProcedureCONVERT_RAW_VALUE_ROWID ProcedureCREATE_STAT_TABLE ProcedureDELETE_COLUMN_STATS ProcedureDELETE_DATABASE_STATS ProcedureDELETE_DICTIONARY_STATS ProcedureDELETE_FIXED_OBJECTS_STATS ProcedureDELETE_INDEX_STATS ProcedureDELETE_SCHEMA_STATS ProcedureDELETE_SYSTEM_STATS ProcedureDELETE_TABLE_STATS ProcedureDROP_STAT_TABLE ProcedureEXPORT_COLUMN_STATS ProcedureEXPORT_DATABASE_STATS ProcedureEXPORT_DICTIONARY_STATS ProcedureEXPORT_FIXED_OBJECTS_STATS ProcedureEXPORT_INDEX_STATS ProcedureEXPORT_SCHEMA_STATS ProcedureEXPORT_SYSTEM_STATS ProcedureEXPORT_TABLE_STATS ProcedureFLUSH_DATABASE_MONITORING_INFO ProcedureGATHER_DATABASE_STATS ProceduresGATHER_DICTIONARY_STATS ProcedureGATHER_FIXED_OBJECTS_STATS ProcedureGATHER_INDEX_STATS ProcedureGATHER_SCHEMA_STATS ProceduresGATHER_SYSTEM_STATS ProcedureGATHER_TABLE_STATS ProcedureGENERATE_STATS ProcedureGET_COLUMN_STATS ProceduresGET_INDEX_STATS ProceduresGET_PARAM FunctionGET_STATS_HISTORY_AVAILABILITY FunctionGET_STATS_HISTORY_RETENTION FunctionGET_SYSTEM_STATS ProcedureGET_TABLE_STATS ProcedureIMPORT_COLUMN_STATS ProcedureIMPORT_DATABASE_STATS ProcedureIMPORT_DICTIONARY_STATS ProcedureIMPORT_FIXED_OBJECTS_STATS ProcedureIMPORT_INDEX_STATS ProcedureIMPORT_SCHEMA_STATS ProcedureIMPORT_SYSTEM_STATS ProcedureIMPORT_TABLE_STATS ProcedureLOCK_SCHEMA_STATS ProcedureLOCK_TABLE_STATS ProcedurePREPARE_COLUMN_VALUES ProceduresPREPARE_COLUMN_VALUES_NVARCHAR2 ProcedurePREPARE_COLUMN_VALUES_ROWID ProcedurePURGE_STATS ProcedureRESET_PARAM_DEFAULTS ProcedureRESTORE_DATABASE_STATS ProcedureRESTORE_DICTIONARY_STATS ProcedureRESTORE_FIXED_OBJECTS_STATS ProcedureRESTORE_SCHEMA_STATS ProcedureRESTORE_SYSTEM_STATS ProcedureRESTORE_TABLE_STATS ProcedureSET_COLUMN_STATS ProceduresSET_INDEX_STATS ProceduresSET_PARAM ProcedureSET_SYSTEM_STATS ProcedureSET_TABLE_STATS ProcedureUNLOCK_SCHEMA_STATS ProcedureUNLOCK_TABLE_STATS ProcedureUPGRADE_STAT_TABLE Procedure以DBMS_STATS.GATHER_SCHEMA_SATTS为例
exec dbms_stats.gather_schema_stats( -ownname => ‘SCOTT’, -options => ‘GATHER AUTO’, -estimate_percent => dbms_stats.auto_sample_size, -method_opt => ‘for all columns size repeat’, -degree => 15 -)
为了充分认识dbms_stats的好处,你需要仔细体会每一条主要的预编译指令(directive)。下面让我们研究每一条指令,并体会如何用它为基于代价的SQL优化器收集最高质量的统计数据。
options参数使用4个预设的方法之一,这个选项能控制Oracle统计的刷新方式:
gather——重新分析整个架构(Schema)。gather empty——只分析目前还没有统计的表。gather stale——只重新分析修改量超过10%的表(这些修改包括插入、更新和删除)。gather auto——重新分析当前没有统计的对象,以及统计数据过期(变脏)的对象。注意,使用gather auto类似于组合使用gather stale和gather empty。注意,无论gather stale还是gather auto,都要求进行监视。如果你执行一个alter table xxx monitoring命令,Oracle会用dba_tab_modifications视图来跟踪发生变动的表。这样一来,你就确切地知道,自从上一次分析统计数据以来,发生了多少次插入、更新和删除操作。
estimate_percent选项以下estimate_percent参数是一种比较新的设计,它允许Oracle的dbms_stats在收集统计数据时,自动估计要采样的一个segment的最佳百分比:estimate_percent => dbms_stats.auto_sample_size
要验证自动统计采样的准确性,你可检视dba_tables sample_size列。一个有趣的地方是,在使用自动采样时,Oracle会为一个样本尺寸选择5到20的百分比。记住,统计数据质量越好,CBO做出的决定越好。
method_opt选项dbms_stats的method_opt参数尤其适合在表和索引数据发生变化时刷新统计数据。method_opt参数也适合用于判断哪些列需要直方图(histograms)。
某些情况下,索引内的各个值的分布会影响CBO是使用一个索引还是执行一次全表扫描的决策。例如,假如在where子句中指定的值的数量不对称,全表扫描就显得比索引访问更经济。
如果你有一个高度倾斜的索引(某些值的行数不对称),就可创建Oracle直方图统计。但在现实世界中,出现这种情况的机率相当小。使用CBO时,最常见的错误之一就是在CBO统计中不必要地引入直方图。根据经验,只有在列值要求必须修改执行计划时,才应使用直方图。
为了智能地生成直方图,Oracle为dbms_stats准备了method_opt参数。在method_opt子句中,还有一些重要的新选项,包括skewonly,repeat和auto:method_opt=>’for all columns size skewonly’method_opt=>’for all columns size repeat’method_opt=>’for all columns size auto’
skewonly选项会耗费大量处理时间,因为它要检查每个索引中的每个列的值的分布情况。
假如dbms_stat发现一个索引的各个列分布得不均匀,就会为那个索引创建直方图,帮助基于代价的SQL优化器决定是进行索引访问,还是进行全表扫描访问。例如,在一个索引中,假定有一个列在50%的行中,如清单B所示,那么为了检索这些行,全表扫描的速度会快于索引扫描。–*************************************************************– SKEWONLY option—Detailed analysis–– Use this method for a first-time analysis for skewed indexes– This runs a long time because all indexes are examined–*************************************************************
begin dbms_stats.gather_schema_stats( ownname => ‘SCOTT’, estimate_percent => dbms_stats.auto_sample_size, method_opt => ‘for all columns size skewonly’, degree => 7 );end;重新分析统计数据时,使用repeat选项,重新分析任务所消耗的资源就会少一些。使用repeat选项(清单C)时,只会为现有的直方图重新分析索引,不再搜索其他直方图机会。定期重新分析统计数据时,你应该采取这种方式。–**************************************************************– REPEAT OPTION - Only reanalyze histograms for indexes– that have histograms–– Following the initial analysis, the weekly analysis– job will use the “repeat” option. The repeat option– tells dbms_stats that no indexes have changed, and– it will only reanalyze histograms for– indexes that have histograms.–**************************************************************begin dbms_stats.gather_schema_stats( ownname => ‘SCOTT’, estimate_percent => dbms_stats.auto_sample_size, method_opt => ‘for all columns size repeat’, degree => 7 );end;使用alter table xxx monitoring;命令来实现Oracle表监视时,需要使用dbms_stats中的auto选项。如清单D所示,auto选项根据数据分布以及应用程序访问列的方式(例如通过监视而确定的一个列的工作量)来创建直方图。使用method_opt=>’auto’类似于在dbms_stats的option参数中使用gather auto。begin dbms_stats.gather_schema_stats( ownname => ‘SCOTT’, estimate_percent => dbms_stats.auto_sample_size, method_opt => ‘for all columns size auto’, degree => 7 );end;
并行收集Oracle允许以并行方式来收集CBO统计数据,这就显著提高了收集统计数据的速度。但是,要想并行收集统计数据,你需要一台安装了多个CPU的SMP服务器。
更快的执行速度dbms_stats是提高SQL执行速度的一种出色机制。通过使用dbms_stats来收集最高质量的统计数据,CBO能够正确判断执行任何SQL查询时的最快途径。dbms_stats还在不断地改进。目前,它的一些令人激动的新特性(自动样本大小和自动直方图生成)已经显著简化了Oracle专家的工作。
详细DBMS包见 http://lbdwww.epfl.ch/f/teaching/courses/oracle8i/server.815/a68001/dbms_sta.htm
11/04/2008
Oracle Audit
1、什么是审计
审计(Audit)用于监视用户所执行的数据库操作,并且Oracle会将审计跟踪结果存放到OS文件(默认位置为$ORACLE_BASE/admin/$ORACLE_SID/adump/)或数据库(存储在system表空间中的SYS.AUD$表中,可通过视图dba_audit_trail查看)中。默认情况下审计是没有开启的。
不管你是否打开数据库的审计功能,以下这些操作系统会强制记录:用管理员权限连接Instance;启动数据库;关闭数据库。
2、和审计相关的两个主要参数
Audit_sys_operations:
默认为false,当设置为true时,所有sys用户(包括以sysdba,sysoper身份登录的用户)的操作都会被记录,audit trail不会写在aud$表中,这个很好理解,如果数据库还未启动aud$不可用,那么像conn /as sysdba这样的连接信息,只能记录在其它地方。如果是windows平台,audti trail会记录在windows的事件管理中,如果是linux/unix平台则会记录在audit_file_dest参数指定的文件中。
Audit_trail:
None:是默认值,不做审计;
DB:将audit trail 记录在数据库的审计相关表中,如aud$,审计的结果只有连接信息;
DB,Extended:这样审计结果里面除了连接信息还包含了当时执行的具体语句;
OS:将audit trail 记录在操作系统文件中,文件名由audit_file_dest参数指定;
XML:10g里新增的。
注:这两个参数是static参数,需要重新启动数据库才能生效。
3、审计级别
当开启审计功能后,可在三个级别对数据库进行审计:Statement(语句)、Privilege(权限)、object(对象)。
Statement:
按语句来审计,比如audit table 会审计数据库中所有的create table,drop table,truncate table语句,alter session by cmy会审计cmy用户所有的数据库连接。
Privilege:
按权限来审计,当用户使用了该权限则被审计,如执行grant select any table to a,当执行了audit select any table语句后,当用户a 访问了用户b的表时(如select * from b.t)会用到select any table权限,故会被审计。注意用户是自己表的所有者,所以用户访问自己的表不会被审计。
Object:
按对象审计,只审计on关键字指定对象的相关操作,如aduit alter,delete,drop,insert on cmy.t by scott; 这里会对cmy用户的t表进行审计,但同时使用了by子句,所以只会对scott用户发起的操作进行审计。注意Oracle没有提供对schema中所有对象的审计功能,只能一个一个对象审计,对于后面创建的对象,Oracle则提供on default子句来实现自动审计,比如执行audit drop on default by access;后, 对于随后创建的对象的drop操作都会审计。但这个default会对之后创建的所有数据库对象有效,似乎没办法指定只对某个用户创建的对象有效,想比trigger可以对schema的DDL进行“审计”,这个功能稍显不足。
4、审计的一些其他选项
by access / by session:
by access 每一个被审计的操作都会生成一条audit trail。
by session 一个会话里面同类型的操作只会生成一条audit trail,默认为by session。
whenever [not] successful:
whenever successful 操作成功(dba_audit_trail中returncode字段为0) 才审计,
whenever not successful 反之。省略该子句的话,不管操作成功与否都会审计。
5、和审计相关的视图
dba_audit_trail:保存所有的audit trail,实际上它只是一个基于aud$的视图。其它的视图dba_audit_session,dba_audit_object,dba_audit_statement都只是dba_audit_trail的一个子集。
dba_stmt_audit_opts:可以用来查看statement审计级别的audit options,即数据库设置过哪些statement级别的审计。dba_obj_audit_opts,dba_priv_audit_opts视图功能与之类似
all_def_audit_opts:用来查看数据库用on default子句设置了哪些默认对象审计。
6、取消审计
将对应审计语句的audit改为noaudit即可,如audit session whenever successful对应的取消审计语句为noaudit session whenever successful;
7、10g中的审计告知一切
Oracle 数据库 10g 审计以一种非常详细的级别捕获用户行为,它可以消除手动的、基于触发器的审计。
假定用户 Joe 具有更新那张表的权限,并按如下所示的方式更新了表中的一行数据:
update SCOTT.EMP set salary = 12000 where empno = 123456;
您如何在数据库中跟踪这种行为呢?在 Oracle 9i 数据库及其较低版本中,审计只能捕获“谁”执行此操作,而不能捕获执行了“什么”内容。例如,它让您知道 Joe 更新了 SCOTT 所有的表EMP,但它不会显示他更新了该表中员工号为 123456 的薪水列。它不会显示更改前的薪水列的值 — 要捕获如此详细的更改,您将不得不编写您自己的触发器来捕获更改前的值,或使用 LogMiner 将它们从存档日志中检索出来。
细粒度审计(FGA) ,是在 Oracle 9i 中引入的,能够记录 SCN 号和行级的更改以重建旧的数据,但是它们只能用于 select 语句,而不能用于 DML ,如 update 、insert 和delete 语句。因此,对于 Oracle 数据库 10g 之前的版本,使用触发器虽然对于以行级跟踪用户初始的更改是没有吸引力的选择,但它也是唯一可靠的方法。
8、实例讲解
8.1、激活审计
SQL> conn /as sysdba
SQL> show parameter audit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/ORCL/adump
audit_sys_operations boolean FALSE
audit_syslog_level string
audit_trail string NONE
SQL> alter system set audit_sys_operations=TRUE scope=spfile; --审计管理用户(以sysdba/sysoper角色登陆)
SQL> alter system set audit_trail=db,extended scope=spfile;
SQL> startup force;
SQL> show parameter audit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/ORCL/adump
audit_sys_operations boolean TRUE
audit_syslog_level string
audit_trail string DB, EXTENDED
8.2、开始审计
SQL> conn /as sysdba
SQL> audit all on t_test;
SQL> conn u_test
SQL> select * from t_test;
SQL> insert into u_test.t_test (c2,c5) values ('test1','2');
SQL> commit;
SQL> delete from u_test.t_test;
SQL> commit;
SQL> conn /as sysdba
SQL> col DEST_NAME format a30
col OS_USERNAME format a15
col USERNAME format a15
col USERHOST format a15
col TERMINAL format a15
col OBJ_NAME format a30
col SQL_TEXT format a60
SQL> select OS_USERNAME,username,USERHOST,TERMINAL,TIMESTAMP,OWNER,obj_name,ACTION_NAME,sessionid,os_process,sql_text from dba_audit_trail;
sql> audit select table by u_test by access;
如果在命令后面添加by user则只对user的操作进行审计,如果省去by用户,则对系统中所有的用户进行审计(不包含sys用户).
例:
AUDIT DELETE ANY TABLE; --审计删除表的操作
AUDIT DELETE ANY TABLE WHENEVER NOT SUCCESSFUL; --只审计删除失败的情况
AUDIT DELETE ANY TABLE WHENEVER SUCCESSFUL; --只审计删除成功的情况
AUDIT DELETE,UPDATE,INSERT ON user.table by test; --审计test用户对表user.table的delete,update,insert操作
8.3、撤销审计
SQL> noaudit all on t_test;
9、精细审计
9.1、创建审计标记
SQL> exec dbms_fga.add_policy(object_schema=>'ryan',object_name=>'test',policy_name=>'chk_test',statement_types=>'select');
9.2、开启审计
SQL> exec DBMS_FGA.ENABLE_POLICY(object_schema=>'ryan' ,object_name=>'test' ,policy_name=>'chk_test');
9.3、查看审计记录
SQL> conn system/811226@ryan123
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as system
SQL> SELECT session_id,TIMESTAMP,db_user,os_user,userhost,sql_text FROM Dba_Fga_Audit_Trail;
SESSION_ID TIMESTAMP DB_USER OS_USER USERHOST SQL_TEXT
---------- ----------- ------------------------------ -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
201 2008-11-4 2 RYAN Ryan WORKGROUP\LENOVO-C30DA497 select * from test
9.4、关闭审计
SQL> exec DBMS_FGA.DISABLE_POLICY(object_schema=>'ryan' ,object_name=>'TEST' ,policy_name=>'chk_test');
9.5、删除审计标记
SQL> exec DBMS_FGA.DROP_POLICY(object_schema=>'ryan' ,object_name=>'TEST' ,policy_name=>'chk_test');
审计(Audit)用于监视用户所执行的数据库操作,并且Oracle会将审计跟踪结果存放到OS文件(默认位置为$ORACLE_BASE/admin/$ORACLE_SID/adump/)或数据库(存储在system表空间中的SYS.AUD$表中,可通过视图dba_audit_trail查看)中。默认情况下审计是没有开启的。
不管你是否打开数据库的审计功能,以下这些操作系统会强制记录:用管理员权限连接Instance;启动数据库;关闭数据库。
2、和审计相关的两个主要参数
Audit_sys_operations:
默认为false,当设置为true时,所有sys用户(包括以sysdba,sysoper身份登录的用户)的操作都会被记录,audit trail不会写在aud$表中,这个很好理解,如果数据库还未启动aud$不可用,那么像conn /as sysdba这样的连接信息,只能记录在其它地方。如果是windows平台,audti trail会记录在windows的事件管理中,如果是linux/unix平台则会记录在audit_file_dest参数指定的文件中。
Audit_trail:
None:是默认值,不做审计;
DB:将audit trail 记录在数据库的审计相关表中,如aud$,审计的结果只有连接信息;
DB,Extended:这样审计结果里面除了连接信息还包含了当时执行的具体语句;
OS:将audit trail 记录在操作系统文件中,文件名由audit_file_dest参数指定;
XML:10g里新增的。
注:这两个参数是static参数,需要重新启动数据库才能生效。
3、审计级别
当开启审计功能后,可在三个级别对数据库进行审计:Statement(语句)、Privilege(权限)、object(对象)。
Statement:
按语句来审计,比如audit table 会审计数据库中所有的create table,drop table,truncate table语句,alter session by cmy会审计cmy用户所有的数据库连接。
Privilege:
按权限来审计,当用户使用了该权限则被审计,如执行grant select any table to a,当执行了audit select any table语句后,当用户a 访问了用户b的表时(如select * from b.t)会用到select any table权限,故会被审计。注意用户是自己表的所有者,所以用户访问自己的表不会被审计。
Object:
按对象审计,只审计on关键字指定对象的相关操作,如aduit alter,delete,drop,insert on cmy.t by scott; 这里会对cmy用户的t表进行审计,但同时使用了by子句,所以只会对scott用户发起的操作进行审计。注意Oracle没有提供对schema中所有对象的审计功能,只能一个一个对象审计,对于后面创建的对象,Oracle则提供on default子句来实现自动审计,比如执行audit drop on default by access;后, 对于随后创建的对象的drop操作都会审计。但这个default会对之后创建的所有数据库对象有效,似乎没办法指定只对某个用户创建的对象有效,想比trigger可以对schema的DDL进行“审计”,这个功能稍显不足。
4、审计的一些其他选项
by access / by session:
by access 每一个被审计的操作都会生成一条audit trail。
by session 一个会话里面同类型的操作只会生成一条audit trail,默认为by session。
whenever [not] successful:
whenever successful 操作成功(dba_audit_trail中returncode字段为0) 才审计,
whenever not successful 反之。省略该子句的话,不管操作成功与否都会审计。
5、和审计相关的视图
dba_audit_trail:保存所有的audit trail,实际上它只是一个基于aud$的视图。其它的视图dba_audit_session,dba_audit_object,dba_audit_statement都只是dba_audit_trail的一个子集。
dba_stmt_audit_opts:可以用来查看statement审计级别的audit options,即数据库设置过哪些statement级别的审计。dba_obj_audit_opts,dba_priv_audit_opts视图功能与之类似
all_def_audit_opts:用来查看数据库用on default子句设置了哪些默认对象审计。
6、取消审计
将对应审计语句的audit改为noaudit即可,如audit session whenever successful对应的取消审计语句为noaudit session whenever successful;
7、10g中的审计告知一切
Oracle 数据库 10g 审计以一种非常详细的级别捕获用户行为,它可以消除手动的、基于触发器的审计。
假定用户 Joe 具有更新那张表的权限,并按如下所示的方式更新了表中的一行数据:
update SCOTT.EMP set salary = 12000 where empno = 123456;
您如何在数据库中跟踪这种行为呢?在 Oracle 9i 数据库及其较低版本中,审计只能捕获“谁”执行此操作,而不能捕获执行了“什么”内容。例如,它让您知道 Joe 更新了 SCOTT 所有的表EMP,但它不会显示他更新了该表中员工号为 123456 的薪水列。它不会显示更改前的薪水列的值 — 要捕获如此详细的更改,您将不得不编写您自己的触发器来捕获更改前的值,或使用 LogMiner 将它们从存档日志中检索出来。
细粒度审计(FGA) ,是在 Oracle 9i 中引入的,能够记录 SCN 号和行级的更改以重建旧的数据,但是它们只能用于 select 语句,而不能用于 DML ,如 update 、insert 和delete 语句。因此,对于 Oracle 数据库 10g 之前的版本,使用触发器虽然对于以行级跟踪用户初始的更改是没有吸引力的选择,但它也是唯一可靠的方法。
8、实例讲解
8.1、激活审计
SQL> conn /as sysdba
SQL> show parameter audit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/ORCL/adump
audit_sys_operations boolean FALSE
audit_syslog_level string
audit_trail string NONE
SQL> alter system set audit_sys_operations=TRUE scope=spfile; --审计管理用户(以sysdba/sysoper角色登陆)
SQL> alter system set audit_trail=db,extended scope=spfile;
SQL> startup force;
SQL> show parameter audit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/ORCL/adump
audit_sys_operations boolean TRUE
audit_syslog_level string
audit_trail string DB, EXTENDED
8.2、开始审计
SQL> conn /as sysdba
SQL> audit all on t_test;
SQL> conn u_test
SQL> select * from t_test;
SQL> insert into u_test.t_test (c2,c5) values ('test1','2');
SQL> commit;
SQL> delete from u_test.t_test;
SQL> commit;
SQL> conn /as sysdba
SQL> col DEST_NAME format a30
col OS_USERNAME format a15
col USERNAME format a15
col USERHOST format a15
col TERMINAL format a15
col OBJ_NAME format a30
col SQL_TEXT format a60
SQL> select OS_USERNAME,username,USERHOST,TERMINAL,TIMESTAMP,OWNER,obj_name,ACTION_NAME,sessionid,os_process,sql_text from dba_audit_trail;
sql> audit select table by u_test by access;
如果在命令后面添加by user则只对user的操作进行审计,如果省去by用户,则对系统中所有的用户进行审计(不包含sys用户).
例:
AUDIT DELETE ANY TABLE; --审计删除表的操作
AUDIT DELETE ANY TABLE WHENEVER NOT SUCCESSFUL; --只审计删除失败的情况
AUDIT DELETE ANY TABLE WHENEVER SUCCESSFUL; --只审计删除成功的情况
AUDIT DELETE,UPDATE,INSERT ON user.table by test; --审计test用户对表user.table的delete,update,insert操作
8.3、撤销审计
SQL> noaudit all on t_test;
9、精细审计
9.1、创建审计标记
SQL> exec dbms_fga.add_policy(object_schema=>'ryan',object_name=>'test',policy_name=>'chk_test',statement_types=>'select');
9.2、开启审计
SQL> exec DBMS_FGA.ENABLE_POLICY(object_schema=>'ryan' ,object_name=>'test' ,policy_name=>'chk_test');
9.3、查看审计记录
SQL> conn system/811226@ryan123
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as system
SQL> SELECT session_id,TIMESTAMP,db_user,os_user,userhost,sql_text FROM Dba_Fga_Audit_Trail;
SESSION_ID TIMESTAMP DB_USER OS_USER USERHOST SQL_TEXT
---------- ----------- ------------------------------ -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
201 2008-11-4 2 RYAN Ryan WORKGROUP\LENOVO-C30DA497 select * from test
9.4、关闭审计
SQL> exec DBMS_FGA.DISABLE_POLICY(object_schema=>'ryan' ,object_name=>'TEST' ,policy_name=>'chk_test');
9.5、删除审计标记
SQL> exec DBMS_FGA.DROP_POLICY(object_schema=>'ryan' ,object_name=>'TEST' ,policy_name=>'chk_test');
11/02/2008
install Oracle10.2 on rhel4(oracle) u6 手札
参考至 http://www.oracle.com/technology/pub/articles/smiley_10gdb_install.html
1.安装好检查好Oracle的必须包,如果没有的在linux安装盘找到并安装之
[root@localhost RPMS]#rpm -q binutils compat-db control-center gcc gcc-c++ glibc glibc-common \gnome-libs libstdc++ libstdc++-devel make pdksh sysstat xscreensaver libaio openmotif21
glibc-common-2.3.4-2.39
libstdc++-devel-3.4.6-9.0.1
sysstat-5.0.5-16.rhel4
glibc-2.3.4-2.39
libstdc++-3.4.6-9.0.1
binutils-2.15.92.0.2-24
make-3.80-6.EL4
pdksh-5.2.14-30.6
gnome-libs-1.4.1.2.90-44.2
xscreensaver-4.18-5.rhel4.14.0.1
control-center-2.8.0-12.rhel4.5
gcc-3.4.6-9.0.1
libaio-0.3.105-2
openmotif21-2.1.30-11.RHEL4.6
compat-db-4.1.25-9
gcc-c++-3.4.6-9.0.1
2.检查系统的内存以及swap大小,安装空间大小
[root@localhost ~]# grep MemTotal /proc/meminfo
MemTotal: 1034564 kB <== 最小1G
[root@localhost ~]# grep SwapTotal /proc/meminfo
SwapTotal: 1052248 kB <== 最小1G
[root@localhost ~]# df -h <== 2.5G空间即可
Filesystem 容量 已用 可用 已用% 挂载点
/dev/sda3 19G 3.4G 15G 20% /
/dev/sda1 99M 12M 83M 13% /boot
none 506M 0 506M 0% /dev/shm
/dev/hdc 452M 452M 0 100% /mnt
3.创建Oracle用户组以及用户
[root@localhost ~]# groupadd oinstall
[root@localhost ~]# groupadd dba
[root@localhost ~]# useradd -m -g oinstall -G dba oracle
[root@localhost ~]# id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba)
[root@localhost ~]# passwd oracle <== 为Oracle用户设置密码
4.修改系统参数
修改/etc/sysctl.conf 文件, 增加如下:
kernel.shmmax=1073741824
kernel.shmmni=4096
kernel.shmall=2097152
kernel.sem=250 322000 100 128
fs.file-max=65536
net.ipv4.ip_local_port_range=1024 65000
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=262144
net.core.wmem_max=262144
设置oracle用户的环境变量
[root@localhost ~]# su - oracle
[oracle@localhost ~]$ vi .bash_profile
PATH=$PATH:$HOME/bin
export LD_ASSUME_KERNEL=2.4.19
export ORACLE_BASE=/opt/ora10
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0
export ORACLE_SID=Ryan
export NLS_LANG=AMERICAN
export LD_LIBRARY_PATH=$ORACLE_HOME/bin:/lib:/usr/lib:/usr/local/lib
export PATH=$PATH:$ORACLE_HOME/bin
unset USERNAME
然后执行环境参数
oracle@localhost ~]$ . .bash_profile
5.创建ORACLE安装目录
[root@localhost ~]# mkdir -p /opt/ora10/product/10.2.0
[root@localhost ~]# mkdir /var/opt/oracle
[root@localhost ~]# chown oracle.dba /var/opt/oracle
[root@localhost ~]# chown -R oracle.dba /opt/ora10
6.正式安装
上传介质, 然后解压缩
[oracle@localhost ~]$unzip 10201_database_linux32.zip
[oracle@localhost ~]$startx
[oracle@localhost ~]$./home/oracle/database/runInstaller
1.安装好检查好Oracle的必须包,如果没有的在linux安装盘找到并安装之
[root@localhost RPMS]#rpm -q binutils compat-db control-center gcc gcc-c++ glibc glibc-common \gnome-libs libstdc++ libstdc++-devel make pdksh sysstat xscreensaver libaio openmotif21
glibc-common-2.3.4-2.39
libstdc++-devel-3.4.6-9.0.1
sysstat-5.0.5-16.rhel4
glibc-2.3.4-2.39
libstdc++-3.4.6-9.0.1
binutils-2.15.92.0.2-24
make-3.80-6.EL4
pdksh-5.2.14-30.6
gnome-libs-1.4.1.2.90-44.2
xscreensaver-4.18-5.rhel4.14.0.1
control-center-2.8.0-12.rhel4.5
gcc-3.4.6-9.0.1
libaio-0.3.105-2
openmotif21-2.1.30-11.RHEL4.6
compat-db-4.1.25-9
gcc-c++-3.4.6-9.0.1
2.检查系统的内存以及swap大小,安装空间大小
[root@localhost ~]# grep MemTotal /proc/meminfo
MemTotal: 1034564 kB <== 最小1G
[root@localhost ~]# grep SwapTotal /proc/meminfo
SwapTotal: 1052248 kB <== 最小1G
[root@localhost ~]# df -h <== 2.5G空间即可
Filesystem 容量 已用 可用 已用% 挂载点
/dev/sda3 19G 3.4G 15G 20% /
/dev/sda1 99M 12M 83M 13% /boot
none 506M 0 506M 0% /dev/shm
/dev/hdc 452M 452M 0 100% /mnt
3.创建Oracle用户组以及用户
[root@localhost ~]# groupadd oinstall
[root@localhost ~]# groupadd dba
[root@localhost ~]# useradd -m -g oinstall -G dba oracle
[root@localhost ~]# id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba)
[root@localhost ~]# passwd oracle <== 为Oracle用户设置密码
4.修改系统参数
修改/etc/sysctl.conf 文件, 增加如下:
kernel.shmmax=1073741824
kernel.shmmni=4096
kernel.shmall=2097152
kernel.sem=250 322000 100 128
fs.file-max=65536
net.ipv4.ip_local_port_range=1024 65000
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=262144
net.core.wmem_max=262144
设置oracle用户的环境变量
[root@localhost ~]# su - oracle
[oracle@localhost ~]$ vi .bash_profile
PATH=$PATH:$HOME/bin
export LD_ASSUME_KERNEL=2.4.19
export ORACLE_BASE=/opt/ora10
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0
export ORACLE_SID=Ryan
export NLS_LANG=AMERICAN
export LD_LIBRARY_PATH=$ORACLE_HOME/bin:/lib:/usr/lib:/usr/local/lib
export PATH=$PATH:$ORACLE_HOME/bin
unset USERNAME
然后执行环境参数
oracle@localhost ~]$ . .bash_profile
5.创建ORACLE安装目录
[root@localhost ~]# mkdir -p /opt/ora10/product/10.2.0
[root@localhost ~]# mkdir /var/opt/oracle
[root@localhost ~]# chown oracle.dba /var/opt/oracle
[root@localhost ~]# chown -R oracle.dba /opt/ora10
6.正式安装
上传介质, 然后解压缩
[oracle@localhost ~]$unzip 10201_database_linux32.zip
[oracle@localhost ~]$startx
[oracle@localhost ~]$./home/oracle/database/runInstaller
10/21/2008
登录em java.lang.Exception: No such metric
刚才使用一个dba帐号登录em,发现java.lang.Exception: No such metric错误,而且cpu等性能监控也无图.其解决方法:
emctl stop agent
set oracle_sid=SID
emctl resetTZ agent
然后再启动dbconsole就ok了
emctl stop agent
set oracle_sid=SID
emctl resetTZ agent
然后再启动dbconsole就ok了
安装及配置VNC
1.默认Red Hat Enterprise Linux的安装程序会将VNC服务和客户程序安装在系统上,可以检查系统上是否安装了VNC:
[root@MyRedHat ~]#rpm -q vnc-server
2.如果系统还没有安装VNC服务,可以把Red Hat Enterprise Linux的第二张安装光盘放入光驱进行加载,加载光驱后在光盘的RedHat/RPMS目录下找到VNC的安装包文件vnc-server-4.0-8.1.i386.rpm,可以使用下面的命令进行安装:
[root@MyRedHat ~]# cd /mnt/cdrom/RedHat/RPMS
[root@MyRedHat ~]# rpm –ivh vnc-server-4.0-8.1.i386.rpm
3.启动VNC命令:
[root@MyRedHat ~]# service vncserver start
设置自动运行VNC:使用ntsysv命令设置vncserver为自动启动
要使启动系统时VNC服务不自动开始,可以执行如下命令:
[root@MyRedHat ~]# chkconfig vncserver off
4.在服务器端可以用vncserver命令来启动VNC服务,命令格式为:vncserver :桌面号
[root@MyRedHat ~]# vncserver :1
VNC服务使用的端口号与桌面号相关,VNC服务使用的端口从5900开始,例如桌面号是“:1”,则使用的端口是5901;桌面号是“:2”,则使用的端口是5902,依次类推。基于Java的VNC客户程序Web服务端口从5800开始,它也与桌面号相关。如果Linux服务器开启了防火墙功能,需设置允许TCP协议相应的端口通过或关闭防火墙功能,如可以使用以下命令:
[root@MyRedHat ~]# /sbin/iptables-IINPUT-ptcp--dport5901-jACCEPT
[root@MyRedHat ~]# /sbin/iptables-IINPUT-ptcp--dport5801-jACCEPT
5.客户端访问VNC
打开浏览器访问https://Linux服务器的IP或域名:5801/会出现“VNCviewerforJava”界面,或者使用vnc客户端直接连接
[root@MyRedHat ~]#rpm -q vnc-server
2.如果系统还没有安装VNC服务,可以把Red Hat Enterprise Linux的第二张安装光盘放入光驱进行加载,加载光驱后在光盘的RedHat/RPMS目录下找到VNC的安装包文件vnc-server-4.0-8.1.i386.rpm,可以使用下面的命令进行安装:
[root@MyRedHat ~]# cd /mnt/cdrom/RedHat/RPMS
[root@MyRedHat ~]# rpm –ivh vnc-server-4.0-8.1.i386.rpm
3.启动VNC命令:
[root@MyRedHat ~]# service vncserver start
设置自动运行VNC:使用ntsysv命令设置vncserver为自动启动
要使启动系统时VNC服务不自动开始,可以执行如下命令:
[root@MyRedHat ~]# chkconfig vncserver off
4.在服务器端可以用vncserver命令来启动VNC服务,命令格式为:vncserver :桌面号
[root@MyRedHat ~]# vncserver :1
VNC服务使用的端口号与桌面号相关,VNC服务使用的端口从5900开始,例如桌面号是“:1”,则使用的端口是5901;桌面号是“:2”,则使用的端口是5902,依次类推。基于Java的VNC客户程序Web服务端口从5800开始,它也与桌面号相关。如果Linux服务器开启了防火墙功能,需设置允许TCP协议相应的端口通过或关闭防火墙功能,如可以使用以下命令:
[root@MyRedHat ~]# /sbin/iptables-IINPUT-ptcp--dport5901-jACCEPT
[root@MyRedHat ~]# /sbin/iptables-IINPUT-ptcp--dport5801-jACCEPT
5.客户端访问VNC
打开浏览器访问https://Linux服务器的IP或域名:5801/会出现“VNCviewerforJava”界面,或者使用vnc客户端直接连接
6/02/2008
看操作系统块大小
查看操作系统块大小
在WINDOWS系统上,可以用命令fsutil来查看,测试如下:
C:\Documents and Settings\administrator>fsutil fsinfo ntfsinfo c:
NTFS 卷序列号 : 0x72ccb5f2ccb5b129
版本 : 3.1
区数量 : 0x0000000008ff8235
簇总数 : 0x00000000011ff046
可用簇 : 0x0000000000547b73
保留总数 : 0x0000000000000050
每个扇区字节数 : 512
每个簇字节数 : 4096
每个 FileRecord 段的字节数 : 1024
每个 FileRecord 段的簇数 : 0
Mft 有效数据长度 : 0x0000000009cac000
Mft 起始 Lcn : 0x00000000000c4df6
Mft2 起始 Lcn : 0x00000000008ff823
Mft 区域起始 : 0x0000000001067920
Mft 区域结尾 : 0x000000000108ce60
上面簇字节数既为块大小。
在linux系统上,可以用命令tune2fs ,测试如下
[root@localhost test10g]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 8776068 7576504 753764 91% /
/dev/sda1 497829 16303 455824 4% /boot
none 517300 0 517300 0% /dev/shm
/dev/sda5 1035660 96452 886600 10% /tmp
[root@localhost test10g]# tune2fs -l /dev/sda1|grep Block
Block count: 514048
Block size: 1024
Blocks per group: 8192
[root@localhost test10g]# tune2fs -l /dev/sda2|grep Block
Block count: 2229018
Block size: 4096
Blocks per group: 32768
上面Block size即为块大小。
在Solaris系统上,可以用命令fstyp,测试如下:
bash-2.05# fstyp -v /dev/rdsk/c0t2d0s0 |more
ufs
magic 11954 format dynamic time Mon Nov 4 17:46:05 2002
sblkno 16 cblkno 24 iblkno 28 dblkno 408
sbsize 2048 cgsize 4096 cgoffset 160 cgmask 0xfffffff0
ncg 697 size 17827200 blocks 17553949
bsize 4096 shift 12 mask 0xfffff000
fsize 1024 shift 10 mask 0xfffffc00
frag 4 shift 2 fsbtodb 1
minfree 1% maxbpg 1024 optim time
maxcontig 256 rotdelay 0ms rps 120
csaddr 408 cssize 11264 shift 8 mask 0xffffff00
ntrak 10 nsect 320 spc 3200 ncyl 11142
cpg 16 bpg 6400 fpg 25600 ipg 3040
nindir 1024 inopb 32 nspf 2
nbfree 4388485 ndir 2 nifree 2118876 nffree 4
cgrotor 0 fmod 0 ronly 0 logbno 0
上面sbsize即为块大小。
在WINDOWS系统上,可以用命令fsutil来查看,测试如下:
C:\Documents and Settings\administrator>fsutil fsinfo ntfsinfo c:
NTFS 卷序列号 : 0x72ccb5f2ccb5b129
版本 : 3.1
区数量 : 0x0000000008ff8235
簇总数 : 0x00000000011ff046
可用簇 : 0x0000000000547b73
保留总数 : 0x0000000000000050
每个扇区字节数 : 512
每个簇字节数 : 4096
每个 FileRecord 段的字节数 : 1024
每个 FileRecord 段的簇数 : 0
Mft 有效数据长度 : 0x0000000009cac000
Mft 起始 Lcn : 0x00000000000c4df6
Mft2 起始 Lcn : 0x00000000008ff823
Mft 区域起始 : 0x0000000001067920
Mft 区域结尾 : 0x000000000108ce60
上面簇字节数既为块大小。
在linux系统上,可以用命令tune2fs ,测试如下
[root@localhost test10g]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 8776068 7576504 753764 91% /
/dev/sda1 497829 16303 455824 4% /boot
none 517300 0 517300 0% /dev/shm
/dev/sda5 1035660 96452 886600 10% /tmp
[root@localhost test10g]# tune2fs -l /dev/sda1|grep Block
Block count: 514048
Block size: 1024
Blocks per group: 8192
[root@localhost test10g]# tune2fs -l /dev/sda2|grep Block
Block count: 2229018
Block size: 4096
Blocks per group: 32768
上面Block size即为块大小。
在Solaris系统上,可以用命令fstyp,测试如下:
bash-2.05# fstyp -v /dev/rdsk/c0t2d0s0 |more
ufs
magic 11954 format dynamic time Mon Nov 4 17:46:05 2002
sblkno 16 cblkno 24 iblkno 28 dblkno 408
sbsize 2048 cgsize 4096 cgoffset 160 cgmask 0xfffffff0
ncg 697 size 17827200 blocks 17553949
bsize 4096 shift 12 mask 0xfffff000
fsize 1024 shift 10 mask 0xfffffc00
frag 4 shift 2 fsbtodb 1
minfree 1% maxbpg 1024 optim time
maxcontig 256 rotdelay 0ms rps 120
csaddr 408 cssize 11264 shift 8 mask 0xffffff00
ntrak 10 nsect 320 spc 3200 ncyl 11142
cpg 16 bpg 6400 fpg 25600 ipg 3040
nindir 1024 inopb 32 nspf 2
nbfree 4388485 ndir 2 nifree 2118876 nffree 4
cgrotor 0 fmod 0 ronly 0 logbno 0
上面sbsize即为块大小。
4/28/2008
启动oracle Apache的时候报错
启动oracle Apache的时候报错httpd could not be started
解决方法:设置display
e.g:export DISPLAY=192.168.1.128:0.0
解决方法:设置display
e.g:export DISPLAY=192.168.1.128:0.0
4/21/2008
关于Oralce9i常见故障问题和性能问题的自测题
常见故障问题:
1. 初始化参数设置错了,不能启动实例怎么办?
2. 控制文件没了,怎么加载数据库?
3. 日志文件丢了,如何打开数据库?
4. 数据文件损坏了,又没备份,怎么修复?
5. 有数据库坏块的表如何导出?
6. 如何知道用户何时做了哪些操作?
7. 如何利用FLASHBACK来修复数据?
8. 违反约束,数据加载不上怎么办?
9. SYS密码忘记了怎么办?
10. SYSMAN密码忘记了怎么办?
11. 侦听器经常出问题怎么办?
常见性能问题:
1. 你在使用数据库时是否把数据库看成是一个“黑盒子”?
2. 你作为DBA,知道应该做哪些日常管理工作吗?
3. 你了解影响数据库性能的主要初始化参数吗?
4. 你关注警告日志文件吗?
5. 你精通数据字典吗?
6. 你看得懂STATSPACK报告吗?
7. 你是否觉得ORACLE的内存结构是越大越好?
8. 你知道软分析和硬分析的危害吗?
9. 你是否将常用的过程代码销钉在共享池中了吗?
10. 你了解常见等待事件的含义吗?
11. 你是否体会到了绑定变量的重要性?
12. 你的ORACLE9i中有几种块的大小?
13. 你是否了解ORACLE的“黄金法则”?
14. 你是否出现已经有了索引而查询时仍然执行全表扫描?
15. 你觉得SQL语句的写法重要吗?
16. 你跟踪用户的SQL语句吗?
17. 你经常分析TOP EVENTS和TOP SQL吗?
18. 你喜欢空间的自动分配还是手工分配?
19. 你关注磁盘I/O吗?
20. 你关心争用吗?
21. 你会选择表分区、索引分区、簇等存储结构吗?
22. 你经常查看高端水印吗?
23. 你做表和索引的重组吗?
24. 你关心行迁移和行链接吗?
25. 你经常收集统计数据吗?
26. 你了解CBO和RBO吗?
27. 你理解SCN吗?
28. 你做计划的稳定性吗?
29. 你会改变ORACLE的默认行为吗?
30. 你理解并行控制和锁吗?
31. 你什么情况下使用ORACLE共享服务器?
1. 初始化参数设置错了,不能启动实例怎么办?
2. 控制文件没了,怎么加载数据库?
3. 日志文件丢了,如何打开数据库?
4. 数据文件损坏了,又没备份,怎么修复?
5. 有数据库坏块的表如何导出?
6. 如何知道用户何时做了哪些操作?
7. 如何利用FLASHBACK来修复数据?
8. 违反约束,数据加载不上怎么办?
9. SYS密码忘记了怎么办?
10. SYSMAN密码忘记了怎么办?
11. 侦听器经常出问题怎么办?
常见性能问题:
1. 你在使用数据库时是否把数据库看成是一个“黑盒子”?
2. 你作为DBA,知道应该做哪些日常管理工作吗?
3. 你了解影响数据库性能的主要初始化参数吗?
4. 你关注警告日志文件吗?
5. 你精通数据字典吗?
6. 你看得懂STATSPACK报告吗?
7. 你是否觉得ORACLE的内存结构是越大越好?
8. 你知道软分析和硬分析的危害吗?
9. 你是否将常用的过程代码销钉在共享池中了吗?
10. 你了解常见等待事件的含义吗?
11. 你是否体会到了绑定变量的重要性?
12. 你的ORACLE9i中有几种块的大小?
13. 你是否了解ORACLE的“黄金法则”?
14. 你是否出现已经有了索引而查询时仍然执行全表扫描?
15. 你觉得SQL语句的写法重要吗?
16. 你跟踪用户的SQL语句吗?
17. 你经常分析TOP EVENTS和TOP SQL吗?
18. 你喜欢空间的自动分配还是手工分配?
19. 你关注磁盘I/O吗?
20. 你关心争用吗?
21. 你会选择表分区、索引分区、簇等存储结构吗?
22. 你经常查看高端水印吗?
23. 你做表和索引的重组吗?
24. 你关心行迁移和行链接吗?
25. 你经常收集统计数据吗?
26. 你了解CBO和RBO吗?
27. 你理解SCN吗?
28. 你做计划的稳定性吗?
29. 你会改变ORACLE的默认行为吗?
30. 你理解并行控制和锁吗?
31. 你什么情况下使用ORACLE共享服务器?
4/17/2008
windows下更改ip导致10g em服务dbconsole启动不了
1.将listener.ora,LISTENER里的host的ip地址改为本机主机名。
2.修改windows的host文件,加入IP地址 主机名,例如:192.168.1.115 LENOVO-C30DA497
重新启动dbconsole就可以了
2.修改windows的host文件,加入IP地址 主机名,例如:192.168.1.115 LENOVO-C30DA497
重新启动dbconsole就可以了
4/09/2008
ORACLE 9I&10G置归档方法
在ORACLE9i和10G置归方式略有差别,不过差别不是很大。如果不小心可能会导致数据库不能打开,所以在此做了一些总结。
在数据库打开后,用SHOW parameter spfile命令查看当前是否是由SPFILE打开数据库。如果数据库是使用SPFILE则会显示具体的路径和SPFILE名,否则显示结果为空,表示使用了INIT参数文件。推荐最好使用SPFILE,因为我们在置归档的时候会动态修改参数,这样会更方便一些。
9I:
1.备份初始化参数文件
sql> create pfile from spfile;
我们备份参数文件的目的是为了避免在置归档过程中的误操作对数据库造成故障,以便能够使用我们备份的参数文件来恢复数据库。如果不加参数文件的目标路径,在WINDOWS中,默认会放在ORACLE_HOME\DATABASE中,如果是LINUX则会在ORACLE_HOME\dbs中。
2.配置归档日志的名称格式
sql>alter system set log_archvie_format='%S_%T.log' scope=spfile
3.配置归档位置
sql>alter system set log_archive_dest_1='location=e:\oracle\oradata\archive' scope=spfile
在ORACLE 9I企业版里还可以配置多个归档路径,log_archvile_dest_n(其中n可以为1-10)。而在9I标准版里只能设置两个归档路径,另一个的参参数为log_archive_dest_duplex="PATH"
4.设置归档进程自动启动
sql>alter system set log_archive_start=true scope=spfile
如果没有将归档设置为自动启动,则在归档里程会出错
5. 置归档模式
将数据库正常关闭
sql>shutdown immediate
启动到MOUNT模式
SQL>startup mount
置为归档模式
SQL>alter database archivelog
打开数据库
SQL>alter database open
查看数据库是否归档
SQL> archive log list;
如果显示为ENABLE则表示已成功归档
或 SQL>select log_mode from v$database;
如果为ARCHIVELOG则表示已成功归档
10G:
从ORACLE10G开始,改变日志模式已经变得很简单,很容易管理。在10G中,默认情况下,归档日志会存放到快速恢复区所对应的目录(
对应初始化参数db_recovery_file_dest),并且会按照特定的格式生成归档日志文件名。当想要将归档日志放在默认的路径下是,只需要参MOUNT状态执行Alter database archivelog即可。在10G中不需要对归档设置自动启动,因为这个参数已经10G摒弃掉,只要执行Alter database archivelog 就会自动置为自动归档。如果不想将归档日志放到默认路径,请执行下列步骤
1.备份初始化参数文件
sql> create pfile from spfile;
2.配置归档日志的名称格式
sql>alter system set log_archvie_format='%S_%T_%R.log' scope=spfile
在10G中设置日志格式时,一定要加%R参数,否则一定会出错
3.配置归档位置
sql>alter system set log_archive_dest_1='location=e:\oracle\oradata\archive' scope=spfile
在ORACLE 10G企业版里还可以配置多个归档路径,log_archvile_dest_n(其中n可以为1-10)
4. 置归档模式
将数据库正常关闭
sql>shutdown immediate
启动到MOUNT模式
SQL>startup mount
置为归档模式
SQL>alter database archivelog
打开数据库
SQL>alter database open
查看数据库是否归档
SQL> archive log list;
如果显示为ENABLE则表示已成功归档
或 SQL>select log_mode from v$database;
如果为ARCHIVELOG则表示已成功归档
在数据库打开后,用SHOW parameter spfile命令查看当前是否是由SPFILE打开数据库。如果数据库是使用SPFILE则会显示具体的路径和SPFILE名,否则显示结果为空,表示使用了INIT参数文件。推荐最好使用SPFILE,因为我们在置归档的时候会动态修改参数,这样会更方便一些。
9I:
1.备份初始化参数文件
sql> create pfile from spfile;
我们备份参数文件的目的是为了避免在置归档过程中的误操作对数据库造成故障,以便能够使用我们备份的参数文件来恢复数据库。如果不加参数文件的目标路径,在WINDOWS中,默认会放在ORACLE_HOME\DATABASE中,如果是LINUX则会在ORACLE_HOME\dbs中。
2.配置归档日志的名称格式
sql>alter system set log_archvie_format='%S_%T.log' scope=spfile
3.配置归档位置
sql>alter system set log_archive_dest_1='location=e:\oracle\oradata\archive' scope=spfile
在ORACLE 9I企业版里还可以配置多个归档路径,log_archvile_dest_n(其中n可以为1-10)。而在9I标准版里只能设置两个归档路径,另一个的参参数为log_archive_dest_duplex="PATH"
4.设置归档进程自动启动
sql>alter system set log_archive_start=true scope=spfile
如果没有将归档设置为自动启动,则在归档里程会出错
5. 置归档模式
将数据库正常关闭
sql>shutdown immediate
启动到MOUNT模式
SQL>startup mount
置为归档模式
SQL>alter database archivelog
打开数据库
SQL>alter database open
查看数据库是否归档
SQL> archive log list;
如果显示为ENABLE则表示已成功归档
或 SQL>select log_mode from v$database;
如果为ARCHIVELOG则表示已成功归档
10G:
从ORACLE10G开始,改变日志模式已经变得很简单,很容易管理。在10G中,默认情况下,归档日志会存放到快速恢复区所对应的目录(
对应初始化参数db_recovery_file_dest),并且会按照特定的格式生成归档日志文件名。当想要将归档日志放在默认的路径下是,只需要参MOUNT状态执行Alter database archivelog即可。在10G中不需要对归档设置自动启动,因为这个参数已经10G摒弃掉,只要执行Alter database archivelog 就会自动置为自动归档。如果不想将归档日志放到默认路径,请执行下列步骤
1.备份初始化参数文件
sql> create pfile from spfile;
2.配置归档日志的名称格式
sql>alter system set log_archvie_format='%S_%T_%R.log' scope=spfile
在10G中设置日志格式时,一定要加%R参数,否则一定会出错
3.配置归档位置
sql>alter system set log_archive_dest_1='location=e:\oracle\oradata\archive' scope=spfile
在ORACLE 10G企业版里还可以配置多个归档路径,log_archvile_dest_n(其中n可以为1-10)
4. 置归档模式
将数据库正常关闭
sql>shutdown immediate
启动到MOUNT模式
SQL>startup mount
置为归档模式
SQL>alter database archivelog
打开数据库
SQL>alter database open
查看数据库是否归档
SQL> archive log list;
如果显示为ENABLE则表示已成功归档
或 SQL>select log_mode from v$database;
如果为ARCHIVELOG则表示已成功归档
3/21/2008
我的飞跃——非牛校非牛专业的普通人的飞跃(转)
其实还没开始飞,因为offer的材料还在路上,还没去签证,不过因为潜水了那么久,受益匪浅,写下总结。
本人大学英语专业02年毕业,属211的非牛校。02-04年在某一地方大学教英语,期间参加了GRE(800+570+5)和TOEFL(640+6)考试,04年申请6所学校的special education中据说最容易的专业,结果一个admission 来自Pennsylvania university,一个半奖,来自保底学校,其它学校无音讯,后来想想自己还是不愿意进行special education,故放弃。04年夏天来京“奋斗”,至今其中困难挫折不提。现在一五百强公司工作,结婚,生一健康聪明宝宝,现9个月大。07年初,以前所教一学生之老公赴美工作,在小两口的建议下,决定在GRE过期前在申请一次。过程:1. 选专业:看到聪明的孩子和别人家聪明的孩子以及自己对孩子的喜爱,决定学习幼儿教育。中国的超常儿童教育几乎空白,社会上对超常儿童又有着偏见,我野心勃勃要改变现状,决定进行超常教育类,并定下长远目标——开创超常教育机构。2. 选学校:由于有一份高收入的好工作和幸福的家庭,对申请不是很热衷,但是心里的那个最初的梦想还在作怪,想来想去还是开始申请学校——不过最后选定了PurdueUniversity这一所。3. 重考托福:托福经过这么多年,换成了机考,由于平时工作加上孩子,没有复习,上考场前还不太了解有什么题型——还好最后安全通过。4. 寄材料:基本上都是04年申请时准备的材料整理一下:GPA、GPA的排名证明、diploma、成绩单。。又联系了以前的系主任和同事,把04年的推荐信稍作修改签了字。第三封推荐信是学生的老公代笔的,他是个博士后——不过应该不算重量级的推荐信。5. 套磁:发给教授A的信说很想在她底下工作,A也说希望看到我的材料。。。结果是A的同事B告诉我是我的advisor,晕。。除了告诉对方我需要funding外,基本就没有再套了。
感想:申请成功与否不在乎专业是否热门,在于是否自己定位准确,一封发自内心的PS很重要。推荐信要诚恳,牛人写的当然好,如果没有,就务实点,从不同侧面谈谈你的学习表现,平时为人出事儿,工作表现(如果有的话)。最后,就是保持良好的心态。祝各位成功飞跃,也祝自己签证顺利。
本人大学英语专业02年毕业,属211的非牛校。02-04年在某一地方大学教英语,期间参加了GRE(800+570+5)和TOEFL(640+6)考试,04年申请6所学校的special education中据说最容易的专业,结果一个admission 来自Pennsylvania university,一个半奖,来自保底学校,其它学校无音讯,后来想想自己还是不愿意进行special education,故放弃。04年夏天来京“奋斗”,至今其中困难挫折不提。现在一五百强公司工作,结婚,生一健康聪明宝宝,现9个月大。07年初,以前所教一学生之老公赴美工作,在小两口的建议下,决定在GRE过期前在申请一次。过程:1. 选专业:看到聪明的孩子和别人家聪明的孩子以及自己对孩子的喜爱,决定学习幼儿教育。中国的超常儿童教育几乎空白,社会上对超常儿童又有着偏见,我野心勃勃要改变现状,决定进行超常教育类,并定下长远目标——开创超常教育机构。2. 选学校:由于有一份高收入的好工作和幸福的家庭,对申请不是很热衷,但是心里的那个最初的梦想还在作怪,想来想去还是开始申请学校——不过最后选定了PurdueUniversity这一所。3. 重考托福:托福经过这么多年,换成了机考,由于平时工作加上孩子,没有复习,上考场前还不太了解有什么题型——还好最后安全通过。4. 寄材料:基本上都是04年申请时准备的材料整理一下:GPA、GPA的排名证明、diploma、成绩单。。又联系了以前的系主任和同事,把04年的推荐信稍作修改签了字。第三封推荐信是学生的老公代笔的,他是个博士后——不过应该不算重量级的推荐信。5. 套磁:发给教授A的信说很想在她底下工作,A也说希望看到我的材料。。。结果是A的同事B告诉我是我的advisor,晕。。除了告诉对方我需要funding外,基本就没有再套了。
感想:申请成功与否不在乎专业是否热门,在于是否自己定位准确,一封发自内心的PS很重要。推荐信要诚恳,牛人写的当然好,如果没有,就务实点,从不同侧面谈谈你的学习表现,平时为人出事儿,工作表现(如果有的话)。最后,就是保持良好的心态。祝各位成功飞跃,也祝自己签证顺利。
3/18/2008
美国真的很不好(转)
其实美国很不爽的,不爽的地方不胜枚举,搞得俺很不适应,现在列举其中的几个给大家分享。马上要去的同志千万要小心应对。
美国的空气太干净,所以俺的鼻孔老是很干净,一天下来,空空如也,再也不能享受经常挖鼻孔的快感和成就感,非常不爽。去New York的同志可能会好一点。
美国的街道初看上去一尘不染,鞋底都不会脏,仔细一看,其实不然,很脏!上面经常有粪便呀,鸟粪,鸽子和乌鸦等小鸟的,我们的街道就好多了,最多也就是杂物和垃圾多点,但是咱没有粪便呀。
美国很土,城市里高楼大厦太少,所谓的Los Angeles真是非常土啊,房子大都是两层的,也就是房前那点花园像样点。城建部门也不知怎么搞的,不会多搞几个"一年一个样,三年大变样"的变样工程嘛,不用谦虚,这方面还真应该向咱们中国人学校,不就多花点钱嘛,没钱就找老百姓收嘛,去去自己的土气要紧呀。除了大概New York 和Chicago等几个地方以外,很多城市里主要都是草地和树木,连个标志性建筑都没有,New York的世贸中心也不过如此嘛,还不如我们东方明珠高呢,更不用和我们的金茂大厦比了,而且很旧,总之是很差,最多也就是盈利多一点嘛,有一点经济效益。别的实在是没什么,哪有我们的工程好,没有经济效益,还有社会效益呢。
就说那到处都是的草地吧,看上去很美,绿油油的,经常还有人或躺或坐在上面。但是俺仔细一看,就敏锐的发现了其中简直不可忍受的脏。其一,上面有很多小鸟,有鸟不得有鸟粪嘛,哪像我们的草坪,上面最多有些果皮纸屑,包装袋垃圾杂物等,鸟是没有的,有也很少拉,可以忍受。哪像他们这样?白宫后面的南草坪也是一样,就这还接待江核心呢。这么多鸟就不说他了,不刺激他了。更为不能忍受的是还有很多老鼠,窜来窜去的,真恶心呀,这种老鼠全国都有,在Grand Canyon那里也很多,这些老鼠还向游人讨吃的,真应该好好灭灭鼠了,不过这种鼠和我们国家习见的老鼠不同,好像叫松鼠,反正也是一种老鼠吧。我们的国家就没有这种老鼠,有也被人民赶到深山老林人迹罕至的地方或抓到笼子里去了,哪能让它们这么猖狂。
美国人很傻,见人就傻笑,还要说"hello",谁跟你"hello"呀,又不认识你,要么就老是说"excuse me"。办点什么事就排队,还排的远远的,就不喜欢挤在一起,譬如俺挡住了路,老美就站在后面,嘴里喃喃的说着"excuse me",真笨哪,挤一下就过去了嘛。弄得俺现在一听到"excuse me"就过敏。连那些老黑也这样,不开枪也不动刀子,太不粗犷了。
最让俺受不了的是老美开车太衰,根本没有咱们国权路上的司机爽快,都红灯了,咱们的司机还能冲过去,老美差远了,俺只要在路口一做势要过马路,老美就停车了,我冲他们连连摆手示意你们走先,但是从未得逞,每次都是我走先,不爽啊!真想照着那些开的慢的汽车揣两脚解气。
美国号称是世界第一发达国家,俺看根中国根本没法比,那里很多地方简直就是原始森林和草地,太欠发达了,联合国就在美国,也不帮着开发一下先,开车出去,公路两边都是森林,好不容易才能在树荫掩映中看见一两所房子。而且树木那么大了,还不伐掉,俺看原因不外呼两个,一是老美不知道木材能卖钱,要么就是老美没有发达的伐木工具。森林都快把城市淹没了,我们西部的滥采滥伐的哥们真应该去援助他们一下。
俺出身于中国西部黄土高原,从小熟悉和喜欢那小风甚至无风起兮沙飞扬的英雄气象,现在北京乃至全国都要流行沙尘暴了,俺打心眼里高兴,在Texas和New England地区没有享受到,那也就算了。后来去了想象中"大漠孤烟直,长河落日圆"的Nevada和Arizona,也未能如愿,科罗拉多河倒是落日圆的,大漠孤烟直是不可能了,关键是没有烟,没有尘土呀,好好的一块沙漠,老美在上面密密的种上了草和树,意境全被破坏了。美国人命苦啊,享受不到在浓尘中敲腰鼓那样的真汉子豪情了,美国人很不严肃,平时嘻嘻哈哈也就原谅了,对国旗州旗这种神圣庄重的标志也乱开玩笑,真让人受不了。俺们前两天在UT Austin转悠,俺虽然入党未遂,但政治觉悟不低,突然发现这里的国旗和州旗都降了半旗,俺第一反应是Bush老兄驾崩了,这里挂的是他老人家的素,但是奇怪的是电视里没说呀,新闻联播里没有啊。抓了个舌头一打听才知道,原来那天是本学期最后一天,学校为感谢广大学生和教职员工一学期来的辛勤学习和工作,尤其是为纪念有人在这一学期中遭遇的不幸甚至死亡,特此降半旗。听完这个解释,俺哑然失笑。国旗州旗那是不得了的东东呀,烈士的鲜血染红的呀,怎么能随便
降呢,在我们这里只有巨牛的大牛伯驾崩了才降的,建国以来也就降过个位数次吧。洛阳火灾,石家庄爆炸算大事了吧,我们硬是屏住没降,他们学期结束也要降,理由也太牵强了嘛,学生学习,老师教书那都是分内的事,学生的遭遇不幸那是自己的事,按时足量交纳学费培养费才是最重要的。
学生的着装也问题很大,这不是小事,着装体现着复旦的形象,学习好不好无所谓,着装要整洁。但是那里的学生绝大多数都是汗衫短裤拖鞋,从UT到MIT到Harvard都一样,这怎么能算是国际一流的大学呢?而且很不重视政治思想教育,要出事的。
美国的空气太干净,所以俺的鼻孔老是很干净,一天下来,空空如也,再也不能享受经常挖鼻孔的快感和成就感,非常不爽。去New York的同志可能会好一点。
美国的街道初看上去一尘不染,鞋底都不会脏,仔细一看,其实不然,很脏!上面经常有粪便呀,鸟粪,鸽子和乌鸦等小鸟的,我们的街道就好多了,最多也就是杂物和垃圾多点,但是咱没有粪便呀。
美国很土,城市里高楼大厦太少,所谓的Los Angeles真是非常土啊,房子大都是两层的,也就是房前那点花园像样点。城建部门也不知怎么搞的,不会多搞几个"一年一个样,三年大变样"的变样工程嘛,不用谦虚,这方面还真应该向咱们中国人学校,不就多花点钱嘛,没钱就找老百姓收嘛,去去自己的土气要紧呀。除了大概New York 和Chicago等几个地方以外,很多城市里主要都是草地和树木,连个标志性建筑都没有,New York的世贸中心也不过如此嘛,还不如我们东方明珠高呢,更不用和我们的金茂大厦比了,而且很旧,总之是很差,最多也就是盈利多一点嘛,有一点经济效益。别的实在是没什么,哪有我们的工程好,没有经济效益,还有社会效益呢。
就说那到处都是的草地吧,看上去很美,绿油油的,经常还有人或躺或坐在上面。但是俺仔细一看,就敏锐的发现了其中简直不可忍受的脏。其一,上面有很多小鸟,有鸟不得有鸟粪嘛,哪像我们的草坪,上面最多有些果皮纸屑,包装袋垃圾杂物等,鸟是没有的,有也很少拉,可以忍受。哪像他们这样?白宫后面的南草坪也是一样,就这还接待江核心呢。这么多鸟就不说他了,不刺激他了。更为不能忍受的是还有很多老鼠,窜来窜去的,真恶心呀,这种老鼠全国都有,在Grand Canyon那里也很多,这些老鼠还向游人讨吃的,真应该好好灭灭鼠了,不过这种鼠和我们国家习见的老鼠不同,好像叫松鼠,反正也是一种老鼠吧。我们的国家就没有这种老鼠,有也被人民赶到深山老林人迹罕至的地方或抓到笼子里去了,哪能让它们这么猖狂。
美国人很傻,见人就傻笑,还要说"hello",谁跟你"hello"呀,又不认识你,要么就老是说"excuse me"。办点什么事就排队,还排的远远的,就不喜欢挤在一起,譬如俺挡住了路,老美就站在后面,嘴里喃喃的说着"excuse me",真笨哪,挤一下就过去了嘛。弄得俺现在一听到"excuse me"就过敏。连那些老黑也这样,不开枪也不动刀子,太不粗犷了。
最让俺受不了的是老美开车太衰,根本没有咱们国权路上的司机爽快,都红灯了,咱们的司机还能冲过去,老美差远了,俺只要在路口一做势要过马路,老美就停车了,我冲他们连连摆手示意你们走先,但是从未得逞,每次都是我走先,不爽啊!真想照着那些开的慢的汽车揣两脚解气。
美国号称是世界第一发达国家,俺看根中国根本没法比,那里很多地方简直就是原始森林和草地,太欠发达了,联合国就在美国,也不帮着开发一下先,开车出去,公路两边都是森林,好不容易才能在树荫掩映中看见一两所房子。而且树木那么大了,还不伐掉,俺看原因不外呼两个,一是老美不知道木材能卖钱,要么就是老美没有发达的伐木工具。森林都快把城市淹没了,我们西部的滥采滥伐的哥们真应该去援助他们一下。
俺出身于中国西部黄土高原,从小熟悉和喜欢那小风甚至无风起兮沙飞扬的英雄气象,现在北京乃至全国都要流行沙尘暴了,俺打心眼里高兴,在Texas和New England地区没有享受到,那也就算了。后来去了想象中"大漠孤烟直,长河落日圆"的Nevada和Arizona,也未能如愿,科罗拉多河倒是落日圆的,大漠孤烟直是不可能了,关键是没有烟,没有尘土呀,好好的一块沙漠,老美在上面密密的种上了草和树,意境全被破坏了。美国人命苦啊,享受不到在浓尘中敲腰鼓那样的真汉子豪情了,美国人很不严肃,平时嘻嘻哈哈也就原谅了,对国旗州旗这种神圣庄重的标志也乱开玩笑,真让人受不了。俺们前两天在UT Austin转悠,俺虽然入党未遂,但政治觉悟不低,突然发现这里的国旗和州旗都降了半旗,俺第一反应是Bush老兄驾崩了,这里挂的是他老人家的素,但是奇怪的是电视里没说呀,新闻联播里没有啊。抓了个舌头一打听才知道,原来那天是本学期最后一天,学校为感谢广大学生和教职员工一学期来的辛勤学习和工作,尤其是为纪念有人在这一学期中遭遇的不幸甚至死亡,特此降半旗。听完这个解释,俺哑然失笑。国旗州旗那是不得了的东东呀,烈士的鲜血染红的呀,怎么能随便
降呢,在我们这里只有巨牛的大牛伯驾崩了才降的,建国以来也就降过个位数次吧。洛阳火灾,石家庄爆炸算大事了吧,我们硬是屏住没降,他们学期结束也要降,理由也太牵强了嘛,学生学习,老师教书那都是分内的事,学生的遭遇不幸那是自己的事,按时足量交纳学费培养费才是最重要的。
学生的着装也问题很大,这不是小事,着装体现着复旦的形象,学习好不好无所谓,着装要整洁。但是那里的学生绝大多数都是汗衫短裤拖鞋,从UT到MIT到Harvard都一样,这怎么能算是国际一流的大学呢?而且很不重视政治思想教育,要出事的。
3/17/2008
Oracle 9201 update to 9208(图)_older document
因为以前的共享Metalink ID被封了,前几天从一个偶然拿到的FTP下载到了p4547809_92080_WINNT升级包。参考9201升级9206的升级文档,经过1个多小时升级完毕:
1、通过管理员权限登陆系统,并把Oracle有关以及Distributed Transaction Coordinator等service停掉。备份与Oracle数据库相关的所有文件(包括Oracle数据库软件及数据文件),把这些文件按原有的目录结构复制到安全的地方。前提工作完成,进入安装。
2、安装过程中注意路径选择你9201安装的完整路径,然后next下去(如果途中出现乱码提示窗口,重新检查关联service是否停止)。

3、安装成功。

4-5、启动Oracle相关service启动,并用sys身份登陆sqlplus。先检查表空间长度:
select tablespace_name, sum(bytes)/(1024*1024) as free_space from dba_free_space
where tablespace_name = 'SYSTEM'
group by tablespace_name;
如果free_space空间大小小于10(M),则需要加大system表空间的长度既增加表空间数据文件的大小,先计算需要增加多少长度。
select file_name, round(bytes/(1024*1024),0) total_space
from dba_data_files
where tablespace_name = 'SYSTEM'; 查询数据文件准确路径以及大小。
确定修改后的数据大小为:new_size=total_space+10-free_space;
alter database datafile 'file_name' resize new_size;
设置SHARED_POOL_SIZE参数。本来Oracle建议还要调整JAVA_POOL_SIZE的,但如果没有使用太多Java应用,该参数可不调整
检查SHARED_POOL_SIZE的大小。在SQL>提示符下输入如下命令:
SHOW PARAMETER SHARED_POOL_SIZE;
在VALUE列给出了相应参数的大小,注意该数值是以字节计算的。参考的两个参数取值如下表:
物理内存容量(M) SHARED_POOL_SIZE(M)
512 50
1024 100
2048 150
如果该参数的取值小于以上建议值,则应该把它加大到建议值;否则以下的步骤无需执行了
检查系统是使用初始化参数文件还是系统参数文件。在SQL>提示符下输入如下命令:
SHOW PARAMETER PFILE;
如果在VALUE列中包括INIT字样,则表明系统使用的是初始化参数文件;若包括SPFILE字样,则表明系统使用的是系统参数文件
*若系统使用的是初始化参数文件,则需要notepad或其它纯文本编辑器编辑该文件,将以上参数的值增加到建议值
*若系统使用的是系统参数文件,则在SQL>提示符下输入如下命令:
ALTER SYSTEM SET SHARED_POOL_SIZE='new_size' SCOPE=spfile; 其中new_size是建议的取值
PS:其实升级的话可以尽量提高SHARED_POOL_SIZE的值

升级脚本:
alter database datafile 'D:\ORACLE\ORADATA\RYAN\SYSTEM01.DBF' resize 500m;
alter system set sga_max_size=512M scope=spfile;
alter system set shared_pool_size=256M scope=spfile;
alter system set java_pool_size=48M scope=spfile;
alter system set db_cache_size=256M scope=spfile;
1、通过管理员权限登陆系统,并把Oracle有关以及Distributed Transaction Coordinator等service停掉。备份与Oracle数据库相关的所有文件(包括Oracle数据库软件及数据文件),把这些文件按原有的目录结构复制到安全的地方。前提工作完成,进入安装。
2、安装过程中注意路径选择你9201安装的完整路径,然后next下去(如果途中出现乱码提示窗口,重新检查关联service是否停止)。
3、安装成功。
4-5、启动Oracle相关service启动,并用sys身份登陆sqlplus。先检查表空间长度:
select tablespace_name, sum(bytes)/(1024*1024) as free_space from dba_free_space
where tablespace_name = 'SYSTEM'
group by tablespace_name;
如果free_space空间大小小于10(M),则需要加大system表空间的长度既增加表空间数据文件的大小,先计算需要增加多少长度。
select file_name, round(bytes/(1024*1024),0) total_space
from dba_data_files
where tablespace_name = 'SYSTEM'; 查询数据文件准确路径以及大小。
确定修改后的数据大小为:new_size=total_space+10-free_space;
alter database datafile 'file_name' resize new_size;
设置SHARED_POOL_SIZE参数。本来Oracle建议还要调整JAVA_POOL_SIZE的,但如果没有使用太多Java应用,该参数可不调整
检查SHARED_POOL_SIZE的大小。在SQL>提示符下输入如下命令:
SHOW PARAMETER SHARED_POOL_SIZE;
在VALUE列给出了相应参数的大小,注意该数值是以字节计算的。参考的两个参数取值如下表:
物理内存容量(M) SHARED_POOL_SIZE(M)
512 50
1024 100
2048 150
如果该参数的取值小于以上建议值,则应该把它加大到建议值;否则以下的步骤无需执行了
检查系统是使用初始化参数文件还是系统参数文件。在SQL>提示符下输入如下命令:
SHOW PARAMETER PFILE;
如果在VALUE列中包括INIT字样,则表明系统使用的是初始化参数文件;若包括SPFILE字样,则表明系统使用的是系统参数文件
*若系统使用的是初始化参数文件,则需要notepad或其它纯文本编辑器编辑该文件,将以上参数的值增加到建议值
*若系统使用的是系统参数文件,则在SQL>提示符下输入如下命令:
ALTER SYSTEM SET SHARED_POOL_SIZE='new_size' SCOPE=spfile; 其中new_size是建议的取值
PS:其实升级的话可以尽量提高SHARED_POOL_SIZE的值
6、重启数据库并运行catpatch.sql和utlrp.sql重新编译所有的PL/SQL包。这段时间取决于你的share pool、big pool的大小。
7、检查升级后版本,升级完毕。
升级脚本:
alter database datafile 'D:\ORACLE\ORADATA\RYAN\SYSTEM01.DBF' resize 500m;
alter system set sga_max_size=512M scope=spfile;
alter system set shared_pool_size=256M scope=spfile;
alter system set java_pool_size=48M scope=spfile;
alter system set db_cache_size=256M scope=spfile;
3/05/2008
About Lock
有关视图
v$session 查询会话的信息
v$session_wait 查询等待的会话信息
v$lock 列出系统中的所有锁
dba_locks 对v$lock的格式化视图
v$locked_object 只包含DML的锁信息,包括回滚段和会话信息
例:怎么杀掉特定的数据库会话
Alter system kill session 'sid,serial#';
或者
alter system disconnect session 'sid,serial#' immediate;
在win上,还可以采用oracle提供的orakill杀掉一个线程(其实就是一个Oracle进程)在Linux/Unix上,可以直接利用kill杀掉数据库进程对应的OS进程
例:怎么快速查找锁与锁等待
数据库的锁是比较耗费资源的,特别是发生锁等待的时候,我们必须找到发生等待的锁,有可能的话,杀掉该进程。
这个语句将查找到数据库中所有的DML语句产生的锁,还可以发现,任何DML语句其实产生了两个锁,一个是表锁,一个是行锁。
可以通过alter system kill session ‘sid,serial#’来杀掉会话
SELECT /*+ rule */ s.username,decode(l.type,'TM','TABLE LOCK','TX','ROW LOCK',NULL) LOCK_LEVEL,o.owner,o.object_name,o.object_type,
s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser
FROM v$session s,v$lock l,dba_objects o
WHERE l.sid = s.sid
AND l.id1 = o.object_id(+)
AND s.username is NOT NULL
如果发生了锁等待,我们可能更想知道是谁锁了表而引起谁的等待以下的语句可以查询到谁锁了表,而谁在等待。
SELECT /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))l.oracle_username User_name,
o.owner,o.object_name,o.object_type,s.sid,s.serial#
FROM v$locked_object l,dba_objects o,v$session s
WHERE l.object_id=o.object_id
AND l.session_id=s.sid
ORDER BY o.object_id,xidusn DESC
以上查询结果是一个树状结构,如果有子节点,则表示有等待发生。如果想知道锁用了哪个回滚段,还可以关联到V$rollname,其中xidusn就是回滚段的USN
例:查询锁的状况的对象有
V$LOCK, V$LOCKED_OBJECT, V$SESSION, V$SQLAREA, V$PROCESS ;
例:查询锁的表的方法
SELECT S.SID SESSION_ID,S.USERNAME,DECODE(LMODE,0,'None',1,'Null',2,'Row-S (SS)',3,'Row-X (SX)',4,'Share',5,'S/Row-X (SSX)',6,'Exclusive',TO_CHAR(LMODE)) MODE_HELD,DECODE(REQUEST,0,'None',1,'Null',2,'Row-S (SS)',3,'Row-X (SX)',4,'Share',5,'S/Row-X (SSX)',6,'Exclusive',TO_CHAR(REQUEST)) MODE_REQUESTED,O.OWNER'.'O.OBJECT_NAME' ('O.OBJECT_TYPE')',S.TYPE LOCK_TYPE,L.ID1 LOCK_ID1,L.ID2 LOCK_ID2 FROM V$LOCK L,SYS.DBA_OBJECTS O,V$SESSION S WHERE L.SID = S.SID AND L.ID1 = O.OBJECT_ID ;
例:如何解锁?
ALTER SYSTEM KILL SESSION ‘SID,SERIR#’;
例:如何监控当前数据库谁在运行什么SQL语句?
SELECT osuser, username, sql_text from v$session a, v$sqltext b
where a.sql_address =b.address order by address, piece;
例:锁中字段代码含义
type
TX 锁定行
TM 表锁定
lmode
1 NULL
2 行共享
3 行排他
4 共享
5 共享行排他
6 排他
例:谁被锁住?
Select a.sid,a.serial#,a.username,A.LOCKWAIT,a.status,a.program,b.name
from v$session a,audit_actions b
where a.command=b.action
AND LOCKWAIT IS NOT NULL;
例:谁在锁表?
Select a.sid,a.serial#,a.username,A.LOCKWAIT,a.status,a.program,b.name
from v$session a,audit_actions b
where a.command=b.action
AND STATUS=ACTIVE;
单用户数据库或许从来就不需要锁,但是在一个多用户的环
境,有一个合适地自动满足数据的并行性、一致性和完整性的
机制是非常重要的。Oracle是通过使用一个内部锁定机制来维
护数据的完整性、并行性和一致性。
ORACLE有两种级别的锁
共享锁(Share Lock)
为数据存取的高并行性提供保证。
专用锁(Exclusive Lock)
防止同时共享资源。例如一个事务获得了某一资源的专用锁,那么直到该锁被解锁,其他事务才能修改那个资源。
ORACLE锁按类型可分为两种不同的锁:
数据锁(DML LOCK)
在表中获得并且保护数据,从根本上说是保护数据的完整性
字典锁(DDL LOCK)
用于保护对象的结构如表、视图和索引的定义。在获得DDL数据定义事务时,字典锁将自动获得。
数据锁
当用户对表格中数据执行insert、update和delete操作时,会自动获得数据锁,它用来保护数据的一致性。按级别可分行级锁、表级锁。
DML语句会获得两种类型的锁结构:
表上的共享锁正在更改每一行的专用锁
例如:update emp set sal=8888 where empno=7788;
注意:假如有多个用户同时对一行进行修改,他们都会获得共享的表锁,但只有一个最先请求锁的用户才可获得行专用锁。
字典锁
当用户创建、修改或者删除表时将要用到字典锁。它通常是表级别锁,用来防止两个用户同时修改同一个表的结构。
专用DDL锁:
当诸如create,alter和drop这样的语句用于一个对象时,使用此锁。
共享DDL锁:
当诸如grant和create package这样的语句用于一个对象时,使用此锁。
手工锁定
假如你要执行一张表中列值的全局更新并且希望事务对该表进行单独存取,以便事务不必等待其他事务的完成该表的操作,那么可以通过人工锁定的该表以防止其他事务获得该表中 的锁。
共享锁
例如:lock table emp in share mode;
独享锁
例如:lock table emp in exclusive mode;
查询时也可手工锁定查询集
例如:select * from emp
where deptno=10
update for;
例如 SELECT fffs FROM fffs WHERE fffs='01'
FOR UPDATE OF fffs NOWAIT;
死锁
死锁是指两个或多个用户多在等待被彼此相互锁定的同一数据而形成的一种局面。例如:
用户A:update emp set sal=8888 where empno=7788;
在该软件中可以直接查询锁,杀掉进程,下载地址
v$session 查询会话的信息
v$session_wait 查询等待的会话信息
v$lock 列出系统中的所有锁
dba_locks 对v$lock的格式化视图
v$locked_object 只包含DML的锁信息,包括回滚段和会话信息
例:怎么杀掉特定的数据库会话
Alter system kill session 'sid,serial#';
或者
alter system disconnect session 'sid,serial#' immediate;
在win上,还可以采用oracle提供的orakill杀掉一个线程(其实就是一个Oracle进程)在Linux/Unix上,可以直接利用kill杀掉数据库进程对应的OS进程
例:怎么快速查找锁与锁等待
数据库的锁是比较耗费资源的,特别是发生锁等待的时候,我们必须找到发生等待的锁,有可能的话,杀掉该进程。
这个语句将查找到数据库中所有的DML语句产生的锁,还可以发现,任何DML语句其实产生了两个锁,一个是表锁,一个是行锁。
可以通过alter system kill session ‘sid,serial#’来杀掉会话
SELECT /*+ rule */ s.username,decode(l.type,'TM','TABLE LOCK','TX','ROW LOCK',NULL) LOCK_LEVEL,o.owner,o.object_name,o.object_type,
s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser
FROM v$session s,v$lock l,dba_objects o
WHERE l.sid = s.sid
AND l.id1 = o.object_id(+)
AND s.username is NOT NULL
如果发生了锁等待,我们可能更想知道是谁锁了表而引起谁的等待以下的语句可以查询到谁锁了表,而谁在等待。
SELECT /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))l.oracle_username User_name,
o.owner,o.object_name,o.object_type,s.sid,s.serial#
FROM v$locked_object l,dba_objects o,v$session s
WHERE l.object_id=o.object_id
AND l.session_id=s.sid
ORDER BY o.object_id,xidusn DESC
以上查询结果是一个树状结构,如果有子节点,则表示有等待发生。如果想知道锁用了哪个回滚段,还可以关联到V$rollname,其中xidusn就是回滚段的USN
例:查询锁的状况的对象有
V$LOCK, V$LOCKED_OBJECT, V$SESSION, V$SQLAREA, V$PROCESS ;
例:查询锁的表的方法
SELECT S.SID SESSION_ID,S.USERNAME,DECODE(LMODE,0,'None',1,'Null',2,'Row-S (SS)',3,'Row-X (SX)',4,'Share',5,'S/Row-X (SSX)',6,'Exclusive',TO_CHAR(LMODE)) MODE_HELD,DECODE(REQUEST,0,'None',1,'Null',2,'Row-S (SS)',3,'Row-X (SX)',4,'Share',5,'S/Row-X (SSX)',6,'Exclusive',TO_CHAR(REQUEST)) MODE_REQUESTED,O.OWNER'.'O.OBJECT_NAME' ('O.OBJECT_TYPE')',S.TYPE LOCK_TYPE,L.ID1 LOCK_ID1,L.ID2 LOCK_ID2 FROM V$LOCK L,SYS.DBA_OBJECTS O,V$SESSION S WHERE L.SID = S.SID AND L.ID1 = O.OBJECT_ID ;
例:如何解锁?
ALTER SYSTEM KILL SESSION ‘SID,SERIR#’;
例:如何监控当前数据库谁在运行什么SQL语句?
SELECT osuser, username, sql_text from v$session a, v$sqltext b
where a.sql_address =b.address order by address, piece;
例:锁中字段代码含义
type
TX 锁定行
TM 表锁定
lmode
1 NULL
2 行共享
3 行排他
4 共享
5 共享行排他
6 排他
例:谁被锁住?
Select a.sid,a.serial#,a.username,A.LOCKWAIT,a.status,a.program,b.name
from v$session a,audit_actions b
where a.command=b.action
AND LOCKWAIT IS NOT NULL;
例:谁在锁表?
Select a.sid,a.serial#,a.username,A.LOCKWAIT,a.status,a.program,b.name
from v$session a,audit_actions b
where a.command=b.action
AND STATUS=ACTIVE;
单用户数据库或许从来就不需要锁,但是在一个多用户的环
境,有一个合适地自动满足数据的并行性、一致性和完整性的
机制是非常重要的。Oracle是通过使用一个内部锁定机制来维
护数据的完整性、并行性和一致性。
ORACLE有两种级别的锁
共享锁(Share Lock)
为数据存取的高并行性提供保证。
专用锁(Exclusive Lock)
防止同时共享资源。例如一个事务获得了某一资源的专用锁,那么直到该锁被解锁,其他事务才能修改那个资源。
ORACLE锁按类型可分为两种不同的锁:
数据锁(DML LOCK)
在表中获得并且保护数据,从根本上说是保护数据的完整性
字典锁(DDL LOCK)
用于保护对象的结构如表、视图和索引的定义。在获得DDL数据定义事务时,字典锁将自动获得。
数据锁
当用户对表格中数据执行insert、update和delete操作时,会自动获得数据锁,它用来保护数据的一致性。按级别可分行级锁、表级锁。
DML语句会获得两种类型的锁结构:
表上的共享锁正在更改每一行的专用锁
例如:update emp set sal=8888 where empno=7788;
注意:假如有多个用户同时对一行进行修改,他们都会获得共享的表锁,但只有一个最先请求锁的用户才可获得行专用锁。
字典锁
当用户创建、修改或者删除表时将要用到字典锁。它通常是表级别锁,用来防止两个用户同时修改同一个表的结构。
专用DDL锁:
当诸如create,alter和drop这样的语句用于一个对象时,使用此锁。
共享DDL锁:
当诸如grant和create package这样的语句用于一个对象时,使用此锁。
手工锁定
假如你要执行一张表中列值的全局更新并且希望事务对该表进行单独存取,以便事务不必等待其他事务的完成该表的操作,那么可以通过人工锁定的该表以防止其他事务获得该表中 的锁。
共享锁
例如:lock table emp in share mode;
独享锁
例如:lock table emp in exclusive mode;
查询时也可手工锁定查询集
例如:select * from emp
where deptno=10
update for;
例如 SELECT fffs FROM fffs WHERE fffs='01'
FOR UPDATE OF fffs NOWAIT;
死锁
死锁是指两个或多个用户多在等待被彼此相互锁定的同一数据而形成的一种局面。例如:
用户A:update emp set sal=8888 where empno=7788;
在该软件中可以直接查询锁,杀掉进程,下载地址
3/01/2008
Oracle Newbie's Questions~~(转)
1. Oracle安装完成后的初始口令?
internal/oracle
sys/change_on_install
system/manager
scott/tiger
sysman/oem_temp
2. ORACLE9IAS WEB CACHE的初始默认用户和密码?
administrator/administrator
3. oracle 8.0.5怎幺创建数据库?
用orainst。如果有motif界面,可以用orainst /m
4. oracle 8.1.7怎幺创建数据库?
dbassist
5. oracle 9i 怎幺创建数据库?
dbca
6. oracle中的裸设备指的是什幺?
裸设备就是绕过文件系统直接访问的储存空间
7. oracle如何区分 64-bit/32bit 版本???
$ sqlplus / AS SYSDBA
SQL*Plus: Release 9.0.1.0.0 - Production on Mon Jul 14 17:01:09 2003
(c) Copyright 2001 Oracle Corporation. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.0.1.0.0 - Production
With the Partitioning option
JServer Release 9.0.1.0.0 - Production
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.0.1.0.0 - Production
PL/SQL Release 9.0.1.0.0 - Production
CORE 9.0.1.0.0 Production
TNS for Solaris: Version 9.0.1.0.0 - Production
NLSRTL Version 9.0.1.0.0 - Production
SQL>
8. SVRMGR什幺意思?
svrmgrl,Server Manager.
9i下没有,已经改为用SQLPLUS了
sqlplus /nolog
变为归档日志型的
9. 请问如何分辨某个用户是从哪台机器登陆ORACLE的?
SELECT machine , terminal FROM V$SESSION;
10. 用什幺语句查询字段呢?
desc table_name 可以查询表的结构
select field_name,... from ... 可以查询字段的值
select * from all_tables where table_name like %
select * from all_tab_columns where table_name= ??
11. 怎样得到触发器、过程、函数的创建脚本?
desc user_source
user_triggers
12. 怎样计算一个表占用的空间的大小?
select owner ,
table_name,
NUM_ROWS,
BLOCKS*AAA/1024/1024 "Size M",
EMPTY_BLOCKS,
LAST_ANALYZED
from dba_tables
where table_name= XXX ;
Here: AAA is the value of db_block_size ;
XXX is the table name you want to check
13. 如何查看最大会话数?
SELECT * FROM V$PARAMETER WHERE NAME LIKE proc% ;
SQL>
SQL> show parameter processes
NAME TYPE VALUE
------------------------------------ ------- ------------------------------
aq_tm_processes integer 1
db_writer_processes integer 1
job_queue_processes integer 4
log_archive_max_processes integer 1
processes integer 200
这里为200个用户。
select * from v$license;
其中sessions_highwater纪录曾经到达的最大会话数
14. 如何查看系统被锁的事务时间?
select * from v$locked_object ;
15. 如何以archivelog的方式运行oracle。
init.ora
log_archive_start = true
RESTART DATABASE
16. 怎幺获取有哪些用户在使用数据库
select username from v$session;
17. 数据表中的字段最大数是多少?
表或视图中的最大列数为 1000
18. 怎样查得数据库的SID ?
select name from v$database;
也可以直接查看 init.ora文件
19. 如何在Oracle服务器上通过SQLPLUS查看本机IP地址 ?
select sys_context( userenv , ip_address ) from dual;
如果是登陆本机数据库,只能返回127.0.0.1,呵呵
20. unix 下怎幺调整数据库的时间?
su -root
date -u 08010000
21. 在ORACLE TABLE中如何抓取MEMO类型字段为空的资料记录?
select remark from oms_flowrec where trim( from remark) is not null ;
22. 如何用BBB表的资料去更新AAA表的资料(有关联的字段)
UPDATE AAA SET BNS_SNM=(SELECT BNS_SNM FROM BBB WHERE AAA.DPT_NO=BBB.DPT_NO) WHERE BBB.DPT_NO IS NOT NULL;
23. P4计算机安装方法
将SYMCJIT.DLL改为SYSMCJIT.OLD
24. 何查询SERVER是不是OPS?
SELECT * FROM V$OPTION;
如果PARALLEL SERVER=TRUE则有OPS能
25. 何查询每个用户的权限?
SELECT * FROM DBA_SYS_PRIVS;
26. 如何将表移动表空间?
ALTER TABLE TABLE_NAME MOVE TABLESPACE_NAME;
27. 如何将索引移动表空间?
ALTER INDEX INDEX_NAME REBUILD TABLESPACE TABLESPACE_NAME;
28. 在LINUX,UNIX下如何激活DBA STUDIO?
OEMAPP DBASTUDIO
29. 查询锁的状况的对象有?
V$LOCK, V$LOCKED_OBJECT, V$SESSION, V$SQLAREA, V$PROCESS ;
查询锁的表的方法:
SELECT S.SID SESSION_ID, S.USERNAME, DECODE(LMODE, 0, None , 1, Null , 2, Row-S (SS) , 3, Row-X (SX) , 4, Share , 5, S/Row-X (SSX) , 6, Exclusive , TO_CHAR(LMODE)) MODE_HELD, DECODE(REQUEST, 0, None , 1, Null , 2, Row-S (SS) , 3, Row-X (SX) , 4, Share , 5, S/Row-X (SSX) , 6, Exclusive , TO_CHAR(REQUEST)) MODE_REQUESTED, O.OWNER|| . ||O.OBJECT_NAME|| ( ||O.OBJECT_TYPE|| ) , S.TYPE LOCK_TYPE, L.ID1 LOCK_ID1, L.ID2 LOCK_ID2 FROM V$LOCK L, SYS.DBA_OBJECTS O, V$SESSION S WHERE L.SID = S.SID AND L.ID1 = O.OBJECT_ID ;
30. 如何解锁?
ALTER SYSTEM KILL SESSION ‘SID,SERIR#’;
31. SQLPLUS下如何修改编辑器?
DEFINE _EDITOR=“<编辑器的完整路经>” -- 必须加上双引号来定义新的编辑器,也可以把这个写在$ORACLE_HOME/sqlplus/admin/glogin.sql里面使它永久有效。
32. ORACLE产生随机函数是?
DBMS_RANDOM.RANDOM
33. LINUX下查询磁盘竞争状况命令?
Sar -d
33. LINUX下查询CPU竞争状况命令?
sar -r
34. 查询当前用户对象?
SELECT * FROM USER_OBJECTS;
SELECT * FROM DBA_SEGMENTS;
35. 如何获取错误信息?
SELECT * FROM USER_ERRORS;
36. 如何获取链接状况?
SELECT * FROM DBA_DB_LINKS;
37. 查看数据库字符状况?
SELECT * FROM NLS_DATABASE_PARAMETERS;
SELECT * FROM V$NLS_PARAMETERS;
38. 查询表空间信息?
SELECT * FROM DBA_DATA_FILES;
39. ORACLE的INTERAL用户要口令?
修改 SQLNET.ORA
SQLNET.AUTHENTICATION_SERVICES=(NTS)
40. 出现JAVA.EXE的解决办法?
一般是将ORACLEORAHOMEXIHTTPSERVER改成手工激活可以的
X是8或9
41. 如何给表、列加注释?
SQL>comment on table 表 is 表注释 ;注释已创建。
SQL>comment on column 表.列 is 列注释 ;注释已创建。
SQL> select * from user_tab_comments where comments is not null;
42. 如何查看各个表空间占用磁盘情况?
SQL> col tablespace format a20
SQL> select
b.file_id 文件ID号,
b.tablespace_name 表空间名,
b.bytes 字节数,
(b.bytes-sum(nvl(a.bytes,0))) 已使用,
sum(nvl(a.bytes,0)) 剩余空间,
sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比
from dba_free_space a,dba_data_files b
where a.file_id=b.file_id
group by b.tablespace_name,b.file_id,b.bytes
order by b.file_id
43. 如把ORACLE设置为MTS或专用模式?
#dispatchers="(PROTOCOL=TCP) (SERVICE=SIDXDB)" 加上就是MTS,注释就是专用模式,SID是指你的实例名。
44. 如何才能得知系统当前的SCN号 ?
select max(ktuxescnw * power(2, 32) + ktuxescnb) from x$ktuxe;
45. 请问如何在ORACLE中取毫秒?
9i之前不支持,9i开始有timestamp.
9i可以用select systimestamp from dual;
如有问题欢迎大家一起探讨!
internal/oracle
sys/change_on_install
system/manager
scott/tiger
sysman/oem_temp
2. ORACLE9IAS WEB CACHE的初始默认用户和密码?
administrator/administrator
3. oracle 8.0.5怎幺创建数据库?
用orainst。如果有motif界面,可以用orainst /m
4. oracle 8.1.7怎幺创建数据库?
dbassist
5. oracle 9i 怎幺创建数据库?
dbca
6. oracle中的裸设备指的是什幺?
裸设备就是绕过文件系统直接访问的储存空间
7. oracle如何区分 64-bit/32bit 版本???
$ sqlplus / AS SYSDBA
SQL*Plus: Release 9.0.1.0.0 - Production on Mon Jul 14 17:01:09 2003
(c) Copyright 2001 Oracle Corporation. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.0.1.0.0 - Production
With the Partitioning option
JServer Release 9.0.1.0.0 - Production
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.0.1.0.0 - Production
PL/SQL Release 9.0.1.0.0 - Production
CORE 9.0.1.0.0 Production
TNS for Solaris: Version 9.0.1.0.0 - Production
NLSRTL Version 9.0.1.0.0 - Production
SQL>
8. SVRMGR什幺意思?
svrmgrl,Server Manager.
9i下没有,已经改为用SQLPLUS了
sqlplus /nolog
变为归档日志型的
9. 请问如何分辨某个用户是从哪台机器登陆ORACLE的?
SELECT machine , terminal FROM V$SESSION;
10. 用什幺语句查询字段呢?
desc table_name 可以查询表的结构
select field_name,... from ... 可以查询字段的值
select * from all_tables where table_name like %
select * from all_tab_columns where table_name= ??
11. 怎样得到触发器、过程、函数的创建脚本?
desc user_source
user_triggers
12. 怎样计算一个表占用的空间的大小?
select owner ,
table_name,
NUM_ROWS,
BLOCKS*AAA/1024/1024 "Size M",
EMPTY_BLOCKS,
LAST_ANALYZED
from dba_tables
where table_name= XXX ;
Here: AAA is the value of db_block_size ;
XXX is the table name you want to check
13. 如何查看最大会话数?
SELECT * FROM V$PARAMETER WHERE NAME LIKE proc% ;
SQL>
SQL> show parameter processes
NAME TYPE VALUE
------------------------------------ ------- ------------------------------
aq_tm_processes integer 1
db_writer_processes integer 1
job_queue_processes integer 4
log_archive_max_processes integer 1
processes integer 200
这里为200个用户。
select * from v$license;
其中sessions_highwater纪录曾经到达的最大会话数
14. 如何查看系统被锁的事务时间?
select * from v$locked_object ;
15. 如何以archivelog的方式运行oracle。
init.ora
log_archive_start = true
RESTART DATABASE
16. 怎幺获取有哪些用户在使用数据库
select username from v$session;
17. 数据表中的字段最大数是多少?
表或视图中的最大列数为 1000
18. 怎样查得数据库的SID ?
select name from v$database;
也可以直接查看 init.ora文件
19. 如何在Oracle服务器上通过SQLPLUS查看本机IP地址 ?
select sys_context( userenv , ip_address ) from dual;
如果是登陆本机数据库,只能返回127.0.0.1,呵呵
20. unix 下怎幺调整数据库的时间?
su -root
date -u 08010000
21. 在ORACLE TABLE中如何抓取MEMO类型字段为空的资料记录?
select remark from oms_flowrec where trim( from remark) is not null ;
22. 如何用BBB表的资料去更新AAA表的资料(有关联的字段)
UPDATE AAA SET BNS_SNM=(SELECT BNS_SNM FROM BBB WHERE AAA.DPT_NO=BBB.DPT_NO) WHERE BBB.DPT_NO IS NOT NULL;
23. P4计算机安装方法
将SYMCJIT.DLL改为SYSMCJIT.OLD
24. 何查询SERVER是不是OPS?
SELECT * FROM V$OPTION;
如果PARALLEL SERVER=TRUE则有OPS能
25. 何查询每个用户的权限?
SELECT * FROM DBA_SYS_PRIVS;
26. 如何将表移动表空间?
ALTER TABLE TABLE_NAME MOVE TABLESPACE_NAME;
27. 如何将索引移动表空间?
ALTER INDEX INDEX_NAME REBUILD TABLESPACE TABLESPACE_NAME;
28. 在LINUX,UNIX下如何激活DBA STUDIO?
OEMAPP DBASTUDIO
29. 查询锁的状况的对象有?
V$LOCK, V$LOCKED_OBJECT, V$SESSION, V$SQLAREA, V$PROCESS ;
查询锁的表的方法:
SELECT S.SID SESSION_ID, S.USERNAME, DECODE(LMODE, 0, None , 1, Null , 2, Row-S (SS) , 3, Row-X (SX) , 4, Share , 5, S/Row-X (SSX) , 6, Exclusive , TO_CHAR(LMODE)) MODE_HELD, DECODE(REQUEST, 0, None , 1, Null , 2, Row-S (SS) , 3, Row-X (SX) , 4, Share , 5, S/Row-X (SSX) , 6, Exclusive , TO_CHAR(REQUEST)) MODE_REQUESTED, O.OWNER|| . ||O.OBJECT_NAME|| ( ||O.OBJECT_TYPE|| ) , S.TYPE LOCK_TYPE, L.ID1 LOCK_ID1, L.ID2 LOCK_ID2 FROM V$LOCK L, SYS.DBA_OBJECTS O, V$SESSION S WHERE L.SID = S.SID AND L.ID1 = O.OBJECT_ID ;
30. 如何解锁?
ALTER SYSTEM KILL SESSION ‘SID,SERIR#’;
31. SQLPLUS下如何修改编辑器?
DEFINE _EDITOR=“<编辑器的完整路经>” -- 必须加上双引号来定义新的编辑器,也可以把这个写在$ORACLE_HOME/sqlplus/admin/glogin.sql里面使它永久有效。
32. ORACLE产生随机函数是?
DBMS_RANDOM.RANDOM
33. LINUX下查询磁盘竞争状况命令?
Sar -d
33. LINUX下查询CPU竞争状况命令?
sar -r
34. 查询当前用户对象?
SELECT * FROM USER_OBJECTS;
SELECT * FROM DBA_SEGMENTS;
35. 如何获取错误信息?
SELECT * FROM USER_ERRORS;
36. 如何获取链接状况?
SELECT * FROM DBA_DB_LINKS;
37. 查看数据库字符状况?
SELECT * FROM NLS_DATABASE_PARAMETERS;
SELECT * FROM V$NLS_PARAMETERS;
38. 查询表空间信息?
SELECT * FROM DBA_DATA_FILES;
39. ORACLE的INTERAL用户要口令?
修改 SQLNET.ORA
SQLNET.AUTHENTICATION_SERVICES=(NTS)
40. 出现JAVA.EXE的解决办法?
一般是将ORACLEORAHOMEXIHTTPSERVER改成手工激活可以的
X是8或9
41. 如何给表、列加注释?
SQL>comment on table 表 is 表注释 ;注释已创建。
SQL>comment on column 表.列 is 列注释 ;注释已创建。
SQL> select * from user_tab_comments where comments is not null;
42. 如何查看各个表空间占用磁盘情况?
SQL> col tablespace format a20
SQL> select
b.file_id 文件ID号,
b.tablespace_name 表空间名,
b.bytes 字节数,
(b.bytes-sum(nvl(a.bytes,0))) 已使用,
sum(nvl(a.bytes,0)) 剩余空间,
sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比
from dba_free_space a,dba_data_files b
where a.file_id=b.file_id
group by b.tablespace_name,b.file_id,b.bytes
order by b.file_id
43. 如把ORACLE设置为MTS或专用模式?
#dispatchers="(PROTOCOL=TCP) (SERVICE=SIDXDB)" 加上就是MTS,注释就是专用模式,SID是指你的实例名。
44. 如何才能得知系统当前的SCN号 ?
select max(ktuxescnw * power(2, 32) + ktuxescnb) from x$ktuxe;
45. 请问如何在ORACLE中取毫秒?
9i之前不支持,9i开始有timestamp.
9i可以用select systimestamp from dual;
如有问题欢迎大家一起探讨!
VsFTP出现500 OOPS: cannot change directory的解决办法
cannot change directory:/home/***
ftp服务器连接失败,错误提示:
500 OOPS: cannot change directory:/home/*******
500 OOPS: child died
解决方法:
在ssh输入命令:
setsebool -P ftpd_disable_trans 1
为避免每次开机都要作这个操作,可在setsebool命令后面加上-P选项,使改动永久有效。
service vsftpd restart
ftp服务器连接失败,错误提示:
500 OOPS: cannot change directory:/home/*******
500 OOPS: child died
解决方法:
在ssh输入命令:
setsebool -P ftpd_disable_trans 1
为避免每次开机都要作这个操作,可在setsebool命令后面加上-P选项,使改动永久有效。
service vsftpd restart
2/27/2008
如何在oracle中导入dmp数据库文件?(转)
Oracle数据导入导出imp/exp就相当于oracle数据还原与备份。exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中。 利用这个功能可以构建两个相同的数据库,一个用来测试,一个用来正式使用。
执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,
DOS中可以执行时由于 在oracle 8i 中 安装目录\ora81\BIN被设置为全局路径,
该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出。
oracle用java编写,SQLPLUS.EXE、EXP.EXE、IMP.EXE这两个文件有可能是被包装后的类文件。
SQLPLUS.EXE调用EXP.EXE、IMP.EXE所包裹的类,完成导入导出功能。
下面介绍的是导入导出的实例。
数据导出:
1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中
exp system/manager@TEST file=d:\daochu.dmp full=y
2 将数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
3 将数据库中的表inner_notify、notify_staff_relat导出
exp aichannel/aichannel@TESTDB2 file= d:\data\newsmgnt.dmp tables=(inner_notify,notify_staff_relat)
4 将数据库中的表table1中的字段filed1以"00"打头的数据导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"
上面是常用的导出,对于压缩,既用winzip把dmp文件可以很好的压缩。
也可以在上面命令后面 加上 compress=y 来实现。
数据的导入
1 将D:\daochu.dmp 中的数据导入 TEST数据库中。
imp system/manager@TEST file=d:\daochu.dmp
imp aichannel/aichannel@HUST full=y file=file= d:\data\newsmgnt.dmp ignore=y
上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
在后面加上 ignore=y 就可以了。
2 将d:\daochu.dmp中的表table1 导入
imp system/manager@TEST file=d:\daochu.dmp tables=(table1)
基本上上面的导入导出够用了。不少情况要先是将表彻底删除,然后导入。
注意:
操作者要有足够的权限,权限不够它会提示。
数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。
附录一:
给用户增加导入数据权限的操作
第一,启动sql*puls
第二,以system/manager登陆
第三,create user 用户名 IDENTIFIED BY 密码 (如果已经创建过用户,这步可以省略)
第四,GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
DBA,CONNECT,RESOURCE,CREATE SESSION TO 用户名字
第五, 运行-cmd-进入dmp文件所在的目录,
imp userid=system/manager full=y file=*.dmp
或者 imp userid=system/manager full=y file=filename.dmp
执行示例:
F:\Work\Oracle_Data\backup>imp userid=test/test full=y file=inner_notify.dmp
屏幕显示
Import: Release 8.1.7.0.0 - Production on 星期四 2月 16 16:50:05 2006
(c) Copyright 2000 Oracle Corporation. All rights reserved.
连接到: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production
经由常规路径导出由EXPORT:V08.01.07创建的文件
已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入
导出服务器使用UTF8 NCHAR 字符集 (可能的ncharset转换)
. 正在将AICHANNEL的对象导入到 AICHANNEL
. . 正在导入表 "INNER_NOTIFY" 4行被导入
准备启用约束条件...
成功终止导入,但出现警告。
附录二:
Oracle 不允许直接改变表的拥有者, 利用Export/Import可以达到这一目的.
先建立import9.par,
然后,使用时命令如下:imp parfile=/filepath/import9.par
例 import9.par 内容如下:
FROMUSER=TGPMS
TOUSER=TGPMS2 (注:把表的拥有者由FROMUSER改为TOUSER,FROMUSER和TOUSER的用户可以不同)
ROWS=Y
INDEXES=Y
GRANTS=Y
CONSTRAINTS=Y
BUFFER=409600
file==/backup/ctgpc_20030623.dmp
log==/backup/import_20030623.log
执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,
DOS中可以执行时由于 在oracle 8i 中 安装目录\ora81\BIN被设置为全局路径,
该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出。
oracle用java编写,SQLPLUS.EXE、EXP.EXE、IMP.EXE这两个文件有可能是被包装后的类文件。
SQLPLUS.EXE调用EXP.EXE、IMP.EXE所包裹的类,完成导入导出功能。
下面介绍的是导入导出的实例。
数据导出:
1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中
exp system/manager@TEST file=d:\daochu.dmp full=y
2 将数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
3 将数据库中的表inner_notify、notify_staff_relat导出
exp aichannel/aichannel@TESTDB2 file= d:\data\newsmgnt.dmp tables=(inner_notify,notify_staff_relat)
4 将数据库中的表table1中的字段filed1以"00"打头的数据导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"
上面是常用的导出,对于压缩,既用winzip把dmp文件可以很好的压缩。
也可以在上面命令后面 加上 compress=y 来实现。
数据的导入
1 将D:\daochu.dmp 中的数据导入 TEST数据库中。
imp system/manager@TEST file=d:\daochu.dmp
imp aichannel/aichannel@HUST full=y file=file= d:\data\newsmgnt.dmp ignore=y
上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
在后面加上 ignore=y 就可以了。
2 将d:\daochu.dmp中的表table1 导入
imp system/manager@TEST file=d:\daochu.dmp tables=(table1)
基本上上面的导入导出够用了。不少情况要先是将表彻底删除,然后导入。
注意:
操作者要有足够的权限,权限不够它会提示。
数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。
附录一:
给用户增加导入数据权限的操作
第一,启动sql*puls
第二,以system/manager登陆
第三,create user 用户名 IDENTIFIED BY 密码 (如果已经创建过用户,这步可以省略)
第四,GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
DBA,CONNECT,RESOURCE,CREATE SESSION TO 用户名字
第五, 运行-cmd-进入dmp文件所在的目录,
imp userid=system/manager full=y file=*.dmp
或者 imp userid=system/manager full=y file=filename.dmp
执行示例:
F:\Work\Oracle_Data\backup>imp userid=test/test full=y file=inner_notify.dmp
屏幕显示
Import: Release 8.1.7.0.0 - Production on 星期四 2月 16 16:50:05 2006
(c) Copyright 2000 Oracle Corporation. All rights reserved.
连接到: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production
经由常规路径导出由EXPORT:V08.01.07创建的文件
已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入
导出服务器使用UTF8 NCHAR 字符集 (可能的ncharset转换)
. 正在将AICHANNEL的对象导入到 AICHANNEL
. . 正在导入表 "INNER_NOTIFY" 4行被导入
准备启用约束条件...
成功终止导入,但出现警告。
附录二:
Oracle 不允许直接改变表的拥有者, 利用Export/Import可以达到这一目的.
先建立import9.par,
然后,使用时命令如下:imp parfile=/filepath/import9.par
例 import9.par 内容如下:
FROMUSER=TGPMS
TOUSER=TGPMS2 (注:把表的拥有者由FROMUSER改为TOUSER,FROMUSER和TOUSER的用户可以不同)
ROWS=Y
INDEXES=Y
GRANTS=Y
CONSTRAINTS=Y
BUFFER=409600
file==/backup/ctgpc_20030623.dmp
log==/backup/import_20030623.log
2/25/2008
Install VMware Tools 6.02 59824 on RHEL5
1.在虚拟机下菜单VM下选择install vmware tools。
[root@localhost /]# mount -t iso9660 /dev/cdrom /mnt
[root@localhost /]# cd /mnt
[root@localhost mnt]# cp *.tar.gz /tmp
[root@localhost mnt]# cd /tmp
[root@localhost tmp]# tar zxvf *.tar.gz
[root@localhost tmp]# cd vmware-tools-distrib
[root@localhost vmware-tools-distrib]#./vmware-install.pl
2.一路回车选择默认的选择。
3.在分辨率选择界面下选择合适的分辨率,推出reboot即可。
btw:可能出的问题
A.默认的的路径找不到内核库头
What is the location of the directory of C header files that match your running kernel?[/usr/src/linux/include]
a.如果是RHEL系统,可能是该系统所在的内核源码没装,解决方法:
在系统光盘中找到,kernel,kernel-devel两个rpm安装后,再执行vmware-install.pl即可
b.如果是ubuntu版的linux解决方法如下:
You need to install the headers for the release of the kernel you have installed. To find this out you can type
>> uname -r
to get the header you can apt-get install them,
>> sudo apt-get install linux-headers-`uname -r`
or select the appropriate package in synaptic.
Note: you'll also need gcc etc which if you don't have already you can get with
>> sudo apt-get install build-essential
After installation the vmware installer should just pick up the right place and not require anything but the defaults.
If it's still being stupid, the path to include can be found in /lib/modules/<>/build/include
B.安装后提示安装失败
可能是执行安装过程中有2个过程默认是NO的选择,这俩个是和本机信息通讯的俩个,改成yes执行即可。
[root@localhost /]# mount -t iso9660 /dev/cdrom /mnt
[root@localhost /]# cd /mnt
[root@localhost mnt]# cp *.tar.gz /tmp
[root@localhost mnt]# cd /tmp
[root@localhost tmp]# tar zxvf *.tar.gz
[root@localhost tmp]# cd vmware-tools-distrib
[root@localhost vmware-tools-distrib]#./vmware-install.pl
2.一路回车选择默认的选择。
3.在分辨率选择界面下选择合适的分辨率,推出reboot即可。
btw:可能出的问题
A.默认的的路径找不到内核库头
What is the location of the directory of C header files that match your running kernel?[/usr/src/linux/include]
a.如果是RHEL系统,可能是该系统所在的内核源码没装,解决方法:
在系统光盘中找到,kernel,kernel-devel两个rpm安装后,再执行vmware-install.pl即可
b.如果是ubuntu版的linux解决方法如下:
You need to install the headers for the release of the kernel you have installed. To find this out you can type
>> uname -r
to get the header you can apt-get install them,
>> sudo apt-get install linux-headers-`uname -r`
or select the appropriate package in synaptic.
Note: you'll also need gcc etc which if you don't have already you can get with
>> sudo apt-get install build-essential
After installation the vmware installer should just pick up the right place and not require anything but the defaults.
If it's still being stupid, the path to include can be found in /lib/modules/<
B.安装后提示安装失败
可能是执行安装过程中有2个过程默认是NO的选择,这俩个是和本机信息通讯的俩个,改成yes执行即可。
Subscribe to:
Posts (Atom)
