以下的文章主要是介绍Oracle空间管理的技巧 我们大家都知道在Oracle数据库中 DBA是可以通过相应的表或是视图来了解当前的空间具体使用的状况观测 从而作出可能的调整决定
一 表空间的自由空间
通过对表空间的自由空间的观察 可用来判断分配给某个表空间的空间是太多还是不够 请看下列的语句
SQL > select a file_id FileNo a tablespace_name
Tablespace_name
a bytes Bytes a bytes sum(nvl(b bytes )) Used
sum(nvl(b bytes )) Free
sum(nvl(b bytes ))/a bytes %free
from dba_data_files a dba_free_space b
where a file_id=b file_id(+)
group by a tablespace_name
a file_id a bytes order by a tablespace_name;
File Tablespace
No _nameBytes Used Free %free
IDX_JF E+ E+
JFSJTS E+ E+
JFSJTS E+ E+
RBS
RBS E+ E+
RBSJF E+ E+
SFGLTS E+ E+
SFSJTS E+ E+
SYSTEM
TEMP
TOOLS
USERS
rows selected
可以看出 在FileNo为 的表空间RBS中 只有 %的分配空间未被使用 这个比例太小了 而在SYSTEM及TEMP等表空间中 高达 %以上的空间未被利用 对于生产型数据库 这个表空间的设置有些偏高
关于自由Oracle空间管理 有下面的一些建议
利用Export及Import命令卸出和装入表空间可以释放大量的空间 从而缓解增加另外的数据文件的要求
如果包含具有高插入(insert)和更新(update)活动的表的表空间中自由空间的比重下降到了 %以下 要为此表空间增加更多的空间
对于一个基本是静态表数据的表空间 如果有多于 %的自由空间 则可以考虑减少分配给它的文件空间量
减少SYSTEM表空间的空间量比较困难 因为那要重建数据库
二 表及索引的扩展
A 为了防止表或索引被过分扩展 及时实现对数据库的调整 用户应当经常对有关对象进行观察
我们可以认为 扩展区域大于 个的表或索引为过分扩展(overextended) 请看下面的语句
SQL > select substr(segment_name )
Segment_name segment_type
substr(tablespace_name )
Tablepace_name extents Max_extents
from dba_segments
where extents > and owner= JFCL
order by segment_name;
SEGMENT_NAMESEGMENT TABLEPACE_
EXTENTS MAX_EXTENTS
_TYPE
CHHDFYB TABLE JFSJTS
CHHDFYB_DHHMINDEX JFSJTS
DJHZFYB_BF TABLE JFSJTS
DJHZFYB_DJHMINDEX IDX_JF
DJHZFYB_JZHMINDEX IDX_JF
GSMFYB TABLE JFSJTS
JFDHTABLE JFSJTS
JFDH_DHHM INDEX IDX_JF
JFDH_JZHM INDEX IDX_JF
XYKFYB TABLE JFSJTS
YHDATABLE JFSJTS
YHDA_BAKTABLE JFSJTS
YHHZFYB_ TABLE JFSJTS
rows selected
通过观察 DBA可以及时发现问题并进行相应的处理
我们可以利用export卸出表 然后删除表 再利用import命令将表装入 这样 可以将不连续的区域合并成一个连续的空间
B 如果用户希望对表的空间设置进行优化 例如 需要改变表EMP的initial参数 可以采用下面的方法
在将EMP表卸出并删除后执行imp命令时使用indexfile参数
imp userid=scott/tiger file=emp dmp indexfile=emp sql Oracle把表和索引的创建信息写到指定的文件 而不是把数据写回
打开emp sql文件
REM CREATE TABLE SCOTT EMP ( EMPNO
NUMBER( ) ENAME
REM VARCHAR ( ) JOB VARCHAR ( )
MGR NUMBER( ) HIREDATE DATE
REM SAL NUMBER( ) M NUMBER
( ) DEPTNO NUMBER( ))
REM PCTFREE PCTUSED INITRANS
MAXTRANS LOGGING STORAGE(INITIAL
REM NEXT MINEXTENTS MAXEXTENTS
PCTINCREASE FREELISTS
REM FREELIST GROUPS BUFFER_POOL DEFAULT)
TABLESPACE USER_DATA ;
REM rows
对它进行编辑 去除 REM 等信息 找到Initial参数 根据需要改变它
在SQLplus中执行emp sql
装入数据
mp userid=scott/tiger ignore=y file=emp dmp
需要注意的是 ignore参数必须设为Y
C 可以用下面的语句来观察表或索引距离达到最大扩展的状况 UNUSE 为距离达到最大扩展的值 在User_extents表中 extent_id是从 开始记述数的
SQL >select a table_name TABLE_NAME max
(a max_extents) MAXEXTENTS
max(b extent_id)+ IN USE MAX
(a max_extents) (max(b extent_id)+ ) UNUSE
from user_tables a user_extents b
where a table_name=b segment_name
group by a table_name ORDER BY ;
TABLE_NAME MAXEXTENTS IN USEUNUSE
YZPHB
SHJYB
SHFYB
RCHDB
SJTXDZB
SJTXDAB
CHYHB
JFDH
rows selected
如果 UNUSE 小到一定的程度 我们就应该加以关注 进行适当的调整处理
三 关于连续空间
可以用下面的语句来查看数据库中的自由空间
SQL > select from dba_free_space
where tablespace_name= SFSJTS
order by block_id;
TABLESPACE FILE_ID BLOCK_ID BYTESBLOCKS
_NAME
SFSJTS
SFSJTS
SFSJTS
SFSJTS
SFSJTS
SFSJTS
SFSJTS
SFSJTS
SFSJTS
SFSJTS
rows selected
我们可以通过命令的结果来估计相邻自由空间的真正数量 对每一行 用起始快的id(BLOCK_ID)加上自由块(BLOCKS)的数量 如果其和与下一行的块id(BLOCK_ID)相等 则此两行是连续的 如上例第二行和第三行 + = 而 + != 所以从block_id为 开始 有 + = 个block的连续空间
在Oracle数据库的后台 系统监视器(SMON)周期性地合并自由空间相邻的块 以得到更大的连续块 而DBA可以用SQL命令来完成这个工作
alter tablespace tablespace_name coalesce;
lishixinzhi/Article/program/Oracle/201311/17790假设数据库所在服务器IP地址:19216801
数据库实例名为:ora92
用户名:umap
密码:umap
第一步打开配置程序
位于:程序-->Oracle - OraHome92-->Configuration and Migration Tools-->Net Configuration Assistant ;
第二步:选择配置项:
打开程序后,出现的界面中有四个选项, 分别为(1)监听程序配置,(2)命名方法配置,(3)本地NET服务名配置,(4)目录使用配置 这里我们选择第3个,点下一步
第三步:根据需要选择 *** 作内容,是添加还是对以前的配置进行修改或删除;
第四步:根据您要连接的Oracle数据据库版本选择, 这里我们选择Oracle8i或更高版本数据库或服务;
第五步:服务名,输入示例中的实例名;
第六步:选择TCP;
第七步:主机名:输入示例中的IP地址; 使用默认端口1521;
第八步:使用您的登录帐户与密码进行连接测试
“ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务”的解决方法
ORA-12154:TNS:无法处理服务名
解决方案:
1服务是否打开
2监听是否打开
3C:\oracle\ora92\network\admin目录下tnsnamesora文件中是否有你建的库名和主机名
比如:
AA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =1014410089)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = AA)
)
)
SQL SERVER连接oracle数据库几种方法2010年08月27日星期五 09:35 PM--1 方式
--查询oracle数据库中的表
SELECT
FROM OPENDATASOURCE(
'MSDAORA',
'Data Source=GE160;UserID=DAIMIN;Password=DAIMIN'
)DAIMINJOBS
举一反三:在查询分析器中输入:
SELECT
FROM OPENDATASOURCE(
'MSDAORA',
'Data Source=ORCL;User ID=SYSTEM;Password=manager'
)HKDYS_HD_HKDY
--在sqlserver中创建与oracle数据库中的表同名的表
select into JOBS from
OPENDATASOURCE(
'MSDAORA',
'Data Source=GE160;User ID=daimin;Password=daimin'
)DAIMINJOBS
select from JOBS
--2、方式
--在master数据库中查看已经存在的链接服务器
select from sysservers
EXEC sp_addlinkedserver
@server = 'GE160',
@srvproduct = 'Oracle',
@provider = 'MSDAORA',
@datasrc = 'GE160'
exec sp_addlinkedsrvlogin 'GE160', false,'sa', 'daimin', 'daimin'
--要在企业管理器内指定登录帐号
exec sp_dropserver GE160
select from GE160DAIMINJOBS
delete from GE160DAIMINJOBS
--备注:引用ORACLE服务器上的表时,用户名称与表名一定要大写字母。
SELECT
FROM OPENQUERY(GE160, 'SELECT FROMDAIMINJOBS')
--3、方式
SELECT a
FROM OPENROWSET('MSDAORA',
'GE160';'DAIMIN';'DAIMIN',
DAIMINJOBS) AS a
ORDER BY aJOB_ID
--4、方式 ODBC
--ODBC方式比较好办
SELECT A
FROMOPENROWSET('MSDAORA','GE160';'DAIMIN';'DAIMIN', --GE160是数据源名
DAIMINJOBS) AS A
ORDER BY AJOB_ID第一步:创建脚本文件。
在Oracle数据库重,创建脚本文件的方式很多。如可以直接在记事本中创建脚本文件,也可以通过SQLPlus工具直接创建。不过,笔者的意见是,在SQLPlus中直接创建脚本文件的话,比较麻烦。这主要是因为在SQLPlus工具中,命令编辑能力非常有效。如不能够使用键盘上的箭头键定位输入的位置,不能够使用DEL键删除输入的内容等等。而且阅读起来也比较困难。
第二步:编辑脚本文件。
在我们使用脚本文件的时候,往往需要根据实际情况,对其进行稍微的调整。对脚本文件进行编辑,也有两种方式。一是通过SQLPlus工具,二是第三方独立的脚本编辑软件。
对于一些调整不大的脚本文件,我们可以直接利用SQLPlus工具打开,然后进行编辑。但是,对于需要进行大量修改的脚本文件,则笔者建议数据库管理员采用第三方独立的脚本编辑软件。原因很简单,就如同上面所说的那样,SQLPlus工具脚本命令编辑功能非常的薄弱。若采用这个工具对现成的脚本语句进行编辑的话,则可能工作量还是重新编写一个来的轻。所以,数据库管理员要根据实际的情况,选择合适的脚本编辑工具。
另外,在编辑的过程中,要注意语法的正确性。特别是要注意,不能够改变其固有的格式。如不要不小心删除了最后的“/”符号结束。
第三步:运行脚本文件。
脚本建立好之后,如何运行脚本呢在Oracle系统中也提供了许多方式。数据库管理员可以根据自己的使用习惯来进行选择。
一是通过Start语句来调用脚本文件。其语法是Start Filemame[相关参数]。在运行这个命令的时候,需要注意几个问题。
1、脚本文件的扩展名问题。上面在建立脚本文件的时候,笔者就跳掉过,为了在SQLPlus等工具中可以直接调用这个脚本文件,最好能够把扩展名改为Oracle数据库能够接受的扩展名。默认情况下,扩展名设置为SQL即可。
2、脚本文件的路径问题。若用户在利用Start调用脚本文件的时候,若没有清楚的指名保存路径的话,则SQLPlus工具会现在当前的目录中进行查找;若没有的话,则会根据环境变量中确定的目录中进行查找。而一般情况下,我们把脚本文件都会独立存放。所以,在使用Start命令执行脚本文件的时候,最好能够注明脚本文件的绝对路径名。防止语句执行错误。
另外@命令也可以起到跟Start命令一样的作用。只不过,前者的使用范围更广一点。@命令可以脱离SQLPLUS工具而使用。如可以直接在微软 *** 作系统中的命令行方式下使用。当然,这 *** 作系统要事先部署了Oracle数据库环境。
二是可以直接利用SQLPlus工具打开文本文件,执行脚本语句。然后点击“文件”、“执行”命令执行这个脚本语句。这种方式的好处就是,系统会主动提示用户需要输入的参数。
总之,脚本文件是我们管理Oracle数据库的一大利器。我们好好利用脚本文件,可以提高Oracle数据库的管理效率。毕竟,每次在需要的时候,都去编写命令是一件很麻烦的事情。而脚本文件的最大好处,就是可以提高语句的重复利用,节省我们编写语句、调试测试的时间。
Oracle数据库管理员应按如下方式对Oracle数据库系统做定期监控
( ) 每天 对Oracle数据库的运行状态 日志文件 备份情况 数据库的空间使用情况 系统资源的使用情况进行检查 发现并解决问题
( ) 每周 对数据库对象的空间扩展情况 数据的增长情况进行监控 对数据库做健康检查 对数据库对象的状态做检查
( ) 每月 对表和索引等进行Analyze 检查表空间碎片 寻找数据库性能调整的机会 进行数据库性能调整 提出下一步空间管理计划 对ORACLE数据库状态进行一次全面检查
每天的工作
( ) 确认所有的INSTANCE状态正常登陆到所有数据库或例程 检测ORACLE后台进程: $ps –ef|grep ora
( ) 检查数据文件的状态记录状态不是 online 的数据文件 并做恢复
Select file_name status from dba_data_files where status= UNAVAILABLE ;
( ) 检查日志文件和trace文件记录alert和trace文件中的错误
连接到每个需管理的系统
使用 telnet 对每个数据库 cd到bdump目录 通常是$ORACLE_BASE//bdump 使用Unix tail 命令来查看alert_ log文件 如果发现任何新的ORA 错误 记录并解决( ) 检查数据库当日备份的有效性
对RMAN备份方式: 检查第三方备份工具的备份日志以确定备份是否成功
对EXPORT备份方式: 检查exp日志文件以确定备份是否成功
对其他备份方式: 检查相应的日志文件
( ) 检查文件系统的使用(剩余空间) 如果文件系统的剩余空间小于 % 需删除不用的文件以释放空间
$df –k
( ) 检查表空间的使用情况
SELECT tablespace_name max_m count_blocks free_blk_cnt sum_free_m to_char( sum_free_m/sum_m ) || % AS pct_free FROM (SELECT tablespace_name sum(bytes)/ / AS sum_m FROM dba_data_files GROUP BY tablespace_name) (SELECT tablespace_name AS fs_ts_name max(bytes)/ / AS max_m count(blocks) AS count_blocks sum(bytes/ / ) AS sum_free_m FROM dba_free_space GROUP BY tablespace_name ) WHERE tablespace_name = fs_ts_name;
( ) 检查剩余表空间
SELECT tablespace_name sum ( blocks ) as free_blk trunc ( sum ( bytes ) /( ) ) as free_m max ( bytes ) / ( ) as big_chunk_k count () as num_chunks FROM dba_free_space GROUP BY tablespace_name;
( ) 监控数据库性能
运行bstat/estat生成系统报告或者使用statspack收集统计数据
( ) 检查数据库性能 记录数据库的cpu使用 IO buffer命中率等等
使用vmstat iostat glance top等命令
( ) 日常出现问题的处理
每周的工作
( ) 监控数据库对象的空间扩展情况
根据本周每天的检查情况找到空间扩展很快的数据库对象 并采取相应的措施
删除历史数据
扩表空间alter tablespace add datafile size
调整数据对象的存储参数next extent pct_increase
( ) 监控数据量的增长情况
根据本周每天的检查情况找到记录数量增长很快的数据库对象 并采取相应的措施
删除历史数据
扩表空间alter tablespace add datafile size
( ) 系统健康检查
检查以下内容:
init ora controlfile redo log file archiving sort area size tablespace(system temporary tablespace fragment) datafiles(autoextend location) object(number of extent next extent index) rollback segment logging &tracing(alert log max_dump_file_size sqlnet)
( ) 检查无效的数据库对象
col owner for a col object_name for a SELECT owner object_name object_type FROM dba_objects WHERE status= INVALID ;
( ) 检查不起作用的约束
SELECT owner constraint_name table_name constraint_type status FROM dba_constraints WHERE status = DISABLED AND constraint_type = P ;
( ) 检查无效的trigger
SELECT owner trigger_name table_name status FROM dba_triggers WHERE status = DISABLED ;
每月的工作
( ) Analyze Tables/Indexes/Cluster
yze table estimate statistics sample percent;
( ) 检查表空间碎片
根据本月每周的检查分析数据库碎片情况 找到相应的解决方法;
( ) 寻找数据库性能调整的机会
比较每天对数据库性能的监控报告 确定是否有必要对数据库性能进行调整;
( ) 数据库性能调整
如有必要 进行性能调整;
( ) 提出下一步空间管理计划
lishixinzhi/Article/program/Oracle/201311/18051(1)数据库备份恢复。
(2)数据库问题解决。(比如等待事件,宕机等)
(3)数据库优化。
(4)数据库语句优化。
(5)数据库调整。(比如 *** 作系统调整后,数据库怎么调整,修改时间,数据库升级等)
(6)数据库监控。
(7)sql语句和相关存储过程的编写。。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)