大家好,再学习oracle中有个问题请教一下。。
1。如果在sqlplus中shutdown immediate 一个数据库,在相应的系统进程(oracle.exe)怎么还是存在,而且有内存使用从原来的几百兆变为几十兆,那么这几十兆谁在使用(应该已经不是sga,数据库已经关闭,实例已经关闭,内存应该都收回了) ?
2。shutdown immediate 数据库成功后,会提示数据库已经关闭,已经卸载数据库,oracle例程已经关闭。在我看来服务中的相关服务(oracleserverorcl服务)应该是关闭,但是没有关闭,为什么?他们之间应该是有关联的.
目前我做了如下操作:
1.sqlplus 中shutdown immediate
2.关闭服务中的oracleserverorcl
3.开启oralceserverorcl
4 sqlplus 中可以连接到orcl数据库
以上得出的结论是如果开启服务,那么orcl数据库会被打开.那么为什么我sqlplus中shutdown 数据库,服务不会关闭呢?也就是说如果我shudown数据库在sqlplus,再做什么操作才会使服务自己变为关闭呢????不知道大家有没有明白我的疑问哈.
thanks everybody~
1。如果在sqlplus中shutdown immediate 一个数据库,在相应的系统进程(oracle.exe)怎么还是存在,而且有内存使用从原来的几百兆变为几十兆,那么这几十兆谁在使用(应该已经不是sga,数据库已经关闭,实例已经关闭,内存应该都收回了) ?
2。shutdown immediate 数据库成功后,会提示数据库已经关闭,已经卸载数据库,oracle例程已经关闭。在我看来服务中的相关服务(oracleserverorcl服务)应该是关闭,但是没有关闭,为什么?他们之间应该是有关联的.
目前我做了如下操作:
1.sqlplus 中shutdown immediate
2.关闭服务中的oracleserverorcl
3.开启oralceserverorcl
4 sqlplus 中可以连接到orcl数据库
以上得出的结论是如果开启服务,那么orcl数据库会被打开.那么为什么我sqlplus中shutdown 数据库,服务不会关闭呢?也就是说如果我shudown数据库在sqlplus,再做什么操作才会使服务自己变为关闭呢????不知道大家有没有明白我的疑问哈.
thanks everybody~
解决方案 »
- oracle 超简单触发器 Warning: Trigger created with compilation errors
- 关于JDBC中事物的保存点 程序不能运行
- 如何限制某些用户一个SESSION可用并行服务器不超过2个,profile实现不了哦!
- 在Oracle8/8i中如何创建返回数据集合的函数?
- 两个不同数据库内,如何将从一个数据库内取出的整条数据直接出入到另一个数据库内结构相同的一张表中
- oracle表中的主关键字,如何设成自动增长?并对该字段插入数据?请写出SQL代码.
- 关于insert和子查询合用的问题,急~~~~!
- 在sqlplus里怎么执行带输出参数的过程?
- create table a01_up as select * from a01 报错!原因是a01里面有个字段类型是long raw的,怎么解决呢?
- 一个初级的问题,谢谢!
- 为什么在这张表上做查询速度这么慢?
- 命令“net stop OracleServiceORCL”和“shutdown”的区别?
说穿了,windows 上的服务
其实只是一个和数据库的接口而已。
数据库本身并不依靠它。
你在oracle中 如果shutdown immediate 成功了,
在数据库日志中就有数据库已经关闭了。
而此时oracleserverorcl 这个服务仍然开启,
它这个服务只是操作系统的,而不是数据库的哈。
授人以鱼不如授人以鱼就像楼上csucxcc说的
服务在WINDOWS里就像一个和数据库的接口一样 一扇门
打开了服务(打开了走向ORACLE的大门)--才能进一步去打开数据库
关闭数据库--可服务并没有关闭(大门没关,也没关系呀) OK?
看了个各位的回复,如果单纯的理解为接口(大门)好像不是很妥当.
打开了服务(打开了走向ORACLE的大门)--才能进一步去打开数据库
关闭数据库--可服务并没有关闭(大门没关,也没关系呀)
如果按照上面的说法:正确开启数据库的步骤应该是:打开服务->sqlplus下startup open.但是如果你开机打开服务数据库就开启了,也就是说oracle服务不是单纯的接口.
就是和别的程序有一个接口啊,你打开这个服务,就可以通过接口把数据库打开。
你关闭这个服务,就可以通过接口把数据库关闭。
你不通过这个接口,而通过sqlplus这个接口,数据库也可以被你关闭。
明白否?
在你建立一个数据库的时候如果你的数据库名为test,就会有oracleservertest这个服务生成.那个这个服务应该跟你数据库有这密切的关系.但是它又不能单纯的理解为接口..
你可以双击这个服务其实他是运行了:e:\oracle\product\10.2.0\db_1\bin\ORACLE.EXE test
到底它运行了什么?是开启数据库么(目前看是)?那为什么sqlplus关闭数据库时候,他还在开启,那么还有什么遗留呢?它俩到底有什么内在联系呢?
还有进程中的oracleserver所占的内存到底是谁呢(就是shutdown后的内存使用)?
感觉 LINUX。unix都没有这么费事哈。
除非定制,一般 oracle 不需要作为操作系统的一个服务让人启动。
:e:\oracle\product\10.2.0\db_1\bin\ORACLE.EXE test
到底它运行了什么?是开启数据库么(目前看是)?那为什么sqlplus关闭数据库时候,他还在开启,那么还有什么遗留呢?它俩到底有什么内在联系呢?
windows 里面这个 oracle.exe里面 是一个进程表示的,不象linux 可以区分的那么细,开启的每个阶段都有不同的进程。
ps -ef |grep ora 就可以查看所有的相关进程,
ps -ef |grep ora_ 就可以查看相关的后台进程。
那这个 windows oracle.exe里面除了 有维护sga的后台进程之外还有些什么呢?
抛砖引玉一下,呵呵~~
可惜忘了……
2 From v$session vs, v$process vp, v$bgprocess vb
3 Where vb.paddr <> '00' and
4 vb.paddr = vp.addr and
5 vp.addr = vs.paddr;NAME PROCESSNAME THREADID SID
----- -------------------- ------------ ----------
PMON ORACLE.EXE (PMON) 3772 170
PSP0 ORACLE.EXE (PSP0) 3232 169
MMAN ORACLE.EXE (MMAN) 2276 168
DBW0 ORACLE.EXE (DBW0) 2400 167
LGWR ORACLE.EXE (LGWR) 2380 166
CKPT ORACLE.EXE (CKPT) 1664 165
SMON ORACLE.EXE (SMON) 3332 164
RECO ORACLE.EXE (RECO) 2052 163
CJQ0 ORACLE.EXE (CJQ0) 3088 162
MMON ORACLE.EXE (MMON) 320 161
MMNL ORACLE.EXE (MMNL) 3204 160NAME PROCESSNAME THREADID SID
----- -------------------- ------------ ----------
RVWR ORACLE.EXE (RVWR) 3012 157
ARC0 ORACLE.EXE (ARC0) 2348 155
ARC1 ORACLE.EXE (ARC1) 3792 154
ARC2 ORACLE.EXE (J000) 2084 153
CTWR ORACLE.EXE (CTWR) 3288 151
QMNC ORACLE.EXE (QMNC) 3844 14717 rows selected.
我通过一个工具pslist查看ORACLE.EXE中的内容时比上面查询的结果多
大家看下有没有其他什么方法可以查出ORACLE.EXE里所有内容
D:\Program Files\PsTools>pslist -d oraclepslist v1.28 - Sysinternals PsList
Copyright ? 2000-2004 Mark Russinovich
SysinternalsThread detail for HWANG:
oracle 4004:
Tid Pri Cswtch State User Time Kernel Time Elapsed Time
368 9 551 Wait:Executive 0:00:00.010 0:00:00.140 3:01:28.486
3612 8 169 Wait:UserReq 0:00:00.000 0:00:00.030 3:01:21.747
4084 9 11 Wait:UserReq 0:00:00.000 0:00:00.000 3:01:21.657
3772 8 4237 Wait:UserReq 0:00:00.210 0:00:00.100 3:01:14.667
3232 8 4852 Wait:UserReq 0:00:00.090 0:00:00.100 3:01:14.466
2276 8 4304 Wait:UserReq 0:00:00.150 0:00:00.030 3:01:14.456
2400 8 7612 Wait:UserReq 0:00:00.280 0:00:00.260 3:01:13.925
2380 8 7603 Wait:UserReq 0:00:00.180 0:00:00.220 3:01:13.895
1664 9 14257 Wait:UserReq 0:00:00.430 0:00:00.290 3:01:13.845
3332 8 5474 Wait:UserReq 0:00:01.562 0:00:00.330 3:01:13.655
2052 8 67 Wait:UserReq 0:00:00.020 0:00:00.010 3:01:13.645
3088 9 4031 Wait:UserReq 0:00:02.243 0:00:00.140 3:01:13.625
320 8 7607 Wait:UserReq 0:00:02.123 0:00:00.300 3:01:13.615
3204 8 11915 Wait:UserReq 0:00:00.991 0:00:00.140 3:01:13.605
2772 8 299 Wait:UserReq 0:00:00.020 0:00:00.010 3:01:13.575
3968 8 419 Wait:UserReq 0:00:00.000 0:00:00.020 3:01:13.505
3012 8 4894 Wait:UserReq 0:00:00.070 0:00:00.060 3:01:03.961
2348 8 836 Wait:UserReq 0:00:00.030 0:00:00.110 3:00:55.399
3792 8 3533 Wait:UserReq 0:00:00.090 0:00:00.550 3:00:55.389
3288 8 8117 Wait:UserReq 0:00:00.160 0:00:00.090 3:00:53.686
3844 9 1050 Wait:UserReq 0:00:00.020 0:00:00.020 3:00:40.497
2952 8 736 Wait:UserReq 0:00:00.020 0:00:00.000 3:00:30.273
544 8 635 Wait:UserReq 0:00:00.410 0:00:00.060 3:00:30.233
2840 8 164 Wait:UserReq 0:00:00.050 0:00:00.000 0:17:41.155
1892 8 57 Wait:UserReq 0:00:00.010 0:00:00.020 0:00:19.217
从这几个表好像看不出来什么问题.除非我们在shutdown的模式下还能执行这些语句可以看出还有什么线程存在.
还有我做了几个例子:
1 shutdown immediate
2 提示数据库已经关闭,已经卸载数据库,还有最后一句不是很理解:oracle 例程已经关闭.这里的例程是不是指instance,如果是,为什么我执行conn sysadm/caoyang as sysdba 还是能连接上一个空闲的实例.这个实例是什么?
问题就在于shutdown关闭后,这个实例占用内存资源..,那么这个实例哪来的?换句话说shutdown 在sqlpus中不是最彻底关闭数据库系统..
我是这么理解的
当关闭数据库的时候没有把这些所有的内存区域收回来.从理解上看,只有database buffer,redo log buffer会通过两个写线程和文件打交到,所以这两个在shutdown的时候肯定会收回来.
如果在shutdown后我还能连接一个空的实例,那是不是就说其他的内存都没有收回来呢?
也就是说shutdown 只是实例中的部分内存,以保证shutdown后你不能对数据库文件进行操作.
如果你像彻底关闭,只有关闭服务.也就是停止所有oracleserver中包含的所有的线程,这样的话就可以彻底释放内存了.我不知道理解对不对,有没有人有其他想法
http://zhidao.baidu.com/question/113949114.html
这里的例程就是INSTANCE
2
空闲的实例意思就是说当前实例并没有与某个打开的数据库相关联起来
因为实例只是一块内存和一些进程而已