Oracle 初学者教材-oracle vmware
Oracle 初学者教材
1.安装:
在安装之前要检查好变量,各方面条件符合后在安装,在62%时出错说明有一个链接没找到,设置出错,在/usr/bin/下将一个文件进行链接 ln -s libstdc++.so.6 libstdc++so.5
2.连接数据库的方法:
sqlplus username/password (一般用户)
sqlplus username/password as sysdba (sys,system)
1.通过浏览器连接字符界面
首先在服务器端开启服务:isqlplusctl start
http://IP:5560/isqlplus (/dba)
2.通过看、浏览器图形界面
开启服务:emctl start dbconsole
http://IP:1158/em
3. windows 客户端连接
一般用户只需写用户名和密码,但SYS需要写标识符 ora10 as sysdba;
出现一系列问题:
1、 ORA-12541: TNS:没有监听器
显而易见,服务器端的监听器没有启动,另外检查客户端IP地址或端口填写是否正确.启动监听器:
$ lsnrctl start
或
C:\lsnrctl start
2、 ORA-12500: TNS:监听程序无法启动专用服务器进程
对于Windows而言,没有启动Oracle实例服务.启动实例服务:
C:\oradim startup -sid myoracle
3、 ORA-12535: TNS:操作超时
出现这个问题的原因很多,但主要跟网络有关.解决这个问题,首先检查客户端与服务端的网络是否畅通,如果网络连通,则检查两端的防火墙是否阻挡了连接.
4、 ORA-12154: TNS:无法处理服务名
检查输入的服务名与配置的服务名是否一致.另外注意生成的本地服务名文件(Windows下如D:\oracle\ora92\network\admin\tnsnames.ora,Linux/Unix下$ORACLEHOME/network/admin/tnsnames.ora)里每项服务的首行服务名称前不能有空格.
5、 ORA-12514: TNS:监听进程不能解析在连接描述符中给出的 SERVICENAME
打开Net Manager,选中服务名称,检查服务标识栏里的服务名输入是否正确.该服务名必须与服务器端监听器配置的全局数据库名一致.
6、 Windows下启动监听服务提示找不到路径
用命令或在服务窗口中启动监听提示找不到路径,或监听服务启动异常.打开注册表,进入HKEYLOCALMACHINE/SYSTEM/Current ControlSet/Services/OracleOraHome92TNSListener项,查看ImagePath字符串项是否存在,如果没有,设定值为D:\oracle\ora92\BIN\TNSLSNR,不同的安装路径设定值做相应的更改.这种方法同样适用于Oracle实例服务,同上,找到如同HKEYLOCALMACHINE/SYSTEM/Current ControlSet/Services/Oracle ServiceMYORACLE项,查看ImagePath字符串项是否存在,如果没有,则新建,设定值为d:\oracle\ora92\binORACLE.EXE MYORACLE.
主要是要修改服务器下$ORACLEHOME/network/admin/tnsnames.ora 将HOSTNAME从服务器名改为IP地址,listen.org也要修改,
安装过程称修改口令,登入到数据库的名称和密码,而网路服务名只是登录到服务器的密码和账户.
3.用户信息:
解锁 scott账户
alter user scott account unlock identified by tiger;
查看用户信息:
select username,password fron dbausers;
修改密码
alter user scott identified by redhat;
疑问: alter不是修给表的结构吗?为何可以修改表的数据?
创建用户:
create user username identified by pwd default tablespace users Temporary TABLESPACE Temp;
用户授权
grant connect,resource,dba to business;
提交
commit;
3.用数据库脚本创建数据库
如上面所述利用sqlplus以username 用户登陆,输入:@创建数据库的脚本名称.sql回车,即可创建数据库中的表、视图、存储过程等.注:以上的创建用户过程可以使用户的表中没有了系统自动产生的n多临时表.
1、按顺序安装如下包:中文支持fonts-chinese-3.02-12.el5.noarch.rpmm17n-db-common-cjk-1.3.3-46.el5.noarch.rpmm17n-db-chinese-1.3.3-46.el5.noarch.rpm中文输入法scim-libs-1.4.4-39.el5.i386.rpmscim-1.4.4-39.el5.i386.rpmscim-chinese-standard-0.0.2-1.el5.i386.rpmscim-tables-0.5.6-7.i386.rpmscim-tables-chinese-0.5.6-7.i386.rpmscim-pinyin-0.5.91-15.el5.i386.rpm2、安装完成后点击“系统-管理-语言”选择“简体中文”,转换语言环境.3、重启系统验证,还可以直接 ctrl+alt+backspac
但是安装顺序是:
1, rpm -ivh scim-libs-1.4.4-39.el5.i386.rpm
2, rpm -ivh scim-1.4.4-39.el5.i386.rpm
3, rpm -ivh scim-pinyin-0.5.91-15.el5.i386.rpm
安装完重启就可以使用ctrl + space切换.
解压缩tar文件:
tar -zxvpf 文件名
Oracle10G可以采用下面的方法
修改数据库字符集的方法:
connect system as sysdba ;
shutdown immediate ;
startup mount ;
alter system enable restricted session ;
alter system set JOBQUEUEPROCESSES=0;
alter system set AQTMPROCESSES=0;
alter database open ;
alter database character set internaluse ZHS16GBK ;
shutdown immediate ;
startup ;
解决方法2:修改/etc/sysconfig/iptables文件.增加2行.
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1158-j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5560-j ACCEPT
面以Linux下的Oracle 10g为例,列出Oracle说明常用目录及其位置
ORACLEBASE:
为Oracle目录结构的根,该环境变量为指定计算机上的所有Oracle产品目录如:$ORACLEBASE=/u01/app/oracle
ORACLEHOME:
当前Oralce软件安装的主目录,通常该环境变量为由ORACLEBASE指示的路径下的一个目录
如:$ORACLEHOME=$ORACLEBASE/10g 完整的路径即为:$ORACLEHOME=/u01/app/oracle/10g
ORACLEHOME包含与Oracle软件运行有关的子目录和网络文件以及选定的组件等
$ORACLEHOME目录中的常用子目录如下:
/bin --主要包含用于数据库管理的各种命令等,如impdb,expdp,emctl,emca等
/css --与Oracle Cluster Synchronization服务有关的文件
/dbs --存放数据库服务器端的参数文件Spfile,如spfileorcl.ora,init.ora,密码文件orapworcl等
/demo --存放数据库实例模式的脚本等如humanresources的相关脚本
/install --用于存储ORACLE安装后的端口号,iSQL*Plus以及Enterprise Manager Database Control启动并登录的方式等,如该路径下的portlist.ini
/network/admin --有关监听器listener.ora和sqlnet.ora以及tnsnames.ora等
/sysman/config --用于与Oracle Enterprise Management有关的端口管理等
/rdbms 是Oracle关系型数据库管理系统,管理Oracle数据库的数据管理访问等
admin目录
位于$ORACLEBASE目录下,即$ORACLEBASE/admin/$ORACLESID主要存储的为Oracle 后台进程产生的相关文件及数据库管理文件
以下是其下常用的子目录
/adump --存储审计文件的目录(需要首先设置auditfiledest参数)
/bdump --后台进程跟踪文件(使用backgrouddumpdest参数进行设置)
/cdump --存储核心堆积文件(使用coredumpdest参数进行设置)
/create --存储用于创建数据库的脚本.创建新的数据库时,DBCA将创建数据库的脚本放置在这个目录
/exp --建议存储使用Export使用程序或Oracle Data Pump创建的数据库导出文件的目录
/pfile --初始化参数文件
/udump --存储用户进程跟踪文件,使用userdumpdest参数设置
oradata目录
Oracle数据库文件缺省存储该目录下,即$ORACLEBASE/$ORACLESID/oradata,主要包括数据库的控制文件、数据文件、重做日志文件.
dbf文件对应数据库中每个表空间
ctl文件为控制文件
log文件对应重做日志文件组及其成员
flashrecoveryarea目录
flashrecoveryarea目录存储并管理与备份和恢复有关的文件.它包含系统中每个数据库的子目录.
该目录可用于存储与恢复有关的文件,如控制文件、联机重做日志副本、归档日志、闪回日志以及Oracle数据库恢复管理器(RMAN)备份等.
查看及设置相关路径
--使用parameter查看
SQL> show parameter dump
oracle 的参数存放在$ORACLEBASE/admin/pfile 修改配置文件,启动之后才会生效(静态的)
系统有参数存放在$ORACLEHOME/dba/spfile.ora 以二进制的形式存放,是动态的,通过sql命令可以修改并立即生效
Oracle10g默认是spfile先启动,若是修改了sga的参数或是什么的导致Oracle起不来,则可以
create spfile from pfile;
或是启动的时候 startup /home/u01/app/oracle/product/10.2.0/db1/dbs/initora10.ora
SPfile 优先于pfile
修改参数:
altet system set 参数名=值 scope=参数2;
参数2取值有如下三种:
1. scope=spfile:对参数的修改记录在服务器初始化参数文件中,修改后的参数在下次启动DB时生效.适用于动态和静态初始化参数.
2. scope=memory:对参数的修改记录在內存中,对于动态初始化参数的修改立即生效.在重启DB后会丟失,会复原为修改前的参数值.
3. scope=both:对参数的修改会同时记录在服务器参数文件和內存中,对于动态参数立即生效,对静态参数不能用这个选项.
如果使用了服务器参数文件,则在执行alter system语句时,scope=both是default的选项.
如果沒有使用服务器参数文件,而在执行alter system语句时指定scope=spfileboth都会出错.
Oracle中启动AutoTrace查看SQL执行计划,监控所执行的查询的性能:
通过以下方法可以把Autotrace的权限授予Everyone,
如果你需要限制Autotrace权限,可以把对public的授权改为对特定user的授权.
进入$ORACLEHOME/rdbms/admin下以dba身份进入,执行@utlxplan脚本,然后SQL> create public synonym plantable for plantable;同义词已创建
SQL> grant all on plantable to public ;授权
然后退出进入$ORACLEHOME/sqlplus/admin 同样以dba身份进入,执行@plustrce脚本,
运行grant plustrace to public ;这样即可使用AutoTrace
SQL> set autotrace on
SQL> set timing on
SQL>
关于Autotrace几个常用选项的说明:
SET AUTOTRACE OFF ----------------不生成AUTOTRACE 报告,这是缺省模式
SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告
SET AUTOTRACE ON STATISTICS --只显示执行统计信息
SET AUTOTRACE ON -----------------包含执行计划和统计信息
SET AUTOTRACE TRACEONLY ------同set autotrace on,但是不显示查询输出
SQL> set autotrace traceonly
SQL> select tablename from usertables;
Autotrace执行计划的各列的涵义
IDPLUSEXP:每一步骤的行号
PARENTIDPLUSEXP:每一步的Parent的级别号
PLANPLUSEXP:实际的每步
OBJECTNODEPLUSEXP:Dblink或并行查询时才会用到
AUTOTRACE Statistics常用列解释
db block gets
从buffer cache中读取的block的数量
consistent gets
从buffer cache中读取的undo数据的block的数量
physical reads
从磁盘读取的block的数量
redo size
DML生成的redo的大小
sorts (memory)
在内存执行的排序量
sorts (disk)
在磁盘上执行的排序量
约束:
记住:在用的dba....的表时,在用where 语句时,where=;里面的要用大写字母表示,存在表格的东西都是大写的.
外键可以是空,
dbaconstraints 表记录了所有表约束的信息,dbaobjects 是记录了所有表,东西的有关信息,可以通过objectid来查询所建立的表格:select objectid from dbaobjects where tabletype=TABLE order by objectid;
dbatables中记录了表的控制信息
SGA
一:SGA重要参数:
1.prepagesga
2.locksga
3.sgamaxsize,sga的上限值
alter system set sgamaxsize=522m scope=spfile(只能静态生效)
4.sgatarget 该值在sgamaxsize范围内活动
二:SGA主要包含6种缓存
1)dbbuffercache
show parameter dbcachesize(下限,由ASMM自动管理)
select currentsize from v$bufferpool(查看当前实际大小)
如果通过alter system set dbcachesize=100m scope=both;这只是修改了dbcachesize 的下限(也就是dbcachesize 每次分配都要大于100m),其他的由ASMM自动管理的都一样!
如果要修改实际的sharedpoolsize 则应该怎么办?因该同时缩小dbcachesize 的大小然后扩大相应sharedpoolsize的大小.在pfile文件中用vi静态修改,然后用pfile文件启动!再生成spfile文件即可!
dbcachesize 实际的大小会通过sgatarget的改变而改变,.
dbbuffercache主要由三部分组成 select name,currentsize from v$bufferpool;
1.default pool:可以自定义的开启cache特性 alter table aa cache/nocache;
查看select tablename,cache,bufferpool from dbatables where tabalename=;
2.keep pool :没有cache 特性,FTS之后数据然存放在MRU端
增加keep pool 内存:alter system set dbkeepcachesize=10m scope=both;
指定使用keep pool:create table aaa(n number) storage(bufferpool keep) or alter table bbb storage(bufferpool keep);
3.recycle pool:分配较小的空间,永远丢弃.创建如keep pool
4.dbnkcachesize(分成不同的内存块,小的节省空间,大的加快速度)
alter system set db16kcachesize=10m ;但事实上会分配12m 因为sga内存按照颗粒度大小granulesize分配内存,若sga<1G granulesize=4M (分配时会按4M的整数倍分配)
SGA>1G granulesize=8M.查看:select bytes from v$sgainfo where name=Granule size;
2)share pool;
分为一种是librarycache(sql语句缓存的,第一次为hard parse,而如果librarycache中有则进行soft parse)
select pool,sum(bytes) from v$sgastat group by pool;
查看library cache 的大小:
select sum(sharablemem) from v$dbobjectcache;
测试librarycache:
set timing on;
alter system flush sharedpool;清空缓存
利用绑定变量的方法可以大大减少sql语句的执行时间. PL/SQL自动进行了变量的绑定.
sql>varlable i char(6);
sql>exec:i:=95001(对i进行绑定)
sql>select * from student where sno=:i;
另一种是:data Dictionary 数据字典缓存区,
select * from dict;
select sum(sharablemem) from v$sqlarea;查看data dictionary cache 大小!
3)largepool:大池是系统全局区中的一个可选内存区,但通常在系统中会进行配置,大池主要以下几种情况使用
1.共享服务器存储用户全局区(UGA)信息
2.启用并行进程
3.使用RMAN作备份恢复
大池由参数largepoolsize 设置,也可以由数据库自动管理
4)javapool:Java 池也是系统全局区中的一个可选内存区,主要用于数据库中存储的Java程序的解析和执行,通常如果不需要在数据库中运行java程序,可以不启用就个内存区,但是如果在数据库创建时选择了安装JVM组件,那么这个池必须配置
5)streamsbuffer 默认是没有分配的,show parameter streamspoolsize;
6)redologbuffer:重做日志缓冲区,(固定的,不能由ASMM自动分配)重做日志主要被用于提供数据的恢复功能,应用日志前滚(roll forward)就是数据库的基本恢复原理
使用重做日志缓冲区的目的是为了提高DML或者DDL语句的执行速度,减少日志产生带来的性能影响,减少系统日志I/O的频度.
通过select * from v$sga;可以看到四个结果:
fix size:(固定的),是dictionary cache 的一部分与其他部分附加内存信息会被实例的后台进程访问,在实例启动后被固定咋SGA中,是固定的!
variable size:是可变的,包含librarycache、javapool,large pool,curdor area,control file content 等缓存,还包括尚未分配的sgamaxsize -sgatarget;