《oracle10g基础及常见问题精选.doc》由会员分享,可在线阅读,更多相关《oracle10g基础及常见问题精选.doc(18页珍藏版)》请在三一办公上搜索。
1、基本知识:一:Orcale数据库简介 Orcale是一个对象关系数据库管理系统(ORDBMS)。它既提供关系数据库系统的功能,又提供面向对象数据库系统的功能。 在数据安全性与数据完整性控制方面性能优越,具有跨操作系统,跨硬件平台的数据操作能力。 Oracle数据库基于“客户/服务器”(Client/Server)系统结构。此概念将应用程的处理划分到2个系统中,即客户端系统和服务器系统。 服务器系统执行数据库相关的所有活动,客户端执行与用户交互的活动。 客户端系统和服务器系统又被称为前端系统和后端系统。客户端应用程序向“数据库服务器”发送请求并接收信息, 以此种方式与数据库进行交互,它充当用户与
2、数据库之间的接口。二:Oracle体系结构 Oracle服务器:由“实例”和“数据库”2大部分组成。 实例:由“内存”和“进程”组成。 内存:分为“系统全局区(SGA)”和“程序全局区(PGA)”。 SGA:实例启动时分配该内存区。用来存储数据库信息,由多个数据库进程共享。 PGA:在用户进程连接到数据库并创建一个会话时自动分配的。只能单个进程使用,当一个用户会话结束后,PGA释放。 进程:分为“用户进程”,“服务器进程”和“后台进程”。 用户进程:当数据库用户运行一个应用程序准备向数据库服务器发送请求时,即创建了用户进程。 服务器进程:用于处理连接到该实例的用户的用户的进程的请求。 后台进程
3、:为了使系统性能最好和协调多个用户,实例系统中使用一些附加进程,称为后台进程。 数据库:由“物理组件”和“逻辑组件”组成 物理组件:由“数据文件”,“日志文件”和“控制文件”组成 数据文件:用于存储数据库数据的文件。 日志文件:用于记录对数据库进行修改的修改信息。 控制文件:记录数据物理结构的二进制文件。 逻辑组件:由“表空间”,“段”,“区”和“数据块”组成 表空间:相当于SQL2000用“Create Database”创建的一个数据库。 数据块:Oracle数据库中的数据存储于数据块中三:Oracle的工具 查询工具:SQL*Plus 和 PL/SQL。 SQL*Plus是Oracle附
4、带的,不过在开发中一般使用PL/SQL,因为PL/SQL更易于操作。 Oracle企业管理器:为管理员提供图形窗口管理实例,模式,安全性和存储等。 四:表空间 System表空间:在每一个数据库都有一个名为SYSTEM的表空间,即系统表空间,该表空间是在创建数据库或数据库安装时自动创建的,用于存储系统的数据字典表,系统程序单元,过程,函数,包和触发器等,也可以用于存储用户表,索引等对象。 创建表空间: Create TableSpace tablespacename Datafile filename Size integer K|M AutoExtend Off|On tablespacen
5、ame: 表空间名称。 filename: 表空间中数据文件的路径和名称。 Size: 指定表空间用于存储数据的文件的大小,“K”表示千字节, “M”表示兆 AutoExtend: 用来启用或禁用数据文件的自动扩展。 示例:创建一个10M的mySpace表空间. Create TableSpace mySpace Datafile D:OraclemySpace.dbf Size 10M AutoExtend On五:用户管理 默认用户: 当创建一个新数据库时,Oracle将创建一些默认数据库。默认数据库为“Sys”,“System”和“Scott”。 Sys: 默认密码“change_on_
6、install”, 是Oracle中的一个超级用户,主要用来维护系统信息和管理实例。 System: 默认密码“manager”, 是Oracle默认的系统管理员。 用来管理数据库的用户,权限和存储等。 Scott: 默认密码“tiger”,是Oracle数据库的一个普通用户示范。 Sys和System是系统用户。 创建一个新用户: Create User user Identified By password Defalut TableSpace tablespace Temporary TableSpace tablespace user: 用户名称。 password: 用户密码。 De
7、fault TableSapce: 为用户指定默认表空间(必须指定)。 Temporary TableSpace: 为用户指定临时表空间。 注意:创建一个用户时必须为这个用户指定一个默认表空间,该用户将与这个表空间相关联,以后该用户创建表,视图,索引等等都存储在这个表空间中。 注意: 一个用户只能有一个默认表空间,而一个表空间可以有多个用户。 示例: 创建Fly用户 Create User Fly Identified By 666 Defalut TableSapce mySpace(前面创建的表空间) Temporary TableSapce temp 为用户分配权限: Oracle用户权
8、限分为“系统权限”和“对象权限”2种。 系统权限:允许用户执行一些数据库操作,如创建表空间等等。 对象权限:允许用户对某一特定对象(如表,视图等)执行特定操作 Grant命令可以用来分配权限。 分配系统权限: Grant Connect To Fly Grant Resource To Fly Grant DBA To Fly Connect角色允许用户连接数据库并在数据库创建表或其他对象。 Resource角色允许用户使用数据库的空间。 DBA角色允许用户执行数据库操作。 其中Connect和Resource权限必须分配给用户。 分配对象权限: Grant 对象权限 On 表名称 To 用户
9、 Grant Insert On Emp To Fly 将在Emp表中插入数据的权限分配个用户Fly Grant All On Emp To Fly 将在Emp表中增,删,查,改分配个Fly。 修改用户密码: Alter User 用户 Identified By 密码 如: Alter User Fly Identified By 333333 删除用户: Drop User Fly六:Windows中的Oracle服务简介Oracle具有以下服务:OracleHOME_NAMETNSListener: Oracle服务器的监听程序。 监听器接受从客户端发出的请求,然后将请求传递给数据库服务
10、器。 如果监听器没有启动,则客户端将无法连接到数据库服务器。OracleServiceSID: SID是在安装Oracle时输入的数据库名称。 如果此服务没有启动,则数据库客户端应用程序,如SQL*Plus连接到数据库服务器时就会出现错误。OracleHOME_NAMEAgent: 此服务是Oracle企业管理器产品套件的一部分。OracleHOME_NAMEHTTPServer: 此服务用户启动Oracle HTTP服务器。OracleHOME_NAMEManagementServer: 此服务是Oracle企业管理器的中间层.其中OracleHOME_NAMETNSListener,Ora
11、cleServiceSID是必须启动的服务。OracleHOME_NAMEAgent, OracleHOME_NAMEHTTPServer,OracleHOME_NAMEManagementServer 这三个服务可以关闭,以减少内存的使用。知识点、技巧集一、怎样配置EM使其支持SSL 协议10G EM 中的OMS, DBConsole,Agent 都支持SSL 协议.具体操作: 1. 如果没有环境变量ORACLE_SID,请先配置,或者直接敲入set ORACLE_SID=xxx (UNIX环境下请根据不同的shell类型使用不同的语法:setenv, export.) 2. 键入 emct
12、l secure ,可以看到全部的选项:secure oms -resetsecure agent secure emsecure dbconsole secure setpwd secure status oms urlsecure lock | unlock3. 以配置oms为例3.1 先停掉所有与oms相关的 服务(opmnctl stopall)3.2 敲入: emctl secure oms,会让你输入registration password,然后系统会产生相关的证书文件, 如果一切顺利的话,系统会有提示配置成功的信息3.3 重新启动服务(opmnctl startall) 缺省情
13、况下,7777和4889这两个端口是可用的, 配置成secure 模式后,4888端口是支持SSL协议的. 从$EM_HOMEsysmanconfig目录下的emoms.properties文件中可以看到配置信息.3.4 检测oms是否已经运行在https协议下emctl secure status oms url注意: URL 要输入完整, 例如: https:/myserver:4888/em/upload/4. Agent, DBconsole的配置基本类似.5. 启动浏览器运行时,IE会弹出一个安装安全证书的窗口,按确认.二、出现了问题,怎样解决以DB Control为例, 大致的步骤
14、是这样的: 1. emctl status dbconsole 查看db control 的状态2.去 $ORACLE_HOMEhostname_sidsysmanlog目录下查看相关日志(emoms.log,emagent.log等) 3. 检查配置文件 emd.properties,emoms.properties目录: $ORACLE_HOMEhostname_sidsysmanconfig 4. 确保监听器工作正常: lsnrctl status 5. 10G EM 使用的是配置文件中定义的连接串,而不是直接访问tnsnames.ora .目录: $ORACLE_HOMEhostnam
15、e_sidsysmanconfig文件: emoms.properties.参数: oracle.sysman.eml.mntr.emdRepConnectDescriptor三、修改了监听端口, 怎样保证 DB Control 正常运行1. 修改 listener.ora 和tnsnames.ora 这两个文件:tnsnames.ora 中需要加入:listener_1 =(ADDRESS = (PROTOCOL = TCP)(HOST = xxxx)(PORT = 新的端口)然后启动数据库:SQL show parameter local_listener ;SQL alter syste
16、m set local_listener=listener_1 scope=spfile;重启数据库使得修改生效2. 修改 $ORACLE_HOMEhostname_sidsysmanconfig下的emoms.properties文件:oracle.sysman.eml.mntr.emdRepPort=新的端口oracle.sysman.eml.mntr.emdRepConnectDescriptor=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx)(PORT=新的端口)(CONNECT_DATA=(SERVICE_NA
17、ME=xxx) 3. 最后,还要修改 $ORACLE_HOMEhostname_sidsysmanemd下的targets.xml:4. 重新启动监听器和dbconsole 服务.5. 如果嫌上面的操作麻烦,可以用emca这个命令行工具:emca -h 查看所有可用的命令emca -r 跳过资料档案库的创建.四、怎样修改 DB Control 的服务端口缺省情况下, DB Control 的端口是5500, 可以参考下面的说明更改端口。如果用户想改变oms端口,必须改变以下三个文件,然后重启db control以使得改变生效:1.编辑$ORACLE_HOME/_/sysman/config/e
18、moms.properties并改变以下参数:oracle.sysman.emSDK.svlt.ConsoleServerPortoracle.sysman.emSDK.svlt.ConsoleServerHTTPSPort2.编辑$ORACLE_HOME/_/sysman/config/emd.properties并改变以下参数:REPOSITORY_URLemdWalletSrcUrl3.编辑$ORACLE_HOME/oc4j/j2ee/OC4J_DBConsole_/config/http-web-site.xml并改变以下参数:web-site port注:请在修改前备份。五、如何使用
19、Automatic SGA ManagementAutomatic SGA Management 是 10G 引入的新特性之一,将初始化参数文件中与内存管理密切有关的几个参数抽取出来,交由数据库去自行管理(由新增加的参数SGA_TARGET来管理),在一定程序上能减轻DBA的负担。至于参数的合理性,还需要结合AWR Report 去验证.SGA_TARGET = db_cache_size + db_nk_cache_size(n=2,4,.)+ db_keep_cache_size + db_recycle_cache_size +shared_pool_size + java_pool_s
20、ize + large_pool_size + xxxxxxx: 是一个保留值,从目前的实验来看,基本是4M步骤:1.alter system set sga_target=300m scope=bothcreate pfile from spfile;shutdown immediate;修改init.ora 文件,将这些参数的值设成0:db_cache_size, shared_pool_size, java_pool_size,large_pool_size2. 启动SQLPLUS,以新的pfile文件启动数据库SQL startup pfile=.让我们来看看调整的结果:SQL sel
21、ect name, block_size, current_size from v$buffer_pool;name block_size current_size-KEEP 8192 204SQL Select pool, sum(bytes)/1024/1024 as M bytes from v$SGASTAT group by pool;pool M bytes -java pool 4 large pool 4shared pool 84205.002403 205.002403=buffer cache + log buffer + fixed sga + all others .
22、改动java pool的值SQL alter system set java_pool_size=20M;SQL select name, block_size, current_size,prev_size from v$buffer_pool;name block_size current_size prev_size-KEEP 8192 188 204SQL Select pool, sum(bytes)/1024/1024 as M bytes from v$SGASTAT group by pool;pool M bytes -java pool 20 large pool 4sha
23、red pool 84189.002403可以看出, db_cache_size的值已经被自动调小了. 再把java pool 的值改回去SQL alter system set java_pool_size=8M;SQL select name, block_size, current_size,prev_size from v$buffer_pool;name block_size current_size prev_size-KEEP 8192 188 204SQL select name, block_size, current_size,prev_size from v$buffer
24、_pool;pool M bytes -java pool 20 large pool 4shared pool 84189.002403这一次, db_cache_size的值没有变化 , JAVA_POOL_SIZE的值也没有变化 修改large pool的值为16MSQL alter system set large_pool_size=16M;System altered.SQL select name,block_size,current_size,prev_size from v$buffer_pool;NAME BLOCK_SIZE CURRENT_SIZE PREV_SIZE-
25、 - - -DEFAULT 8192 176 188SQL Select pool, sum(bytes)/1024/1024 as M bytes from v$sgastat group by pool;POOL M bytes- -java pool 20large pool 16 shared pool 84177.002403这次,db_cache_size和large_pool_size的值都变了 同样,调大shared_pool_size后, db_cache_size会自动减小.虽然db_nk_cache_size的值不会随着workload 的改变而自动调整, 我们还是可以看
26、看手工改动db_nk_block_size 的情况 SQL alter system set db_2k_cache_size=4m;System altered.SQL select name,block_size,current_size,prev_size from v$buffer_pool;NAME BLOCK_SIZE CURRENT_SIZE PREV_SIZE- - - -DEFAULT 8192 172 176DEFAULT 2048 4 0SQL alter system set db_2k_cache_size=0;System altered.SQL select na
27、me,block_size,current_size,prev_size from v$buffer_pool;NAME BLOCK_SIZE CURRENT_SIZE PREV_SIZE- - - -DEFAULT 8192 176 172SQL alter system set db_2k_cache_size=8m;System altered.SQL select name,block_size,current_size,prev_size from v$buffer_pool;NAME BLOCK_SIZE CURRENT_SIZE PREV_SIZE- - - -DEFAULT 8
28、192 168 176DEFAULT 2048 8 0结论: 手工调整db_nk_cache_size确实会影响原有的参数. 最后说一点: SGA_TARGET参数与SGA_MAX_SIZE参数有密切关联,基本的原则就是前者的值不能大于后者的值. 总结:设置了SGA_TARGET参数后,数据库会在这个范围内自行调整;但许多情况下, 怎样合理地设置这个参数仍是DBA需要考虑的问题, 他们需要结合AWR Report等辅助的工具来分析.( 当然,我们可以根据Advisor的历史信息而确定一个比较合理的值)。=一、乱码问题Redhat RHEL AS3 下安装 Oracle DB 10g 中文乱码问
29、题不少兄弟反映在rhel3下安装oracle10g时出现乱码, 其实在安装和使用时出现乱码的地方有多个, 可以分为三类:1. 安装时的乱码2. 一些应用程序的乱码, 比如 dbca, netca3. 一些基于oc4j的web应用的乱码, 比如 isqlplus, em 造成这些问题的原因都是一个, 就是这些程序都使用jdk, 相应的jdk(或jre) 使用的字体配置文件 font.properties 中的字体和操作系统的字体或者字体配置文件不匹配. 解决的办法是把两者改成一致. 1. 下载, 解包 ship.db.cpio.gz, 生成目录 Disk12. cd Disk1/stage/Co
30、mponents/oracle.swd.jre/1.4.2.0.0/1/DataFiles/unzip all_except_bin.jar(这时生成一个 jre 的目录)cd jre/1.4.2/lib/mv font.properties font.properties.bakcp font.properties.zh_CN.Redhat8.0 font.propertiescd ./././zip -r all_except_bin.jar.new jre/mv all_except_bin.jar.new all_except_bin.jar(其实就是把 font.properties
31、 文件换掉. 这样安装时汉字显示就没有问题了)3. 如法炮制, 把Disk1/stage/Components/oracle.jdk/1.4.2.0.0/1/DataFiles/sol_bin.1.1.jar文件里面的font.properties 文件换掉, 创建数据库和执行网络配置时的乱码就没有了. isqlplus 和em 的乱码也解决了。用IE登录Linux服务器上的em出现的乱码不知道大家有没有注意到,EM显示的中文翻译很是糟糕,up/down 动不动就翻译成“向上”“向下”,让人哭笑不得.很多朋友都说,干脆给显示英文算了,可是怎么显示呢?好了,现在我们有一种办法很容易的解决这个问题
32、:打开你的IE浏览器,选择工具-Internet选项-常规选择“语言”,默认只有“中文”,选择“添加”,加入英语(美国),调整顺序,把”英语(美国)“放到最上面OK ,确定。打开你的 http:/yoururl:5500/em问题解决了。二、10g如何更改归档模式1. 对于初始化文件,只需要修改log_archive_dest_n 这个参数.n=1,2,3,.10, Oracle 缺省会使用log_archive_dest_10这个参数来使用flash recovery area里面存放的归档日志文件,大小由参数db_recovery_file_dest_size来决定. 修改:log_arc
33、hive_dest_1=location=c:oracle10g.archivelog quota_size=2G .如果归档使用flash recovery area, 上面的参数不需要指定任何值,Oracle 会自动使用db_recovery_file_dest这个参数所指定的路径。 2. 启动sqlplus:startup mount pfile=.alter database archivelog;(如果启用flashback, alter database flashback on)alter database open;archive log list(查看是否运行在归档模式)(如
34、果前面的log_archive_dest_n没有设置,则会显示USE_DB_RECOVERY_FILE_DEST)3. 怎样变成noarchivelog 模式步骤基本同上。三、用dblink在10G中做create table .as select * from .varchar2()的column宽度变成3倍问题描述:例如:varchar2(255)=varchar(765)测试:1. 环境: 两台机器都装的10G的数据库2. 测试步骤和结果:SQL conn test1/test1db10G_server1 SQL create database link link_server2 con
35、nect to test1 identified by test1using db10G_server2SQL conn test1/test1db10G_server2SQL create table test1_t1 as select * from all_objects where rownum desc test1_t1;Name Null? Type-OWNER VARCHAR2(30)OBJECT_NAME VARCHAR2(30)SUBOBJECT_NAME VARCHAR2(30)OBJECT_ID NUMBERDATA_OBJECT_ID NUMBEROBJECT_TYPE
36、 VARCHAR2(19)CREATED DATELAST_DDL_TIME DATETIMESTAMP VARCHAR2(19)STATUS VARCHAR2(7)TEMPORARY VARCHAR2(1)GENERATED VARCHAR2(1)SECONDARY VARCHAR2(1)SQL conn test1/test1db10G_server1SQL create table test1_linkt1 as select * from test1_t1link_server2;SQL desc test1_linkt1Name Null? Type- - -OWNER VARCHA
37、R2(60)OBJECT_NAME VARCHAR2(60)SUBOBJECT_NAME VARCHAR2(60)OBJECT_ID NUMBERDATA_OBJECT_ID NUMBEROBJECT_TYPE VARCHAR2(38)CREATED DATELAST_DDL_TIME DATETIMESTAMP VARCHAR2(38)STATUS VARCHAR2(14)TEMPORARY VARCHAR2(2)GENERATED VARCHAR2(2)SECONDARY VARCHAR2(2)表结构一样,但是列的长度确实变了, 通过dblink创建的表的varchar2列的长度是原表的两
38、倍再来看看字符集1.Server1上的数据库字符集SQL column value format A20SQL select value from nls_database_parameters where parameter=NLS_CHARACTERSET;value-ZHS16GBK2. Server2上的数据库字符集SQL conn test1/test1db10G_server2SQL column value format A20SQL select value from nls_database_parameters where parameter=NLS_CHARACTERSE
39、T;value-AL32UTF8结论: 与数据库字符集不同有关系.四、在10g不支持的Linux发行版上安装10g的解决方法正常安装的10g只支持Red Hat Enterprise Linux 2.1 and 3, and on UnitedLinux 1.0。如果是其它的版本,比如fedora,rh9等,10g将会说不支持,而不允许安装,解决方法如下:1.运行runInstaller -ignoreSysPrereqs,这样会跳过检查2.修改/etc/redhat-release文件,让10g认为自己处于支持的操作系统中,运行下面的命令即可 su - rootcp /etc/redhat-release /etc/redhat-release.backupcat /etc/redhat-release EOFRed Hat Enterprise Linux AS release 3 (Taroon)EOF安装完毕,再将那个文件还原:su - rootcp /etc/redhat-rele