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 是 Oracl
4、e 附带的,不过在开发中一般使用 PL/SQL,因为 PL/SQL 更易于操作。Oracle 企业管理器:为管理员提供图形窗口管理实例,模式,安全性和存储等。 四:表空间 System 表空间:在每一个数据库都有一个名为 SYSTEM 的表空间,即系统表空间,该表空间是在创建数据库或数据库安装时自动创建的,用于存储系统的数据字典表,系统程序单元,过程,函数,包和触发器等,也可以用于存储用户表,索引等对象。创建表空间:Create TableSpace tablespacename Datafile filename Size integer K|M AutoExtend Off|Ontable
5、spacename: 表空间名称。filename: 表空间中数据文件的路径和名称。Size: 指定表空间用于存储数据的文件的大小, “K”表示千字节, “M”表示兆AutoExtend: 用来启用或禁用数据文件的自动扩展。示例:创建一个 10M 的 mySpace 表空间.Create TableSpace mySpace Datafile D:OraclemySpace.dbf Size 10M AutoExtend On五:用户管理默认用户: 当创建一个新数据库时, Oracle 将创建一些默认数据库。默认数据库为“Sys” , “System”和“Scott” 。Sys: 默认密码“c
6、hange_on_install” , 是 Oracle 中的一个超级用户,主要用来维护系统信息和管理实例。System: 默认密码“manager ”, 是 Oracle 默认的系统管理员。 用来管理数据库的用户,权限和存储等。Scott: 默认密码“tiger” ,是 Oracle 数据库的一个普通用户示范。Sys 和 System 是系统用户。创建一个新用户:Create User user Identified By password Defalut TableSpace tablespace Temporary TableSpace tablespaceuser: 用户名称。pass
7、word: 用户密码。Default TableSapce: 为用户指定默认表空间(必须指定) 。Temporary TableSpace: 为用户指定临时表空间。注意:创建一个用户时必须为这个用户指定一个默认表空间,该用户将与这个表空间相关联,以后该用户创建表,视图,索引等等都存储在这个表空间中。注意: 一个用户只能有一个默认表空间,而一个表空间可以有多个用户。示例: 创建 Fly 用户Create User Fly Identified By 666Defalut TableSapce mySpace(前面创建的表空间) Temporary TableSapce temp为用户分配权限:O
8、racle 用户权限分为“系统权限”和“对象权限”2 种。系统权限:允许用户执行一些数据库操作,如创建表空间等等。对象权限:允许用户对某一特定对象(如表,视图等)执行特定操作Grant 命令可以用来分配权限。分配系统权限:Grant Connect To FlyGrant Resource To FlyGrant DBA To FlyConnect 角色允许用户连接数据库并在数据库创建表或其他对象。Resource 角色允许用户使用数据库的空间 。DBA 角色允许用户执行数据库操作。其中 Connect 和 Resource 权限必须分配给用户。分配对象权限:Grant 对象权限 On 表名称
9、 To 用户 Grant Insert On Emp To Fly 将在 Emp 表中插入数据的权限分配个用户 FlyGrant 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 企业管理器的中间层.其中 OracleH
11、OME_NAMETNSListener,OracleServiceSID 是必须启动的服务。OracleHOME_NAMEAgent, OracleHOME_NAMEHTTPServer,OracleHOME_NAMEManagementServer 这三个服务可以关闭,以减少内存的使用。知识点、技巧集一、怎样配置 EM 使其支持 SSL 协议10G EM 中的 OMS, DBConsole,Agent 都支持 SSL 协议.具体操作: 1. 如果没有环境变量 ORACLE_SID,请先配置,或者直接敲入 set ORACLE_SID=xxx (UNIX 环境下请根据不同的 shell 类型使
12、用不同的语法:setenv, export.) 2. 键入 emctl 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,然后系统会产生相关的证书文件, 如果一切顺利的话,系统会有提示
13、配置成功的信息3.3 重新启动服务(opmnctl startall) 缺省情况下,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. 启动浏览器运行时
14、,IE 会弹出一个安装安全证书的窗口,按“确认“.二、出现了问题,怎样解决以 DB Control 为例, 大致的步骤是这样的:1. emctl status dbconsole 查看 db control 的状态2.去 $ORACLE_HOMEhostname_sidsysmanlog 目录下查看相关日志(emoms.log,emagent.log 等)3. 检查配置文件 emd.properties,emoms.properties目录: $ORACLE_HOMEhostname_sidsysmanconfig4. 确保监听器工作正常: lsnrctl status5. 10G EM 使用
15、的是配置文件中定义的连接串,而不是直接访问 tnsnames.ora .目录: $ORACLE_HOMEhostname_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 = 新的端
16、口)然后启动数据库:SQL show parameter local_listener ;SQL alter system 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=(ADDRE
17、SS=(PROTOCOL=TCP)(HOST=xxx)(PORT=新的端口)(CONNECT_DATA=(SERVICE_NAME=xxx) 3. 最后,还要修改 $ORACLE_HOMEhostname_sidsysmanemd下的 targets.xml:4. 重新启动监听器和 dbconsole 服务.5. 如果嫌上面的操作麻烦,可以用 emca 这个命令行工具:emca -h 查看所有可用的命令emca -r 跳过资料档案库的创建 .四、怎样修改 DB Control 的服务端口缺省情况下, DB Control 的端口是 5500, 可以参考下面的说明更改端口。如果用户想改变 oms
18、 端口,必须改变以下三个文件,然后重启 db control 以使得改变生效:1.编辑$ORACLE_HOME/_/sysman/config/emoms.properties 并改变以下参数:oracle.sysman.emSDK.svlt.ConsoleServerPortoracle.sysman.emSDK.svlt.ConsoleServerHTTPSPort2.编辑$ORACLE_HOME/_/sysman/config/emd.properties 并改变以下参数:REPOSITORY_URLemdWalletSrcUrl3.编辑$ORACLE_HOME/oc4j/j2ee/OC
19、4J_DBConsole_/config/http-web-site.xml 并改变以下参数:web-site port注:请在修改前备份。五、如何使用“Automatic SGA Management“Automatic SGA Management 是 10G 引入的新特性之一,将初始化参数文件中与内存管理密切有关的几个参数抽取出来,交由数据库去自行管理(由新增加的参数 SGA_TARGET来管理),在一定程序上能减轻 DBA 的负担。至于参数的合理性,还需要结合 AWR Report 去验证.SGA_TARGET = db_cache_size + db_nk_cache_size(n=
20、2,4,.)+ db_keep_cache_size + db_recycle_cache_size +shared_pool_size + java_pool_size + 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_
21、size,large_pool_size2. 启动 SQLPLUS,以新的 pfile 文件启动数据库SQL startup pfile=.让我们来看看调整的结果:SQL select 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 poo
22、l 4shared pool 84205.002403 205.002403=buffer cache + log buffer + fixed sga + all others .改动 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)
23、/1024/1024 as “M bytes“ from v$SGASTAT group by pool;pool M bytes -java pool 20 large pool 4shared 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_
24、size prev_size-KEEP 8192 188 204SQL select name, block_size, current_size,prev_size from v$buffer_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 se
25、lect name,block_size,current_size,prev_size from v$buffer_pool;NAME BLOCK_SIZE CURRENT_SIZE PREV_SIZE- - - -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_po
26、ol_size 的值都变了 同样,调大 shared_pool_size 后, db_cache_size 会自动减小.虽然 db_nk_cache_size 的值不会随着 workload 的改变而自动调整, 我们还是可以看看手工改动 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_S
27、IZE- - - -DEFAULT 8192 172 176DEFAULT 2048 4 0SQL alter system set db_2k_cache_size=0;System altered.SQL select name,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 selec
28、t name,block_size,current_size,prev_size from v$buffer_pool;NAME BLOCK_SIZE CURRENT_SIZE PREV_SIZE- - - -DEFAULT 8192 168 176DEFAULT 2048 8 0结论: 手工调整 db_nk_cache_size 确实会影响原有的参数. 最后说一点: SGA_TARGET 参数与 SGA_MAX_SIZE 参数有密切关联,基本的原则就是前者的值不能大于后者的值. 总结:设置了 SGA_TARGET 参数后,数据库会在这个范围内自行调整;但许多情况下, 怎样合理地设置这个参数仍
29、是 DBA 需要考虑的问题, 他们需要结合 AWR Report 等辅助的工具来分析.( 当然,我们可以根据 Advisor的历史信息而确定一个比较合理的值)。=一、乱码问题Redhat RHEL AS3 下安装 Oracle DB 10g 中文乱码问题不少兄弟反映在 rhel3 下安装 oracle10g 时出现乱码, 其实在安装和使用时出现乱码的地方有多个, 可以分为三类:1. 安装时的乱码2. 一些应用程序的乱码, 比如 dbca, netca3. 一些基于 oc4j 的 web 应用的乱码, 比如 isqlplus, em 造成这些问题的原因都是一个, 就是这些程序都使用 jdk, 相
30、应的 jdk(或 jre) 使用的字体配置文件 font.properties 中的字体和操作系统的字体或者字体配置文件不匹配. 解决的办法是把两者改成一致. 1. 下载, 解包 ship.db.cpio.gz, 生成目录 Disk12. cd Disk1/stage/Components/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.z
31、h_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 文件换掉. 这样安装时汉字显示就没有问题了 )3. 如法炮制, 把 Disk1/stage/Components/oracle.jdk/1.4.2.0.0/1/DataFiles/sol_bin.1.1.jar 文件里面的 font.properties 文件换掉 , 创建数据库和执行网络配置时的乱码就没有了. isq
32、lplus 和 em 的乱码也解决了。用 IE 登录 Linux 服务器上的 em 出现的乱码不知道大家有没有注意到,EM 显示的中文翻译很是糟糕,up/down 动不动就翻译成“向上” “向下” ,让人哭笑不得.很多朋友都说,干脆给显示英文算了,可是怎么显示呢?好了,现在我们有一种办法很容易的解决这个问题:打开你的 IE 浏览器,选择工具“Internet 选项常规选择“语言” ,默认只有“中文” ,选择“添加” ,加入英语(美国), 调整顺序,把”英语(美国)“放到最上面OK ,确定。打开你的 http:/yoururl:5500/em问题解决了。二、10g 如何更改归档模式1. 对于初始
33、化文件,只需要修改 log_archive_dest_n 这个参数.n=1,2,3,.10, Oracle 缺省会使用 log_archive_dest_10这个参数来使用 flash recovery area 里面存放的归档日志文件,大小由参数db_recovery_file_dest_size 来决定 . 修改:log_archive_dest_1=“location=c:oracle10g.archivelog quota_size=2G“ .如果归档使用 flash recovery area, 上面的参数不需要指定任何值,Oracle 会自动使用db_recovery_file_d
34、est 这个参数所指定的路径。 2. 启动 sqlplus:startup mount pfile=.alter database archivelog;(如果启用 flashback, alter database flashback on)alter database open;archive log list( 查看是否运行在归档模式)(如果前面的 log_archive_dest_n 没有设置,则会显示USE_DB_RECOVERY_FILE_DEST)3. 怎样变成 noarchivelog 模式步骤基本同上。三、用 dblink 在 10G 中做 create table .as
35、select * from .varchar2()的 column 宽度变成 3 倍问题描述:例如:varchar2(255)=varchar(765)测试:1. 环境: 两台机器都装的 10G 的数据库2. 测试步骤和结果:SQL conn test1/test1db10G_server1 SQL create database link link_server2 connect to test1 identified by test1using db10G_server2SQL conn test1/test1db10G_server2SQL create table test1_t1 a
36、s 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 VARCHAR2(19)CREATED DATELAST_DDL_TIME DATETIMESTAMP VARCHAR2(19)STATUS VARCHAR2(7)TEMPORARY VARCHAR2(1)GENERATE
37、D 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 VARCHAR2(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)