oracle参数与启停
oracle随系统启动而启动
cs65-64桌面版
orcle-11.2.0.4
启动监听器,后台进程,OEM.
注意:
如果只做一和三,只能启动后台进程,监听器不启动,
如果只做二和三,只能启动监听器,不能启动后台进程。
三步都做,才能正常启动。
一、
vi /etc/oratab
将默认的N改为Y,这一步的Y/N控制数据库的启动,也就是那些后台进程的启动与否
fzf:/u01/app/oracle/product/11.2.0/dbhome_1:Y
二、
vi $ORACLE_HOME/bin/dbstart
编辑 dbstart和dbshut脚本,将ORACLE_HOME_LISTNER=$1修改成ORACLE_HOME_LISTNER=$ORACLE_HOME
三、
vi /etc/rc.d/rc.local
切换到root用户,添加下面两行,如果有命令后面有参数,须用双引号引起来。
su - oracle -lc /u01/app/oracle/product/11.2.0/dbhome_1/bin/dbstart
su - oracle -lc "/u01/app/oracle/product/11.2.0/dbhome_1/bin/emctl start dbconsole"
在不修改第二步的情况下。
在dbstart后面经测试不管是加 $ORACLE_HOME,还是/u01/app/oracle/product/11.2.0/dbhome_1/,都不能启动监听器
但是在oracle用户下执行$ORACLE_HOME/bin/dbstart $ORACLE_HOME却是成功的
同是会有三个相关日志文件生成
$ORACLE_HOME/listenr.log,shutdown.log,startup.log
OEM日志路径$ORACLE_HOME/oracle1.aa.com_orcl/sysman/log/
下面是另一种方法(未经本人测试)
1、添加启动项
[root@db01 ~]# cat >> /etc/rc.d/rc.local <<EOF su - Oracle -c "lsnrctl start"
su - oracle -c "sqlplus sys/oracle as sysdba @/home/oracle/.script/.startup"
su - oracle -c "emctl start dbconsole"
EOF 2、创建并编辑启动文件
[root@db01 ~]#su - oracle
[root@db01 ~]#mkdir -p /home/oracle/.script/ [root@db01 ~]# cat > /home/oracle/.script/.startup <<EOF
startup;
alter system register;
exit 0
EOF
创建数据库两种方法
1.dbca如果是asm环境,须用asmca
2.手动创建
dbca
netca
emca
asmca
参数文件位置
[root@localhost ~]# cd /u01/app/oracle/product/11.2.0/dbhome_1/dbs/
[root@localhost dbs]# ls
hc_orcl.dat init.ora lkORCL orapworcl spfileorcl.ora
参数文件里包含数据库初始化参数,用于设置数据库实例和数据库的运行特征及使用限制。
oracle支持两种类型的参数文件,oracle按照参数文件的设定启动实例并打开数据库
initorcl.ora是实例的文本参数文件 文本型必须通过手工修改
spfileoracl.ora是实例的服务器参数文件 二进制型通过alter system命令修改
pfile 文本型,通常命名为initSID.ora,pfile并不一定存在,可以手动创建,过程如下
sqlplus / as sysdba
SQL> create pfile from spfile;
File created.
spfile 二进制,通常命名为spfileSID.ora。
参数大多使用了默认值,因此参数文件里的参数实际上是非默认的参数。11gr1,r2支持289-342个显式参数,还有相当多未文档化的隐式参数。
Oracle 9i以后启动的时候默认使用的初始化文件是spfile,但是如何判断数据库启动是使用spfile还是pfile初始化文件.可以以下方法,
1、show parameter spfile
2、show parameter pfile
3、看v$spparameter视图
[oracle@localhost dbs]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Fri Jul 10 15:17:59 2015
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> conn / as sysdba
Connected.
下面是修改为pfile启动过程
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> create pfile from spfile;
File created.
也可以用 create spfile from pfile,二者可以相互转化。
SQL> startup pfile=$ORACLE_HOME/dbs/initorcl.ora
ORACLE instance started.
Total System Global Area 1653518336 bytes
Fixed Size 2213896 bytes
Variable Size 1006635000 bytes
Database Buffers 637534208 bytes
Redo Buffers 7135232 bytes
Database mounted.
Database opened.
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string
SQL> show parameter pfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string
SQL> select decode(count(*),1,'spfile','pfile') from v$spparameter where rownum=1 and isspecified = 'TRUE';
DECODE
------
pfile
[oracle@localhost dbs]$ sqlplus /nolog SQL*Plus: Release 11.2.0.1. Production on Fri Jul :: Copyright (c) , , Oracle. All rights reserved. SQL> conn / as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started. Total System Global Area bytes
Fixed Size bytes
Variable Size bytes
Database Buffers bytes
Redo Buffers bytes
Database mounted.
Database opened.
SQL> show parameter spfile NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /u01/app/oracle/product/11.2.
/dbhome_1/dbs/spfileorcl.ora
通过spfile启动,用alter system修改参数
[oracle@localhost dbs]$ sqlplus /nolog SQL*Plus: Release 11.2.0.1. Production on Fri Jul :: Copyright (c) , , Oracle. All rights reserved. SQL> conn / as sysdba
Connected.
SQL> alter system set sga_max_size=1524M scope=spfile; System altered. SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started. Total System Global Area bytes
Fixed Size bytes
Variable Size bytes
Database Buffers bytes
Redo Buffers bytes
Database mounted.
Database opened.
SQL> show parameter sga_max_size NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_max_size big integer 1536M
动态参数是指在运行过程中可以动态修改的参数
静态参数是指必须通过重启来调整的参数,随着oracle的不断升级,参数逐渐动态化,在11g中,静态已没有几个了。
SQL> show parameter optimizer_index_caching NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_index_caching integer
SQL> alter system set optimizer_index_caching= scope=both;
both的含义是指在内存与文件中,并且立刻生效。重启oracle后还是生效。
如果改为memory,则只对当前实例有效,即内存中,重启后失效。
如果改为spfile,则对当前实例无效,重启后生效。
一些参数也可以在会话级使用alter session来调整,如
alter session set sql_trace=true;
SQL> alter system set parallel_max_servers= scope=memory; System altered. SQL> show parameter optimizer_index_caching NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_index_caching integer
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started. Total System Global Area bytes
Fixed Size bytes
Variable Size bytes
Database Buffers bytes
Redo Buffers bytes
Database mounted.
Database opened.
SQL> show parameter optimizer_index_caching NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_index_caching integer
[oracle@oracle1 ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Thu Sep 15 13:05:23 2016 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to an idle instance. SQL> startup nomount
ORACLE instance started. Total System Global Area 1.3362E+10 bytes
Fixed Size 2265864 bytes
Variable Size 6777998584 bytes
Database Buffers 6576668672 bytes
Redo Buffers 4911104 bytes
SQL> select instance_name,status from v$instance; INSTANCE_NAME STATUS
---------------- ------------
fzf STARTED SQL> select value from v$spparameter where name='control_files'; VALUE
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/fzf/control01.ctl
/u01/app/oracle/fast_recovery_area/fzf/control02.ctl SQL> alter database mount; Database altered. SQL> select instance_name,status from v$instance; INSTANCE_NAME STATUS
---------------- ------------
fzf MOUNTED 将数据库带到mount状态
select value from v$spparameter where name='control_files';
Alter database mount;
Mount数据库的过程是读参数文件中描述的控制文件,校验控制文件的正确性,将控制文件的内容读入到
内存,mount是挂接的意思,是操作系统中的概念.一旦mount之后,就是将一个没有意义的实例和一个
数据库发生了联系.因为实例是空壳.没有任何数据库和该实例发生关系,我们可以理解为实例是水泵,放
到哪个水塘里就会抽取哪里的数据,实例是通用的.mount的意思是将一个通用的水泵放入到指定的水塘.
mount是读控制文件,控制文件中有数据文件和日志文件的信息.
select instance_name,status from v$instance; 打开数据库
Alter database open;
读控制文件中描述的数据文件
验证数据文件的一致性,如果不一致,使用日志文件将数据库文件恢复到一致的状态.
数据库open后,普通用户才可以访问数据库
用户的表才为可见
只读方式open数据库
Alter database open read only;
select OPEN_MODE from v$database;
默认的open方式为read write
想改read only为read write 必须重新启动数据库
我们现在回想一下数据库启动的三个台阶,我们先读的是参数文件,参数文件可以有我们来编写.读完参数
文件后又读了控制文件,控制文件描述了数据文件和日志文件的信息,如果控制文件丢失可以重新建立,最
后是读数据文件.数据文件里才存放了我们的数据.数据库将启动分为三个台阶,目的是我们可以准确的知
道哪里有问题,迅速的排除.有点象老鼠拖木钎,大头在后面.由最开始的一个1k的参数文件,最后到几个t
的大型数据库.当我们只打startup而不加任何参数的时候.默认是到open,等于startup open;
SQL> startup
ORACLE instance started. 以 oracle 用户如下命令:
$cd $ORACLE_HOME/dbs
-- 查看参数文件
$ls
$sqlplus "/ as sysdba"
SQL> startup nomount
说明:
启动到nomount 状态,这个阶段数据库读取参数文件(spfile/pfile)文件中的参数,启动数据库实例。
初始化参数文件默认位置在 $ORACLE_HOME/dbs 目录下,
Oracle9i 初始化参数文件的读取顺序是 spfile<sid>.ora --> spfile.ora --> init<sid>.ora
这一阶段主要是指定控制文件及数据库实例名, 分配系统全局区 ,启动后台进程 ,打开alertSID.log文件和跟踪文件。 启动数据库到 nomount 状态以后, Oracle 就可以从参数文件中获得控制文件的位置信息。
找到控制文件, 并锁定控制文件。
以 oracle 用户执行如下命令:
SQL>alter database mount;
SQL>select * from v$control_files;
说明:
启动到mount状态,这个阶段数据库打开控制文件,验证控制文件。
在 mount 数据库阶段, 会读取口令文件, 该文件缺省位于:$ORACLE_HOME/dbs/orapw<sid> 或 orapwd
在数据库没有启动之前, 数据库内建用户是无法通过数据库本身来验证身份的,正是通过口令文件,
Oracle 实现对用户的身份认证, 在数据库未启动之前登陆,启动数据库。
如果丢失了口令文件, 在mount 阶段就会报错, 并无法启动数据库。
将数据库与一个已打开的实例相关联, 打开控制文件, 计算 mount id 并写入控制文件。
获取数据文件和重做日志文件的名称和状态。
此时数据库的基本结构信息都能够查询了,但是还不能查询用户表的内容。 启动数据库到 mount 状态以后, Oracle 就可以从控制文件中获得数据文件、日志文件的位置信息、
检查点信息等重要信息, 并在 open 阶段, Oralce 可以根据控制文件中记录的这些信息找到文件,
然后进行检查点及完整性检查。如果不存在问题就可以启动数据库,
如果存在不一致或文件丢失则需要进行恢复。
以 oracle 用户如下命令:
SQL>alter database open; 说明:启动到open状态,这个阶段数据库打开控制文件里描述的文件。
在完成数据库的验证和恢复过程后, 数据库处于一致的状态,
数据库还需要进行一系列的处理过程:将UNDO 段在线等操作,
然后数据库就可以提供访问, 同时SMON 可以开始进行事务回滚。 SQL> alter database mount;
Database altered.
SQL> alter database open read only;
Database altered.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
启动为限制模式,限制模式打开的数据库只有具备管理权限的数据库用户才能访问。
例如具有restricted session权限或dba角色的数据库用户。
管理员往往在执行数据库结构调整及数据库维护期间,为防止普通用户访问,则以限制模式启动数据库。
SQL> startup restrict
ORACLE instance started.
Total System Global Area 1603411968 bytes
Fixed Size 2213776 bytes
Variable Size 956303472 bytes
Database Buffers 637534208 bytes
Redo Buffers 7360512 bytes
Database mounted.
Database opened.
将受限转为正常
SQL> alter system disable restricted session;
System altered. 关闭的四种方式
shutdown normal|transactional|immediate|abort
shutdown 等同于shutdown normal 检查数据库状态
SQL> select database_status from v$instance;
DATABASE_STATUS
-----------------
ACTIVE
挂起/暂停数据库
SQL> alter system suspend;
System altered.
SQL> select database_status from v$instance;
DATABASE_STATUS
-----------------
SUSPENDED
恢复数据库
SQL> alter system resume;
System altered.
SQL> select database_status from v$instance;
DATABASE_STATUS
-----------------
ACTIVE http://blog.csdn.net/pan_tian/article/details/41160155 shutdown关闭图解挺直观的 1、shutdown normal
正常方式关闭数据库。 通常很慢 2、shutdown immediate
立即方式关闭数据库。
在SVRMGRL中执行shutdown immediate,数据库并不立即关闭,
而是在Oracle执行某些清除工作后才关闭(终止会话、释放会话资源),
当使用shutdown不能关闭数据库时,shutdown immediate可以完成数据库关闭的操作。
3、shutdown abort
直接关闭数据库,正在访问数据库的会话会被突然终止,
如果数据库中有大量操作正在执行,这时执行shutdown abort后,重新启动数据库需要很长时间
--------------------------------------------------------
shutdown abort 的时候,跟kill 进程是一样的效果
数据库立即关闭,这个时候文件状态可能不一致
因为正常关闭数据库会同步校验各文件,使得重新启动的时候文件时间点一致并且不用进行崩溃恢复 若检查点信息一致,则做崩溃恢复
若检查点信息不一致(正好在更新文件头)则需要做介质恢复 这些问题都好处理,最怕的问题是这个时候系统有大量IO,结果这样造成写的突然中断,碰巧造成文件块的逻辑坏块,那麻烦比较大一些,尤其是系统表空间的block损坏 虽然shutdown abort 出错的几率很小,1000个人可能只有一个人碰到,但是我们还是要小心。
正确的处理流程是,shutdown immediate ,若数据库迟迟不能down下来,在os上观察IO状况,几乎没有io的时候,另开一窗口shutdown abort ,几乎不会出问题了
--------------------------------------------------------
http://www.itpub.net/showthread.php?threadid=180315&pagenumber=
先用IMMEDIATE来DOWN,实在不行了,看一下数据库文件上没IO了,再用ABORT
------------------------------------------------------------------------------
你可以尝试先在系统级杀掉非后台Oracle进程,在连接shutdown immediate就安全多了 在Oracle8i里,当数据库失去响应以后,你在操作系统上杀掉用户进程后,一般数据库就可以恢复正常了
-------------------------------------------------------------------------------
先 shutdown immediate 应该是首选
然后不行再重新shutdown abort
其实起不来也是因为os的缘故,在文件正在写的时候出现问题导致文件不一致或者损坏……
用 ps -ef|grep smon
看你当前有多少个已经启动的实例,
没启动的,只能去$ORACLE_HOME/dbs下面去数你有多少init文件了。
如果你有多个ORACLE HOME,那就挨个数吧
在创建库的时候创建了一个实例库,这样的话Oracle中就会有两个实例库,一个是自带的ORCL,另外一个是自己创建的NewOrcl,怎么才能区分出来当前使用的是哪个实例库呢?根据SID,如想用哪个库修改成哪个库的实例名就行了。
http://blog.itpub.net/10896118/viewspace-1044094/
ORACLE_SID和ORACLE_HOME是最基本的必须设置的两个环境变量。
下面,摘录一段TOM大师光辉著作《Expert Oracle Database Architecture 》的原文:
If you’re unfamiliar with the term SID or ORACLE_SID, a full definition is called for. The SID is a site identifier. It and ORACLE_HOME (where the Oracle software is installed) are hashed together in UNIX to create a unique key name for attaching an SGA. If your ORACLE_SID or ORACLE_HOME is not set correctly, you’ll get the ORACLE NOT AVAILABLE error, since you can’t attach to a shared memory segment that is identified by this unique key. On Windows, shared memory isn’t used in the same fashion as UNIX, but the SID is stillimportant. You can have more than one database on the same ORACLE_HOME, so you need a way to uniquely identify each one, along with their configuration files.
根据Tom大师所说的,在Unix/Linux下,Oracle的实例是有一块共享内存(SGA)和一组后台进程组成的,
Oracle使用ORACLE_HOME和ORACLE_SID进行hash,得到一个key,
Oracle根据这个key来寻找SGA,如果不设置这两个环境变量,oracle就无法找到分配的SGA,
也就无法连接到实例。这也是这两个环境变量为什么必须设置的原因。
[@more@]我们可以利用oracle自带的sysresv工具查看到
[oracle@db ~]$ sysresv
IPC Resources for ORACLE_SID "orcl" :
Shared Memory:
ID KEY
7045138 0x00000000
7077908 0x00000000
7110677 0x42e38fd0
Semaphores:
ID KEY
589826 0x89a83438
Oracle Instance alive for sid "orcl"
另外,使用ipcs也可以看到共享内存与信号量的情况
[oracle@db ~]$ ipcs -m |grep 138
0x00000000 7045138 oracle 640 33554432 40
[oracle@db ~]$ ipcs -m |grep 908
0x00000000 7077908 oracle 640 3087007744 40
[oracle@db ~]$ ipcs -m |grep 677
0x42e38fd0 7110677 oracle 640 2097152 40
[oracle@db ~]$ ipcs -s |grep 826
0x89a83438 589826 oracle 640 154
可以看到,两者是对应的。
由上面的结论可知,在相同的ORACLE_HOME下,必须使用不同ORACLE_SID来区分不同的实例,
在不同的ORACLE_HOME下,可以有相同的ORACLE_SID,Oracle照样可以区分不同的实例,
这点在盖国强先生的《深入解析Oracle》中也得到了验证。
1:ORACLE使用环境变量里(ORACLE_SID+ORACLE_HOME)的值进行hash运算,来确定SGA区的内存地址。
2:如果当你使用sqlplus / as sysdba 连接到一个idle的instance时,表示你使用的(ORACLE_SID+ORACLE_HOME) hash后的值在内存中没有找到相应的sga区,一个可能是数据库没有启动,另一个可能是和当前正在运行的数据库的(ORACLE_SID+ORACLE_HOME)内容不相同,导致你没有正确的连接到当前的数据库的SGA。
在提交startup命令之后,在上述目录下Oracle会自动按照如下的顺序查找参数文件完成数据库的启动。
1)spfile$ORACLE_SID.ora
2)spfile.ora
3)init$ORACLE_SID.ora
注意事项
这里强调指出的一个问题是:不可像显式使用特定pfile的方法去使用spfile!
虽然可以显式指定具体pfile作为启动数据库的参数文件,但这里需要注意的是,不可以显式指定某个spfile作为启动的参数文件。
下面的用法是不正确的。
SQL> startup spfile=$ORACLE_HOME/dbs/spfilefgy.ora
SP2-0714: invalid combination of STARTUP options
错误提示:startup命令后面跟随的选项不正确。原因很简单,spfile作为系统参数文件是在启动过程中自动识别到的,其命名规则也是固定的。因此请不要尝试显式的去使用spfile启动数据库。
此时,如果我们显式的使用pfile是可以完成数据库的启动。
sys@ora10g> startup pfile='?/dbs/initora10g.ora';
http://blog.chinaunix.net/uid-26190190-id-2420722.html
http://www.cnblogs.com/smartvessel/archive/2009/07/06/1517690.html
oracle参数与启停的更多相关文章
- oracle 10g/11g RAC 启停归档模式
oracle 10g rac 启停归档模式 假设Oracle数据库执行在归档模式,当进行数据库维护时,可能须要暂停数据库的归档,在完毕维护后,再又一次启动归档模式. 通过下面步骤能够从归档 ...
- Oracle常用启停命令
一.监听启停 Oracle监听的启动.停止和状态查看 Oracle监听启动: lsnrctl start Oracle监听停止: lsnrctl stop Oracle监听状态 lsnrctl sta ...
- Oracle EBS R12的启停脚本
以下脚本用root用户登录执行: 一.DB启停使用EBS提供的脚本ebs_start.shsu - oraprod -c "/d01/oracle/PROD/db/tech_st/10.2. ...
- Oracle BIEE启停脚本
作为BI的开发人员,经常启停BI服务在所难免,启动的过程又比较长,命令需要不同目录切换,简直烦死人呢, 特意整理了linux中的启动脚本,将以下脚本存成biee.sh,后面的过程就相当简单了, 启动: ...
- 为什么mysql 5.7.24启停不显示错误信息?log-error_verbosity参数
关键词:log-error_verbosity ,mysql启停没有信息,mysql启停不显示错误信息,mysql不显示启停信息 原因就是因为 log-error_verbosity = 2 被设置成 ...
- 11g RAC r2 的启停命令概述1
目标: 熟悉主要进程的启停顺序 了解独占模式 -excl crsctl start crs与crsctl start cluster 区别 1.熟悉主要进程的启停顺序 1.1 启动节点rac1: [r ...
- liunx weblogic服务启停脚本
#!/bin/bash #sh xx.sh start xx项目 例如:sh autoWeblogic.sh start bius #经测试发现weblogic 启动大概需要完全启动成功35秒左右 停 ...
- TFS2017持续发布中调用PowerShell启停远程应用程序
目前团队项目中有多个Web.服务以及与大数据平台对接接口等应用,每次的发布和部署采用手工的方式进行.停止应用程序,拷贝发布包,启动应用程序,不停的循环着,并且时不时地会出现一些人为错误性问题.这种模式 ...
- 04. 启停redis服务
启动 查看redis.conf文件,可以通过general中的说明,配置通过systemd来启停redis和查看redis状态(作者没有采用,而是使用service管理,service配置参考< ...
随机推荐
- How many instances created in the WebContainer
When the Servlet container starts, it: reads web.xml; finds the declared Servlets in the classpath; ...
- PIT,BL,AP,CP,CSC
使用ODIN刷机的时候,要选择ROM文件,以下是5件套各部分的说明: PIT:分区信息,如果没有更换ROM,一般不需要刷,也不需要勾选re-partition选项 BL:bootloader,引导信息 ...
- Cocos2d-x 2.x项目创建
cocos2d-x下载地址:http://www.cocos2d-x.org/download 2.0之后的创建项目 1. cd cocos2d-x-2.2.1/tools/project-creat ...
- 5、网页制作Dreamweaver(JS的初步运用)
JAVASCRIPT *放在头部也可以读取(最先读取头部) 表单提交时会自动刷新网页,最好关掉 写法: 1.输出 <script> document.write("hello w ...
- BZOJ2661 连连看 (费用流)
把所有点拆成两个,将符合条件的两个点x,y连上边,流量为1,费用为-(x+y). 做一遍最小费用最大流,最后ans div 2即可. Program bzoj2661; ; ..] of longin ...
- Smart210学习记录----beep linux字符设备驱动
今天搞定了beep linux字符设备驱动,心里还是很开心的,哈哈...但在完成的过程中却遇到了一个非常棘手的问题,花费了我大量的时间,,,, 还是把问题描述一下吧,好像这个问题很普遍的,网上许多解决 ...
- Python编程小记
发现这种结构很实用: while True: expression .... if condition: expression break 好吧,我承认我是菜鸟-
- Python的类实例属性访问规则
一般来说,在Python中,类实例属性的访问规则算是比较直观的. 但是,仍然存在一些不是很直观的地方,特别是对C++和Java程序员来说,更是如此. 在这里,我们需要明白以下几个地方: 1.Pytho ...
- WeCenter程序安装
WeCenter程序安装时需要GD库和freetype的支持,以下是安装方法 GD库的安装:我们可以直接使用yum命令来安装,自动解决依赖关系及安装GD库相关的包. [root@localhost ~ ...
- JavaScript 阶段总结