Oracle114的博客
自我介绍
切换风格
订阅我的Blog
博客日历
文章归档...
最新发表...
博客统计...
网站链接...
资源
===========================================================
LOGGING和NOLOGGING对比
===========================================================
表空间、表、索引、分区可以设置为NOLOGGING,用于加速装入数据(Direct Load 查看全文
Oracle114 发表于:2009.06.10 22:36 ::分类: ( Oracle结构与管理 ) ::阅读:(62240次) :: 评论 (4) :: 引用 (0)
===========================================================
如何删除windows服务
===========================================================
如何删除windows服务 查看全文
Oracle114 发表于:2008.03.01 16:17 ::分类: ( Oracle结构与管理 ) ::阅读:(23285次) :: 评论 (0) :: 引用 (0)
===========================================================
如何识别最耗资源的SQL
===========================================================

一般来说,调优的第一手资料,很可能就是典型业务期的一个statspack报告,那么如何根据statspack报告来判断是哪些SQL消耗了最多的系统资源?哪些SQL是最需要调整的呢?这里给出了一个大致的优化思路。当然,思路是死的,人是活的,优化也需要随需应变。

一般来说,需要关注下面四种Top SQL

  • 消耗最多CPU的(逻辑IO过多)
  • 导致过多物理I/O的
  • 执行次数较频繁的
  • 执行时间较长的

我们知道,一个语句的响应时间有个很著名的公式:

响应时间=服务时间+等待时间

其中服务时间就是CPU为执行该语句花费的时间。

服务时间=分析时间+递归时间+执行时间

分析时间是CPU用于分析语句的时间,递归时间是CPU用于语句的递归SQL的时间,剩下的则就是CPU用于执行语句的真正时间了。

那么,上面的这些时间信息从哪里来的?Oracle提供的系统统计信息中就有部分的时间统计信息:

服务时间=CPU used by this session
分析时间=parse time cpu
递归时间=recursive cpu usage

那么,执行时间就可以根据上面三个统计信息计算得出:

执行时间=CPU used by this session - parse time cpu - recursive cpu usage

  • 如果执行时间在整个响应时间中占较大的比例,那么下一步就是找出那些造成了最多逻辑IO的SQL语句,可以从statspack报告的SQL ordered by Gets部分找到。
  • 如果分析时间在整个响应时间中占较大的比例,那么下一步就是查找哪些SQL分析过多,这在statspack报告中在SQL ordered by Parse Calls中列出。
  • 如果等待时间在整个响应时间中占较大的比例,并且主要是块读取相关的等待时,下一步就是找出哪些SQL造成了过多的物理读,可以查看statspack报告中的SQL ordered by Reads部分。

那么,根据上面列出的一个简单的原则,我们需要关注三个关于CPU时间的统计信息: CPU used by this session, parse time cpu和recursive cpu usage,以及top5等待事件中和IO相关的等待时间。如果是其他的一些等待事件出现在Top5中,那么可能需要根据不同的等待事件来分析原因了。然后优先调优时间消耗最多的相关SQL。

除了上面的SQL ordered by Gets(逻辑IO最多),SQL ordered by Parse Calls(软解析过多),SQL ordered by Reads(物理IO过多),statspack还按照其他的一些方式列出了Top SQL,这些Top SQL在某些情况下都是需要给予特别关注的。比如

  • SQL ordered by Executions 执行次数超过100的
  • SQL ordered by Sharable Memory 占用library cache超过1M的
  • SQL ordered by Version Count 子cursor超过20的

如果没有statspack,那么根据v$sysstat/v$sesstat中的统计信息,结合v$sql/v$sqlarea,一样可以得到相关的SQL。

v$sql对于每一个子cursor都有一行统计记录,而v$sqlarea则对同一个父cursor只有一行统计记录,也就是v$sqlarea是对v$sql按照父cursor进行group by后的一个结果。这两个视图中都有诸如buffer_gets,parse_calls,disk_reads,,executions,sharable_mem等列,和上面提到的statspack中列出Top SQL的条件对应。

参考文章:Metalink Note:232443.1

--EOF--


Oracle114 发表于:2007.10.10 00:53 ::分类: ( Oracle调优与深入 ) ::阅读:(7279次) :: 评论 (0) :: 引用 (0)
===========================================================
如何在windows平台设置在Oracle的window服务启动时,不启动实例
===========================================================

可以指在window服务启动时,不启动实例.有两种方法:

(1)通过oradim startup 参数设定,如下:

a.查看oradim帮助
C:Documents and SettingsAdministrator>oradim help
DIM-00002: 有效的命令包括: -DELETE, -EDIT, -NEW, -STARTUP 和 -SHUTDOWN
请输入以下命令之一:
通过指定以下参数创建例程:
-NEW -SID sid | -SRVC service [-INTPWD password] [-MAXUSERS number] [-STARTM
ODE a|m] [-PFILE file] [-TIMEOUT secs]
通过指定以下参数编辑例程:
-EDIT -SID sid [-NEWSID sid] [-INTPWD passwd] [-STARTMODE a|m] [-PFILE file] [-
SHUTMODE a|i|n] [-SHUTTYPE srvc|inst]
通过指定以下参数删除例程:
-DELETE -SID sid | -SRVC service name
通过指定以下参数启动服务和例程:
-STARTUP -SID sid [-USRPWD password] [-STARTTYPE srvc|inst|srvc,inst] [-PFIL
E filename]
通过指定以下参数关闭服务和例程:
-SHUTDOWN -SID sid [-USRPWD password] [-SHUTTYPE srvc|inst|srvc,inst] [-SHUT
MODE a | i | n]
通过指定以下参数查询帮助: -? | -h | -help
您为 -NEW 命令输入了无效的选项
b.仅启动服务(starttype参数指定)
C:Documents and SettingsAdministrator>oradim -startup -sid ldydb -starttype srvc

c.登录SQLPLUS
C:Documents and SettingsAdministrator>sqlplus /nolog

SQL*Plus: Release 9.2.0.1.0 - Production on 星期五 9月 21 13:12:08 2007

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

d.连接数据库
SQL> conn / as sysdba
已连接到空闲例程。

然后执行数据库分步启动就OK了.

(2)通过Oracle Administration Assistant for Windows NT工具进行设置

a.开始->程序->Oracle->Configuration and Migration Tools->Oracle Administration Assistant for Windows NT

b.数据库->orcl->启动关闭选项->服务启动时启动例程,把该项取消即可


Oracle114 发表于:2007.09.21 13:40 ::分类: ( Oracle结构与管理 ) ::阅读:(1961次) :: 评论 (0) :: 引用 (0)
===========================================================
oracle.net.common.NetGetEnv.getDNSDomain
===========================================================

今天安装LINUX AS 4和ORACLE 10.2,安装成功后,运行netca和dbca系统总是报错,信息如下:
......
Current Java thread:
at oracle.net.common.NetGetEnv.getDNSDomain(Native Method)
at oracle.net.ca.ConfigureProfile.setDefaultProfileParams(Unknown Source)
at oracle.net.ca.InitialSetup.setupConfigObjects(Unknown Source)
at oracle.net.ca.InitialSetup.(Unknown Source)
at oracle.net.ca.NetCA.main(Unknown Source)
......

google搜索后,发现NinGoo的BLOG有相关记载,转载之(http://ningoo.itpub.net/post/2149/230876)我的出错原因是使用DHCP来获得IP地址所致!!

-----------------------------------------------------------------------

修改主机名后,忘记更新/etc/hosts文件的设置,导致运行netca报错。论坛帖子:http://www.itpub.net/671313.html

主要报错如下:

An unexpected exception has been detected in native code outside the VM.
Unexpected Signal : 11 occurred at PC=0xB7500243
Function=index+0x63
Library=/lib/tls/libc.so.6

Current Java thread:
at oracle.net.common.NetGetEnv.getDNSDomain(Native Method)
at oracle.net.ca.ConfigureProfile.setDefaultProfileParams(Unknown Source)
at oracle.net.ca.InitialSetup.setupConfigObjects(Unknown Source)
at oracle.net.ca.InitialSetup.(Unknown Source)

该错误主要在netca尝试将主机名转换成IP地址的过程中出现异常,又无法从DNS服务器中获得所需要的信息。在VMWare中,如果使用DHCP来获得IP地址,也可能出现该错误。在Google中搜索"oracle.net.common.NetGetEnv.getDNSDomain"可以获得一些有用的信息。

一般在/etc/hosts添加hostname到IP的正确映射,或者配置正确的DNS,可以解决该问题。


Oracle114 发表于:2007.09.19 16:24 ::分类: ( Oracle结构与管理 ) ::阅读:(1276次) :: 评论 (1) :: 引用 (0)
===========================================================
关于sga_max_size与sga_target的区别
===========================================================

昨天看了一下官方文档,搞懂了10g自动管理的方式:
在sga_target为非零情况下,启用自动sga管理,但是有些部件是不能自动管理的,包括三部分:
nk buffer;log buffer;keep&recycle buffer;
这些非自动管理组件必须手工设定,而且这部分内存的大小也在sga_target管理范围内,实际上参与自动分配的内存是要sga_target
减去这部分的大小。可以理解为实际上sga的大小是由sga_target(动态参数)指定,且不能大于sga_max_size指定的大小,
而sga_max_size是在实例启动时同操作系统打交道的一个参数(静态参数!)
而如果指定了share_pool_size等以前用的参数时,就作为这些动态组件的一个下限来使用(其实这个特征也很重要。)

nK Buffer:

db_16k_cache_size big integer 0
db_2k_cache_size big integer 0
db_32k_cache_size big integer 0
db_4k_cache_size big integer 0
db_8k_cache_size big integer 0

请参考: http://www.itpub.net/854073.html


Oracle114 发表于:2007.09.19 13:20 ::分类: ( Oracle结构与管理 ) ::阅读:(1116次) :: 评论 (0) :: 引用 (0)
===========================================================
档案里有什么
===========================================================

费了九牛二虎之力把档案给弄出来了,还要选择放弃干部身份,到底放弃对自己有什么不好,也不知道.

不过,对档案里面放了什么比较感兴趣,只看到在封档案前,工作人员在整理资料时看到几眼,入团申请书,入党志愿书,还有大学成绩单,最让我感到惊奇的是,里面竟然有高考试卷,如果能让看看高考试卷多好.可惜呀,档案不允许个人看到的,也不知道里面是不是有自己黑色的一笔.阿弥陀佛,希望没有!

盼吧,等一桩心事完成,可以好好的放松一下


Oracle114 发表于:2007.09.18 09:14 ::分类: ( 生活 ) ::阅读:(976次) :: 评论 (1) :: 引用 (0)
===========================================================
婚后归来
===========================================================

 查看全文

Oracle114 发表于:2007.09.04 12:59 ::分类: ( 生活 ) ::阅读:(488次) :: 评论 (0) :: 引用 (0)
===========================================================
WINDOWS环境下如何使用操作系统认证登录ORACLE数据库
===========================================================

请参考:

http://www.itpub.net/151470.html

http://www.itpub.net/162971.html

http://www.itpub.net/207909.html

http://blog.itpub.net/post/468/4223

http://grassbell.itpub.net/post/26/7704

说明:

通过语句CREATE USER DBUSER IDENTIFIED EXTERNALLY创建的OS认证的用户,实际上是OS USERDB USER建立的映射关系,将OS用户也对应加入数据库用户中,这类的用户将由OS进行用户的验证,OS USERDB USER之间的对应关系需告知ORACLE,这个对应关系就是由初始化参数OS_AUTHENT_PREFIX定义的。对应关系取决于注册表项OSAUTH_PREFIX_DOMAIN的值:

OSAUTH_PREFIX_DOMAIN的值为TRUE

DB USER = OS_AUTHENT_PREFIX || 主机名’ || OS USER

OSAUTH_PREFIX_DOMAIN的值为FALSE

DB USER = OS_AUTHENT_PREFIX || OS USER

OS_AUTHENT_PREFIX的默认值是OPS$

 查看全文
Oracle114 发表于:2007.03.28 20:22 ::分类: ( Oracle结构与管理 ) ::阅读:(1237次) :: 评论 (0) :: 引用 (0)
===========================================================
Which Operations are Allowed or Prohibited on RBS with or without AUM?
===========================================================
Doc ID: Note:135217.1
Subject: Which Operations are Allowed or Prohibited on RBS with or without AUM?
Type: BULLETIN
Status: PUBLISHED
Content Type: TEXT/PLAIN
Creation Date: 08-FEB-2001
Last Revision Date: 07-AUG-2003

PURPOSE
-------

This bulletin shows the errors you would encounter when you attempt to use
operations on rollback segments whether you are in Automatic Undo Management
(AUM) mode or not.

It explains the reasons for the restrictions applied on rollback segment
management.

The error messages always specify which mode the operations takes place in:

* Automatic Undo Management
* Manual Undo Management


SCOPE & APPLICATION
-------------------

For DBAs who are used to managing the rollback segments of a database manually
and who now have to consider the existence of AUM (Automatic Undo Management).


Which operations are allowed or prohibited on rollback segments when you are
using or not using AUM?


Different types of errors
-------------------------

Imagine you have two UNDO tablespaces available in the database, and therefore
a number of system-generated rollback segments.

You also have at least a user-generated rollback segment called SYSTEM and
eventually some other user-generated rollback segments in non UNDO tablespaces.

SQL> create undo tablespace UNDO_RBS1
2 datafile 'undorbs1.dbf' size 100m;
Tablespace created.

SQL> select TABLESPACE_NAME, CONTENTS,
2 EXTENT_MANAGEMENT, ALLOCATION_TYPE,
3 SEGMENT_SPACE_MANAGEMENT
4 from dba_tablespaces where contents='UNDO';

TABLESPACE_NAME CONTENTS EXTENT_MAN ALLOCATIO SEGMEN
------------------------------ --------- ---------- --------- ------
RBS UNDO LOCAL SYSTEM MANUAL
UNDO_RBS1 UNDO LOCAL SYSTEM MANUAL


SQL> select owner,segment_name,tablespace_name, status
2 from dba_rollback_segs order by 3;

OWNER SEGMENT_NAME TABLESPACE_NAME STATUS
------ -------------- --------------- ----------------
PUBLIC _SYSSMU1$ RBS ONLINE
PUBLIC _SYSSMU2$ RBS ONLINE
PUBLIC _SYSSMU3$ RBS ONLINE
PUBLIC _SYSSMU5$ RBS ONLINE
PUBLIC _SYSSMU7$ RBS ONLINE
PUBLIC _SYSSMU9$ RBS ONLINE
PUBLIC _SYSSMU10$ RBS ONLINE
PUBLIC _SYSSMU8$ RBS ONLINE
PUBLIC _SYSSMU6$ RBS ONLINE
PUBLIC _SYSSMU4$ RBS ONLINE
SYS SYSTEM SYSTEM ONLINE
SYS RS01 SYSTEM OFFLINE
PUBLIC _SYSSMU11$ UNDO_RBS1 OFFLINE
PUBLIC _SYSSMU12$ UNDO_RBS1 OFFLINE


You try the following operations and receive errors:

-----------------------------------------------------------
Example 1: Create a rollback segment in an UNDO tablespace
-----------------------------------------------------------
UNDO_MANAGEMENT=AUTO

SQL> create rollback segment undo_rs1 tablespace undo_rbs1;
create rollback segment undo_rs1 tablespace undo_rbs1
*
ERROR at line 1:
ORA-30019: Illegal rollback Segment operation in Automatic Undo mode

----------------------------------------------------------
Example 2: Alter a rollback segment of an UNDO tablespace
----------------------------------------------------------
UNDO_MANAGEMENT=AUTO

SQL> alter rollback segment "_SYSSMU11$" online;
alter rollback segment "_SYSSMU11$" online
*
ERROR at line 1:
ORA-30019: Illegal rollback Segment operation in Automatic Undo mode

SQL> alter rollback segment "_SYSSMU8$" offline;
alter rollback segment "_SYSSMU8$" offline
*
ERROR at line 1:
ORA-30019: Illegal rollback Segment operation in Automatic Undo mode

--------------------------------------------------------------
Example 3: Create a rollback segment in a non UNDO tablespace
--------------------------------------------------------------
UNDO_MANAGEMENT=AUTO

SQL> create public rollback segment rs02 tablespace system;
create public rollback segment rs02 tablespace system
*
ERROR at line 1:
ORA-30019: Illegal rollback Segment operation in Automatic Undo mode

------------------------------------------------------------------
Example 4: Online a rollback segment created in an UNDO tablespace
------------------------------------------------------------------
UNDO_MANAGEMENT=MANUAL

Create a rollback segment in an UNDO tablespace and set it online:

SQL> create rollback segment undo_rs1 tablespace undo_rbs1;
Rollback segment created.

SQL> alter rollback segment undo_rs1 online;
Rollback segment altered.

UNDO_MANAGEMENT=AUTO

Start the database in AUM mode. Any rollback segment previously created in the
active UNDO tablespace is automatically set OFFLINE and cannot be set back online.

SQL> alter rollback segment undo_rs1 online;
alter rollback segment undo_rs1 online
*
ERROR at line 1:
ORA-30019: Illegal rollback Segment operation in Automatic Undo mode

But you can drop them:

SQL> drop rollback segment undo_rs1;
Rollback segment dropped.

=>
All cases of error ORA-30019 are a result of choosing to manage rollback
segments in AUTOMATIC mode, setting the init.ora parameter to

UNDO_MANAGEMENT=AUTO


----------------------------------------------------------------------------
|The RDBMS prohibits any manual operation on ROLLBACK SEGMENTS of any type |
|of tablespace, except dropping them. |
----------------------------------------------------------------------------


--------------------------------------------------------------
Example 5: Alter an UNDO tablespace to set it OFFLINE
--------------------------------------------------------------
UNDO_MANAGEMENT=MANUAL

SQL> select TABLESPACE_NAME, CONTENTS, STATUS
2 from dba_tablespaces where contents='UNDO';

TABLESPACE_NAME CONTENTS STATUS
------------------------------ --------- ---------
RBS UNDO OFFLINE
UNDO_RBS1 UNDO ONLINE

SQL> alter tablespace undo_rbs1 offline;
alter tablespace undo1 offline
*
ERROR at line 1:
ORA-01546: tablespace contains active rollback segment 'UNDO_RS1'

Since you can create rollback segments in UNDO tablespaces, if you are in
manual mode, the rollback segments created in UNDO tablespaces are made
available for the transactions. You cannot therefore offline the tablespace
they reside in without first offlining any rollback segments in the tablespace.

SQL> alter rollback segment undo_rs1 offline;

Rollback segment altered.

SQL> alter tablespace undo_rbs offline;

Tablespace altered.


--------------------------------------------------------------------------
Example 6: Alter a system-managed rollback segment of an UNDO tablespace ONLINE
--------------------------------------------------------------------------
UNDO_MANAGEMENT=MANUAL

SQL> select tablespace_name,segment_name, status from dba_rollback_segs;

TABLESPACE_NAME SEGMENT_NAME STATUS
------------------------------ ------------------------------ -------------
SYSTEM SYSTEM ONLINE
RBS _SYSSMU1$ OFFLINE
RBS _SYSSMU2$ OFFLINE
RBS _SYSSMU3$ OFFLINE
RBS _SYSSMU4$ OFFLINE
RBS _SYSSMU5$ OFFLINE
RBS _SYSSMU6$ OFFLINE
RBS _SYSSMU7$ OFFLINE
RBS _SYSSMU8$ OFFLINE
RBS _SYSSMU9$ OFFLINE
RBS _SYSSMU10$ OFFLINE
UNDO_RBS1 _SYSSMU11$ OFFLINE


SQL> alter rollback segment "_SYSSMU11$" ONLINE;
alter rollback segment "_SYSSMU11$" ONLINE
*
ERROR at line 1:
ORA-30017: segment '_SYSSMU1$' is not supported in MANUAL Undo Management mode

If you have set UNDO_MANAGEMENT to MANUAL, any system-generated undo segments
that were previously created in AUTO mode cannot be manually altered.


*** ********************************
*** In all cases: AUM or MANUAL mode
*** ********************************

The only operations you can perform with system-generated undo segments
are CREATE/DROP UNDO tablespace:

SQL> drop rollback segment "_SYSSMU11$";
drop rollback segment "_SYSSMU11$"
*
ERROR at line 1:
ORA-30025: DROP segment '_SYSSMU11$' (in undo tablespace) not allowed

SQL> drop tablespace UNDO_RBS1 including contents and datafiles;
Tablespace dropped.

SQL> create undo tablespace undo_rbs1
2 datafile '/sme/app/oracle/product/9iRel10/oradata/V9r10/undorbs1.dbf'
3 size 200k;
Tablespace created.


RELATED DOCUMENTS
-----------------

[NOTE:135090.1] Managing Rollback/Undo Segments in AUM (Automatic Undo
Management)
[NOTE:135053.1] How to Create a Database with Automatic Undo Management

Oracle114 发表于:2007.03.07 09:37 ::分类: ( Oracle结构与管理 ) ::阅读:(95689次) :: 评论 (19) :: 引用 (0)
===========================================================
登录错误-----ORA-12560: TNS: 协议适配器错误
===========================================================

有网友遇到登录时,oracle12560错误

http://www.itpub.net/showthread.php?s=&postid=6774761

---------------------------------------------------------------

问:操作系统windowsoracle9i在服务端,以sys登陆不加服务名,登陆报错;如果加上服务名登陆正确。重启操作系统,重启db,现在在服务端无论用什么用户登陆只要不加服务名都错误;连接时加上服务名就正确。到底为什么呀?

C:>sqlplus /nolog

SQL*Plus: Release 9.2.0.1.0 - Production on
星期三 1 31 08:46:08 2007

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

SQL> connect sys/oracle@vassp as sysdba
已连接。
SQL> exit
Oracle9i Release 9.2.0.1.0 - Production
JServer Release 9.2.0.1.0 - Production
中断开

C:>sqlplus /nolog

SQL*Plus: Release 9.2.0.1.0 - Production on
星期三 1 31 08:46:24 2007

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

SQL> connect /as sysdba
ERROR:
ORA-12560: TNS:
协议适配器错误

---------------------------------------------------------------

由于这个问题也正困绕着我,一直在关注这个贴子的动态.今天看到PondKa的回复后,才豁然开朗

我的平台:windows2003+oracle9.2.0.1.0

SQL> select * from v$version;

BANNER
---------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production PL/SQL Release 9.2.0.1.0 - Production
CORE 9.2.0.1.0 Production
TNS for 32-bit Windows: Version 9.2.0.1.0 - Production
NLSRTL Version 9.2.0.1.0 - Production

我的系统开始运行正常,系统只有一个数据库test1,为了自己做测试,又建了第两个数据库test2,这样当启动test1的服务后,当登录总是报如下错误:

ERROR:
ORA-12560: TNS:
协议适配器错误

自己尝试了几次没有搞定,发现登录时加上服务名可以正常登录,也就随它去了,但这个问题也依然在自己脑中.

BTW:自己为什么没有拿到论坛上来问问大家,BS一下自己

经过测试发现,

1.确认sqlnet.ora文件中设置为操作系统验证

  SQLNET.AUTHENTICATION_SERVICES= (NTS)

2.查看windows对应的服务是否开启

打开services查看,服务名oracleservice<SID>的运行状态,该服务的启动与关闭也可通过CML(命令行 COMMAND LINE)进行操作.

SQL> $net start oracleserviceTEST2The OracleServiceTEST2 service is starting.
The OracleServiceTEST2 service was started successfully.


SQL> $net stop oracleserviceTEST2The OracleServiceTEST2 service is stopping...
The OracleServiceTEST2 service was stopped successfully.

注:WINNT中,在sqlplus中运行dos命令时,命令前加"$"符号

3.查看本地环境变量ORACLE_SID,ORACLE_HOME是否正确设置

C:Documents and SettingsAdministrator> set

ALLUSERSPROFILE=C:Documents and SettingsAll Users
APPDATA=C:Documents and SettingsAdministratorApplication Data
ClusterLog=C:WINDOWSClustercluster.log
CommonProgramFiles=C:Program FilesCommon Files

COMPUTERNAME=LDY
ComSpec=C:WINDOWSsystem32cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=Documents and SettingsAdministrator
JSERV=F:oracleora92/Apache/Jserv/conf
LOGONSERVER=LDY
NUMBER_OF_PROCESSORS=1
oracle_home=F:oracleora92
oracle_sid=TEST1
OS=Windows_NT
....

4.如果没有设置环境变量,请查看注册表中,HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE->HOME0中的ORACLE_SID,ORACLE_HOME项是否正确设置,如果oracle只有一个数据库,只需注册表中正确设置即可,无需设置环境变量.当然,如果像有多个数据库,需动态设置该环境变量

C:Documents and SettingsAdministrator>set oracle_home=

C:Documents and SettingsAdministrator>set oracle_sid=

C:Documents and SettingsAdministrator>set
ALLUSERSPROFILE=C:Documents and SettingsAll Users
APPDATA=C:Documents and SettingsAdministratorApplication Data
ClusterLog=C:WINDOWSClustercluster.log
CommonProgramFiles=C:Program FilesCommon Files
COMPUTERNAME=LDY
ComSpec=C:WINDOWSsystem32cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=Documents and SettingsAdministrator
JSERV=F:oracleora92/Apache/Jserv/conf
LOGONSERVER=LDY
NUMBER_OF_PROCESSORS=1
OS=Windows_NT
...无此变量

C:Documents and SettingsAdministrator>sqlplus /nolog

SQL*Plus: Release 9.2.0.1.0 - Production on 星期四 2 1 19:56:47 2007

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

SQL> conn / as sysdba已连接。
5
.如果有多个数据库,若想默认连接某个数据库,可不管当前注册表的设置,手动设置环境变量ORACLE_SID即可请看实验:

当前注册表ORACLE_SID=TEST1

C:Documents and SettingsAdministrator>set oracle_sid=

C:Documents and SettingsAdministrator>sqlplus /nolog

SQL*Plus: Release 9.2.0.1.0 - Production on 星期四 2 1 20:39:41 2007

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

SQL> $net stop oracleserviceTEST2

The OracleServiceTEST2 service is stopping...

The OracleServiceTEST2 service was stopped successfully.

SQL> $net stop oracleserviceTEST1

The OracleServiceTEST1 service is stopping........

The OracleServiceTEST1 service could not be stopped.

SQL> $net start oracleserviceTEST1

The OracleServiceTEST1 service is starting.

The OracleServiceTEST1 service was started successfully.

SQL> conn / as sysdba

已连接到空闲例程。

--注:当有注册设置时,即使没有设置环境变量,此时系统可按注册表设置进行TEST1的登录

SQL> $net stop oracleserviceTEST1

The OracleServiceTEST1 service is stopping...

The OracleServiceTEST1 service was stopped successfully.

SQL> conn / as sysdba

ERROR:

ORA-12560: TNS: 协议适配器错误

警告: 您不再连接到 ORACLE

--注:当相关WINNT服务ORACLESERVICETEST1没有开启,用户将无法正常连接TEST1

SQL> $net start oracleserviceTEST1

The OracleServiceTEST1 service is starting.

The OracleServiceTEST1 service was started successfully.

SQL> conn / as sysdba

已连接到空闲例程。

SQL> exit

已断开连接

C:Documents and SettingsAdministrator>set oracle_sid=TEST2

C:Documents and SettingsAdministrator>sqlplus /nolog

SQL*Plus: Release 9.2.0.1.0 - Production on 星期四 2 1 20:45:29 2007

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

SQL> conn / as sysdba

ERROR:

ORA-12560: TNS: 协议适配器错误

--注:环境变量的设置影响用户登录数据库的选择,此时设置为TEST2,而NT服务ORACLESERVICEQTEST2没有开启,所以显示登录错误

SQL> $NET START ORACLESERVICEQTEST2

The OracleServiceTEST2 service is starting.

The OracleServiceTEST2 service was started successfully.

SQL> CONN / AS SYSDBA

已连接到空闲例程。


Oracle114 发表于:2007.02.01 18:24 ::分类: ( Oracle结构与管理 ) ::阅读:(118290次) :: 评论 (55) :: 引用 (0)
===========================================================
[ZT]net命令详解
===========================================================

http://www.itpub.net/showthread.php?s=&threadid=38753&perpage=10&pagenumber=1

这篇文章综合了WINDOWS 98,WINDOWS WORKSTATION和WINDOWS SERVER 三个操作系统关于NET命令的解释,希望可以全面一些 先说一些:
(1)NET命令是一个命令行命令。
(2)管理网络环境、服务、用户、登陆。。。。等本地信息
(3)WIN 98,WIN WORKSTATION和WIN NT都内置了NET命令。
(4)但WIN 98的NET命令和WORKSTATION、NT的NET命令不同。
(5)WORKSTATION和SERVER中的NET命令基本相同。
(6)获得HELP
<1>在NT下可以用图形的方式,开始-》帮助-》索引-》输入NET
<2>在COMMAND下可以用字符方式,NET /?或NET或NET HELP得到一些方法 相应的方法的帮助NET COMMAND /HELP或NET HELP COMMAND 或NET COMMAND /? 另对于错误NET HELPMSG MESSAGE#是4位数
(7)强制参数 所有net命令接受选项/yes和/no(可缩写为/y和/n)。[简单的说就是预先给系统的 提问一个答案]
(8)有一些命令是马上产生作用并永久保存的,使用的时候要慎重
(9)对于NET命令的功能都可以找到相应的图形工具的解决方案
(10)命令的组成 命令 参数 选项 | 参数 选项 | 参数 选项 |。。。。。。

瘰疬罗嗦说了一大堆,其实就是6和7有用,呵呵 另有两件事:
(1)在NT的NET命令中有一些参数是只有在SERVER环境中才能使用的
(2)在WIN98的NET命令中有一些参数不能在DOS-WIN中使用,只能在DOS环境中使用

下面对NET命令的不同参数的基本用法做一些初步的介绍:

(1)NET VIEW
作 用:显示域列表、计算机列表或指定计算机的共享资源列表。
命令格式:net view [computername | /domain[omainname]
参数介绍:
<1>键入不带参数的net view显示当前域的计算机列表。
<2>computername 指定要查看其共享资源的计算机。
<3>/domain[omainname]指定要查看其可用计算机的域
简单事例
<1>net view YFANG查看YFANG的共享资源列表。
<2>net view /domain:LOVE查看LOVE域中的机器列表。

(2)NET USER
作 用:添加或更改用户帐号或显示用户帐号信息。该命令也可以写为 net users。
命令格式:net user [username [password | *] [options] [/domain]
参数介绍:
<1>键入不带参数的net user查看计算机上的用户帐号列表。
<2>username添加、删除、更改或查看用户帐号名。
<3>password为用户帐号分配或更改密码。
<4>*提示输入密码。
<5>/domain在计算机主域的主域控制器中执行操作。
简单事例:
<1>net user yfang查看用户YFANG的信息

(3)NET USE
作用:连接计算机或断开计算机与共享资源的连接,或显示计算机的连接信息。
命令格式:net use [devicename | *] [computernamesharename[volume] [password | *] [/user:[domainname]username] [/delete] | [/persistent:{yes | no]}
参数介绍:
键入不带参数的net use列出网络连接。
devicename指定要连接到的资源名称或要断开的设备名称。 computernamesharename服务器及共享资源的名称。
password访问共享资源的密码。
*提示键入密码。 /user指定进行连接的另外一个用户。
domainname指定另一个域。
username指定登录的用户名。
/home将用户连接到其宿主目录
/delete取消指定网络连接。
/persistent控制永久网络连接的使用。
简单事例:
<1>net use e: YFANGTEMP将YFANGTEMP目录建立为E盘
<2>net use e: YFANGTEMP /delete断开连接

(4)NET TIME
作 用:使计算机的时钟与另一台计算机或域的时间同步。
命令格式:net time [computername | /domain[:name] [/set]
参数介绍:
<1>computername要检查或同步的服务器名。
<2>/domain[:name]指定要与其时间同步的域。
<3>/set使本计算机时钟与指定计算机或域的时钟同步。
下面的这4个参数是相关的,所以一起介绍

(5)Net Start
作 用:启动服务,或显示已启动服务的列表。
命令格式:net start service

(6)Net Pause
作 用:暂停正在运行的服务。
命令格式:net pause service

(7)Net Continue
作 用:重新激活挂起的服务。
命令格式:net continue service

(8)NET STOP
作 用:停止 Windows NT 网络服务。
命令格式:net stop service
参数介绍:我们来看看这些服务都是什么
<1>alerter(警报)
<2>client service for netware(Netware 客户端服务)
<3>clipbook server(剪贴簿服务器)
<4>computer browser(计算机浏览器)
<5>directory replicator(目录复制器)
<6>ftp publishing service (ftp )(ftp 发行服务)
<7>lpdsvc
<8>net logon(网络登录) <9>network dde网络 dde)
<10>network dde dsdm(网络 dde dsdm)
<11>network monitor agent(网络监控代理)
<12>nt lm security support provider(NT LM 安全性支持提供)
<13>ole(对象链接与嵌入)
<14>remote access connection manager(远程访问连接管理器)
<15>remote access isnsap service(远程访问 isnsap 服务)
<16>remote access server(远程访问服务器)
<17>remote procedure call (rpc) locator(远程过程调用定位器)
<18>remote procedure call (rpc) service(远程过程调用服务)
<19>schedule(调度)
<20>server(服务器)
<21>simple tcp/ip services(简单 TCP/IP 服务)
<22>snmp
<23>spooler(后台打印程序)
<24>tcp/ip netbios helper(TCP/IP NETBIOS 辅助工具)
<25>ups (26)workstation(工作站)
<27>messenger(信使)
<28>dhcp client
<29>eventlog 以下这些SERVICE只能在NT SERVER上使用
<< 1>> )file server for macintosh
<<2>>gateway service for netware
<<3>>microsoft dhcp server
<<4>>print server for macintosh
<<5>>remoteboot
<<6>>windows internet name service

(9)Net Statistics
作 用:显示本地工作站或服务器服务的统计记录。
命令格式:net statistics [workstation | server]
参数介绍:
<1>键入不带参数的net statistics列出其统计信息可用的运行服务。 <2>workstation显示本地工作站服务的统计信息。
<3>server显示本地服务器服务的统计信息。
简单事例:
<1>net statistics server | more显示服务器服务的统计信息

(10)Net Share
作 用:创建、删除或显示共享资源。
命令格式:net share sharename=drive:path [/users:number | /unlimited] [/remark:"text"]
参数介绍:
<1>键入不带参数的net share显示本地计算机上所有共享资源的信息。
<2>sharename是共享资源的网络名称。
<3>drive:path指定共享目录的绝对路径。
<4>/users:number设置可同时访问共享资源的最大用户数。
<5>/unlimited不限制同时访问共享资源的用户数。
<6>/remark:"text "添加关于资源的注释,注释文字用引号引住。
简单事例:
<1>net share mylove=c:temp /remark:"my first share"以mylove为共享名共享C:temp
<2>net share mylove /delete停止共享mylove目录

(11)Net Session
作 用:列出或断开本地计算机和与之连接的客户端的会话,也可以写为net sessions或net sess。
命令格式:net session [computername] [/delete]
参数介绍:
<1>键入不带参数的net session显示所有与本地计算机的会话的信息。
<2>computername标识要列出或断开会话的计算机。
<3>/delete结束与computername计算机会话并关闭本次会话期间计算机的所有?
简单事例:
<1>net session YFANG要显示计算机名为YFANG的客户端会话信息列表。

(12)Net Send
作 用:向网络的其他用户、计算机或通信名发送消息。
命令格式:net send {name | * | /domain[:name] | /users} message 参数介绍:
<1>name要接收发送消息的用户名、计算机名或通信名。
<2>*将消息发送到组中所有名称。
<3>/domain[:name]将消息发送到计算机域中的所有名称。
<4>/users将消息发送到与服务器连接的所有用户。
<5>message作为消息发送的文本。
简单事例:
<1>net send /users server will shutdown in 5 minutes. 给所有连接到服务器的用户发送消息

(13)Net Print
作 用:显示或控制打印作业及打印队列。
命令格式:net print [computername ] job# [/hold | /release | /delete]
参数介绍:
<1>computername共享打印机队列的计算机名。
<2>sharename打印队列名称。
<3>job#在打印机队列中分配给打印作业的标识号。
<4>/hold使用 job# 时,在打印机队列中使打印作业等待。
<5>/release释放保留的打印作业。
<6>/delete从打印机队列中删除打印作业。
简单事例:
<1>net print YFANGSEEME列出YFANG计算机上SEEME打印机队列的目录

(14)Net Name
作 用:添加或删除消息名(有时也称别名),或显示计算机接收消息的名称列表。
命令格式:net name [name [/add | /delete]
参数介绍:
<1>键入不带参数的net name列出当前使用的名称。
<2>name指定接收消息的名称。
<3>/add将名称添加到计算机中。
<4>/delete从计算机中删除名称。

(15)Net Localgroup
作 用:添加、显示或更改本地组。
命令格式:net localgroup groupname {/add [/comment:"text "] | /delete} [/domain]
参数介绍:
<1>键入不带参数的net localgroup显示服务器名称和计算机的本地组名称。
<2>groupname要添加、扩充或删除的本地组名称。
<3>/comment: "text "为新建或现有组添加注释。
<4>/domain在当前域的主域控制器中执行操作,否则仅在本地计算机上执行操作?
<5>name [ ...]列出要添加到本地组或从本地组中删除的一个或多个用户名或组名。
<6>/add将全局组名或用户名添加到本地组中。
<7>/delete从本地组中删除组名或用户名。
简单事例:
<1>net localgroup love /add将名为love的本地组添加到本地用户帐号数据库
<2>net localgroup love显示love本地组中的用户

(16)Net Group
作 用:在 Windows NT Server 域中添加、显示或更改全局组。
命令格式:net group groupname {/add [/comment:"text "] | /delete} [/domain]
参数介绍:
<1>键入不带参数的net group显示服务器名称及服务器的组名称。
<2>groupname要添加、扩展或删除的组。
<3>/comment:"text "为新建组或现有组添加注释。 <4>/domain在当前域的主域控制器中执行该操作,否则在本地计算机上执行操作?
<5>username[ ...]列表显示要添加到组或从组中删除的一个或多个用户。
<6>/add添加组或在组中添加用户名。
<7>/delete删除组或从组中删除用户名。
简单事例:
<1>net group love yfang1 yfang2 /add将现有用户帐号yfang1和yfang2添加到本地计算机的love组

(17)Net File
作 用:显示某服务器上所有打开的共享文件名及锁定文件数。
命令格式:net file [id [/close]
参数介绍:
<1>键入不带参数的net file获得服务器上打开文件的列表。
<2>id文件标识号。
<3>/close关闭打开的文件并释放锁定记录。

(18)Net Config
作 用:显示当前运行的可配置服务,或显示并更改某项服务的设置。
命令格式:net config [service [options]
参数介绍:
<1>键入不带参数的net config显示可配置服务的列表。
<2>service通过net config命令进行配置的服务(server或workstation)
<3>options服务的特定选项。

(19)Net Computer
作 用:从域数据库中添加或删除计算机。
命令格式:net computer computername {/add | /del}
参数介绍:
<1>computername指定要添加到域或从域中删除的计算机。
<2>/add将指定计算机添加到域。
<3>/del将指定计算机从域中删除。
简单事例:
<1>net computer cc /add将计算机 cc 添加到登录域

(20)Net Accounts
作 用:更新用户帐号数据库、更改密码及所有帐号的登录要求。
命令格式:net accounts [/forcelogoff:{minutes | no}] [/minpwlen:length] [/maxpwage:{days | unlimited}] [/minpwageays] [/uniquepw:number] [/domain]
参数介绍:
<1>键入不带参数的net accounts显示当前密码设置、登录时限及域信息。
<2>/forcelogoff:{minutes | no}设置当用户帐号或有效登录时间过期时
<3>/minpwlen:length设置用户帐号密码的最少字符数。
<4>/maxpwage:{days | unlimited}设置用户帐号密码有效的最大天数。
<5>/minpwageays设置用户必须保持原密码的最小天数。
<6>/uniquepw:number要求用户更改密码时,必须在经过number次后才能重复使用 与之相同的密码。
<7>/domain在当前域的主域控制器上执行该操作。 <8>/sync当用于主域控制器时,该命令使域中所有备份域控制器同步
简单事例:
<1>net accounts /minpwlen:7
将用户帐号密码的最少字符数设置为7

----------------------上面介绍的是NET命令在WINNT下的基本用法

----------------------下面我们看看NET命令在WIN98下的基本用法
在WIN98中NET命令也有一些参数 其中有一些参数的名字和功能及简单的使用方法和WINNT下的相应的参数的用法相同
其中有
(1)NET TIME命令
(2)NET PRINT命令
(3)NET USE命令
(4)NET VIEW命令
在WIN98中NET命令有一些参数 其中有一些参数的名字和WINNT下的相应的参数的名字相同但其用法却有些不同
其中有
(1)NET START
作 用:启动相应的服务。(不能在DOS-WIN中用)
命令格式:NET START [BASIC | NWREDIR | WORKSTATION | NETBIND | NETBEUI | NWLINK] [/LIST] [/YES] [/VERBOSE]
(2)NET STOP
作 用:停止相应的服务.(不能在DOS-WIN中用)
命令格式:NET STOP [BASIC | NWREDIR | WORKSTATION | NETBEUI | NWLINK] [/YES]

在WIN98中NET命令还有一些参数是在98下才有的
其中有
(1)NET DIAG
作 用:运行MS的DIAGNOSTICS程序显示网络的DIAGNOSTIC信息
命令格式:NET DIAGNOSTICS [/NAMES | /STATUS]
(2)NET INIT
作 用:不通过绑定来加载协议或网卡驱动(不能在DOS-WIN中用)
命令格式:NET INITIALIZE [/DYNAMIC]
(3)NET LOGOFF
作 用:断开连接的共享资源(不能在DOS-WIN中用)
(4)NET LOGON
作 用:在WORKGROUP中登陆(不能在DOS-WIN中用)
命令格式:NET LOGON [user [password | ?] [/DOMAIN:name] [/YES] [/SAVEPW:NO]
(5)NET PASSWORD
作 用:更改你的网络登陆口令(不能在DOS-WIN中用)
命令格式:NET PASSWORD computer | /DOMAIN:name [user [oldpassword [newpassword]


Oracle114 发表于:2007.02.01 16:37 ::分类: ( Oracle结构与管理 ) ::阅读:(2049次) :: 评论 (0) :: 引用 (0)
===========================================================
转:如何学习Oracle-eygle的方法经验谈---eygle
===========================================================

以前就看过eygle的这篇文章,今早再次读来,仍有所获,故记之

我个人在学习中最大的问题在于急躁,还有会为失败找借口,而不是为成功找方法,比如学习计划经常没有按时完成,不是想方设法的去执行计划,而是会为某种原因饶过自己,比较赞同eygle的这句话"如果你觉得掌握的东西没有别人多,那么也许就是因为,你不如别人勤奋",谨记.

原文如下:

作者:

eygle 发表于 2005-08-08 09:40 最后更新于 2006-12-11 12:14 | English Version 版权声明:可以任意转载,转载时请务必以超链接形式标明文章和作者信息及本声明  查看全文
Oracle114 发表于:2007.02.01 09:46 ::分类: ( 生活 ) ::阅读:(361次) :: 评论 (0) :: 引用 (0)
===========================================================
SGA与共享内存
===========================================================

<深入浅出ORACLE>P118中讲述SGA的设置在LINUX/UNIX上和一个操作系统内核参数(shmmax)有关。

文章指出该内核参数定义的是系统允许的单个共享内存段的最大值,而非共享内存的大小;该参数设置小于SGA设置时,SGA将被成功地分配在多个共享内存段中。推荐通过调整SHMMAX设置,将SGA限制在一个共享内存段中。

从理论上可以理解上述内容,但由于没有测试环境,暂记录于此,等这两天装好REDHAT后再测试,不懂UNIX,看来万里长征刚迈出第一步。

另:查看PUB上对于多共享段对ORACLE性能的影响,不甚理解,同时对BITI大师由衷的赞!

参考:

Oracle数据库管理区->关于Linux 下kernel.shmmax 的设置问题

http://www.itpub.net/551203,1.html

Oracle专题深入讨论>关于Linux 下kernel.shmmax

http://www.itpub.net/551229.html

上面文章需再次研读,读两次还读不懂,汗...

---------------------------------------------------------------------------------------------------

后记,本来用google搜一下ipcs的用法,第一个链接竟是eygle大师的,粗略的看了一下,和书本上的大同小异,看来以后要天天看eygle的blog,这样以后他出的书就不用买了,省钱啦 ^_^

http://www.eygle.com/archives/2005/11/whats_mean_linux_shmmax.html


Oracle114 发表于:2007.01.24 09:58 ::分类: ( Oracle结构与管理 ) ::阅读:(373次) :: 评论 (0) :: 引用 (0)
===========================================================
关于NT系统中,ORACLE的SGA粒度的疑问--??
===========================================================

读eygle的书<深入浅出oracle>第四章P110,其提到
----------------------------
自9i开始,引入新的初始化参数db_cache_size;该参数定义主Block Size(db_block_size定义的块大小)的default缓冲池的大小;
Db_cache_size最小值为一个粒度(granule)。
粒度(granule):粒度是连续虚拟内存分配的单位,粒度是9i新引入的参数,其大小取决于SGA_MAX_SIZE参数所规定的SGA总的大小
当SGA<128M时,粒度值为4M;否则粒度值为16M
粒度大小受内部隐含参数_ksmg_granule_size的控制
----------------------------
测试平台:windows2003+oracle9.2.1.0
在我的测试系统试验粒度值和SGA的大小关系,发现上面的结论不同,不知是不是自己测试的问题???还是说这个结论是对UNIX系统而言???

请看测试过程:
SQL> show sga

Total System Global Area 319888364 bytes
Fixed Size 453612 bytes
Variable Size 310378496 bytes
Database Buffers 8388608 bytes
Redo Buffers 667648 bytes
SQL> set linesize 120
SQL> col name for a30
SQL> col value for a20
SQL> col describ for a60
SQL> SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ
2 FROM SYS.x$ksppi x, SYS.x$ksppcv y
3 WHERE x.inst_id = USERENV ('Instance')
4 AND y.inst_id = USERENV ('Instance')
5 AND x.indx = y.indx
6 AND x.ksppinm LIKE '%&par%'
7 /
Enter value for par: _ksmg_granule_size
old 6: AND x.ksppinm LIKE '%&par%'
new 6: AND x.ksppinm LIKE '%_ksmg_granule_size%'

NAME VALUE DESCRIB
------------------------------ -------------------- ---------------------------
--------------------------------
_ksmg_granule_size 8388608 granule size in bytes



SQL> alter system set sga_max_size=100M scope=spfile;

System altered.

SQL> startup force
ORACLE instance started.

Total System Global Area 114367248 bytes
Fixed Size 453392 bytes
Variable Size 109051904 bytes
Database Buffers 4194304 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。

SQL> SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ
2 FROM SYS.x$ksppi x, SYS.x$ksppcv y
3 WHERE x.inst_id = USERENV ('Instance')
4 AND y.inst_id = USERENV ('Instance')
5 AND x.indx = y.indx
6 AND x.ksppinm LIKE '%&par%'
7 /
输入 par 的值: _ksmg_granule_size
原值 6: AND x.ksppinm LIKE '%&par%'
新值 6: AND x.ksppinm LIKE '%_ksmg_granule_size%'

NAME VALUE DESCRIB
------------------------------ -------------------- ----------------------------
--------------------------------
_ksmg_granule_size 4194304 granule size in bytes

-----------------------------

结论:
从上面的过程可以看出,当SGA_MAX_SIZE约300M时,粒度大小为8M,非不是书本上所说的16M

zouzhiyou 不会游泳的鱼提示参考--oracle 10g release 2 concepts中的一段话
,如下:

Granule size is determined by total SGA size. On most platforms, the size of a granule
is 4 MB if the total SGA size is less than 1 GB, and granule size is 16MB for larger
SGAs. Some platform dependencies arise. For example, on 32-bit Windows, the
granule size is 8 M for SGAs larger than 1 GB.

eygle说---这些参数和平台/版本都有关系,具体含义及Oracle的管理方式明白了就好,其它的根据平台和版本自己查询一下就知道了。

看来书本上的很多结论必须自动动手测试,不然只管记结论,有时是会犯错误的

http://www.itpub.net/showthread.php?s=&threadid=709150


Oracle114 发表于:2007.01.22 10:43 ::分类: ( Oracle结构与管理 ) ::阅读:(441次) :: 评论 (0) :: 引用 (0)