1.企业管理器
Oracle数据库控制台(Oracle Database Control)
Oracle网格控制台
EM网格控制台的安装与数据库安装是分离的,要求有一个仓库数据库,一个庞大的内存区,并且需要单独定价和颁发许可。
如果您想使用实时应用集群(RAC)和Data Guard管理的GUI,则需要使用EM网格控制台。
2.数据库的动态配置
ORALCE DATABASE 10G发布了218个参数,还有若干未发布的参数(以下划线开头)。
仅针对会话的参数:
HASH_AREA_SIZE
OLAP_PAGE_POOL_SIZE
SORT_AREA_RETAINED_SIZE
SORT_AREA_SIZE
tracefile_identifier
nls_language
nls_territory
nls_sort
nls_date_language
nls_date_format
nls_currency
nls_numeric_characters
nls_iso_currency
nls_calendar
nls_time_format
nls_timestamp_format
nls_time_tz_format
nls_timestamp_tz_format
nls_dual_currency
nls_comp
db_file_name_convert
session_cached_cursors
parallel_min_percent
sql_version
--select * from v$parameter2 t where t.ISSYS_MODIFIABLE='FALSE' AND T.ISSES_MODIFIABLE='TRUE';
--ISSYS_MODIFIABLE:FALSE非实例参数,IMMEDIATE立即生效,DEFERRED重启实例后生效
--ISSES_MODIFIABLE:TRUE/FALSE,是否可以使用ALTER SESSION修改
3.数据库体系结构与可用性
3.1表和索引的分区
表的分区:略
局部索引分区:一个局部索引的结构由其对应的分区表决定
create index ws_orders_cust_id_idx on woodscrew_orders(cust_id) local;
全局索引分区:独立的
create index ws_orders_cust_id_idx on woodscrew_orders(cust_id) tablespace ws_app_idx
global
partition by hash(cust_id)
(partition p1,partition p2);
介质恢复可以隔离到一个单独分区上进行
3.2索引组织表
如果主键是多列的组合,那么IOT还允许对关键字进行压缩。
IOT分区:
create table woodscrew_orders_new (
ord_id number not null,
ord_date date,
cust_id number not null,
scr_id number not null,
ord_cnt number,
warehouse_id number not null,
region varchar2(20),
constraint pk_wdscr_orders primary key (ord_id,ord_date))
partition by range(ord_date) ...
;
3.3物化视图
反复强调高可用性数据库管理员的一句经验之谈总是有必要的:可用性的定义既关系到数据库本身,也关系到终端用户的感觉。
从本质上讲,这说明性能与数据库正常运行时间对于可用性而言是同等重要的。
从某种角度上说,物化视图提供了与IOT相同类型的可用性,因为它们都不能阻止服务中断的发生,但是去提高了性能。
物化视图实际上是将来自主表(或多个表)的数据子集重新创建。当创建一个物化视图时,您不仅要创建查询,而且还要基于
物化视图的标准创建一个新表,用来存放来自主表的数据行。
物化视图是Oracle中过去称为快照的数据库对象的逻辑发展。物化视图可根据基表进行刷新,所有新添加的行和行的变更会从
基表传播至物化视图。刷新可分为完全刷新和快速刷新,完全刷新会完全重建整个物化视图,而快速刷新仅更新自上次刷新以来
新添加的行或发生变更的行。
快速刷新需要创建物化视图日志,物化视图日志是一种在基表上生成的单独对象。只要对基表执行DML操作,物化视图日志就会
随之进行更新,可以周期性地检查物化视图日志来获取变更,并将变更传播至物化视图,然后再清除日志的相关记录。
物化视图也可用于分布式数据库。可以通过数据库链接在远程数据库上生成物化视图,并根据主表对其进行刷新。
*物化视图可以在表、分区表、索引组织表和分区的索引组织表上创建。此外,还可以对物化视图进行分区,这样可以在刷新物化
视图时并行执行,从而提高性能。
(1)创建物化视图
--在基表上建立物化视图日志
create materialized view log on ws_app.woodscrew
tablespace ws_app_data;
create materialized view log on ws_app.woodscrew_orders
tablespace ws_app_data;
grant create materialized view to WS_APP;
create materialized view ws_app.cust_ws_order_mv
pctfree 0 tablespace ws_app_data
storage (initial 64k next 64k pctincrease 0)
parallel
build immediate
refresh on demand
--refresh on commit --基表commit后立即刷新
enable query rewrite as --查询重写
select w.scr_type,w.head_config,wo.cust_id,wo.ord_cnt,wo.scr_id
FROM ws_app.woodscrew_orders wo,ws_app.woodscrew w
where w.scr_id=wo.scr_id
and wo.cust_id=2002;
--物理视图的段类型是表段
select * from user_segments s where s.segment_name='CUST_WS_ORDER_MV';
(2)重询重写
物化视图最引入注目的特性在于,当一个对基表的查询与物化视图匹配时,Oracle基于代价的优化器能够自动地使用物化视图来代替基表进行查询。
这种功能称为查询重写(query rewrite),它也是可以使用的别一种HA特性---但它不是传统意义上的高可用性策略。查询重写可以动态地实现物化
视图,无需重建应用程序代码或修改用户行为。
开启查询重写功能:
alter session set query_rewrite_enabled=true;
alter system set query_rewrite_enabled=true;
还可以在物化视图上,通过使用ALTER或CREATE命令来为特定物化视图开启查询重写。
(3)摘要顾问
Oracle 9i中的摘要顾问(Summary Advisor),是通过DBMS_OLAP实用程序实现的。
Oracle 10g提供了SQL访问顾问(SQL Access Advisor)。
他们为物化视图的创建提供建议。
3.4 联机重组
联机表重组可用于下列情况
*将表更改为索引组织表(反之亦然)
*将表改为分区表(反之亦然)
*添加或删除一列
*将表移至一个不同的表空间,或者更改存储参数
DBMS_REDEFINITION使用原始表上的物化视图日志以跟踪重定义过程完成后所发生的变更。
HA工作室:使用DBMS_REDEFINITION将表更改为分区的IOT
工作室说明
本工作室将woodscrew_orders表更改为一个分区的索引组织表,而同时woodscrew_orders表为OLTP操作保持联机状态。注意,如果在woodscrew_orders上创建
了一个物化视图,那么在进行联机重组之前需要删除其物化视图,因为带有物化视图的表不能进行联机重组。
步骤1 获得表的行数。这有助于确定重组第一阶段的完成时间。
select count(*) from woodscrew_orders;
步骤2 确认该表是可以进行重组的
begin
dbms_redefinition.can_redef_table('ws_app','woodscrew_orders',dbms_redefinition.cons_use_pk);
end;
/
步骤3 建立临时表
create table woodscrew_orders_new (
ord_id number not null,
ord_date date,
cust_id number not null,
scr_id number not null,
ord_cnt number,
warehouse_id number not null,
region varchar2(20),
constraint pk_wdscr_orders primary key (ord_id,ord_date))
partition by range(ord_date)
( partition values less than (to_date('2003-10-01','yyyy-mm-dd')),
partition values less than (to_date('2003-11-01','yyyy-mm-dd')),
partition values less than (to_date('2003-12-01','yyyy-mm-dd')),
partition values less than (to_date('2004-01-01','yyyy-mm-dd'))
)
;
步骤4 开始重组过程。由于我们没有映射任何列,因而我们只需指定模式、原始表和临时表
BEGIN
DBMS_REDEFINITION.START_REDEF_TABLE('ws_app','woodscrew_orders','woodscrew_orders_new',null,dbms_redefinition.cons_use_pk);
END;
/
步骤5 自动地重建所有表的依赖关系(索引、触发器等)。
declare
out_pl PLS_INTEGER;
BEGIN
DBMS_REDEFINITION.copy_table_dependents(uname => 'ws_app',orig_table => 'woodscrew_orders',int_table => 'woodscrew_orders_new',num_errors => out_pl);
END;
/
步骤6 在建立依赖对象时,根据累积的数据量,可能需要根据来自后台生成的物化视图日志的数据执行一次刷新。
BEGIN
DBMS_REDEFINITION.SYNC_INTERIM_TABLE('ws_app','woodscrew_orders','woodscrew_orders_new');
END;
/
步骤7 对原始表加锁,结束对临时表进行的最后同步操作,然后交换两表的表名,从而完成重组过程
BEGIN
DBMS_REDEFINITION.FINISH_REDEF_TABLE('ws_app','woodscrew_orders','woodscrew_orders_new');
END;
/
步骤8 完成最后一步后,就可以删除临时表了----也就是我们示例中的woodscrew_orders_new表。这其实是被重命名了的原始表
4.LogMiner:事务析取
LogMiner用到的包:dbms_logmnr_d,dbms_logmnr(用sys用户执行)
LogMiner包的安装脚本:rdbms/admin/dbmslm.sql及dbmslmd.sql
HA工作室:从SQL接口配置和使用LogMiner
步骤1 打开数据库的追加日志,以获得完整的事务
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;
步骤2 切换日志文件,然后执行事务删除
connect / as sysdba
alter system switch logfile;
connect ws_app/ws_app
delete from woodscrew;
commit;
connect / as sysdba
alter system switch logfile;
select name from v$archived_log;
步骤3 将我们刚生成的新日志文件添加到LogMiner列表中
execute dbms_logmnr.add_logfile(LogFileName => '/u02/oradata/...',Options => DBMS_LOGMNR.NEW);
步骤4 为LogMiner指定将要使用的联机目录。如果源数据库处于打开且可用的状态,那么它也可用
execute dbms_logmnr.start_logmnr(Options => dbms_logmnr.DICT_FROM_ONLINE_CATALOG);
步聚5 在V$LOGMNR_CONTENTS中查询有关删除事务的信息。
select username,sql_redo,sql_undo
from v$logmnr_contents
where username='WS_APP' and operation='DELETE';
应用场景:如果必对数据库进行闪回,并且其中有丢失的事务,那么闪回时间点后所产生的归档日志可以用来挖掘丢失的事务,
从而使这些丢失的事务可以重新执行。
如果需要挖掘未处于当前状态的归档日志,那么需要在一个简的文件中生成LogMiner字典,而不是使用联机目录,这需要使用DBMS_LOGMNR_D包并增加一个步骤:
execute dbms_logmnr_d.build('dictionary.ora','/u02/oradata/','dbms_logmnr_d.store_in_flat_file);
5. 可传输表空间
Transportable Tablespace,TTS
可传输表空间可以用来将某数据库上一个表空间的一组数据文件复制,并将该空间插入另外一个数据库。
5.1 概述
步骤1:
确定传输集合。可以使用DBMS_TTS包来确保表空间集合传输条件。
EXECUTE DBMS_TTS.TRANSPORT_SET_CHECK('WDSCRORD_SEP_2003,WDSCRORD_OCT_2003,WDSCRORD_NOV_2003,WDSCRORD_DEC_2003',TRUE);
SELECT * FROM TRANSPORT_SET_VIOLATIONS;
步骤2 将表空间变为只读
步骤3 导出表空间的元数据
可以使用 EXP或EXPDP
步骤4 将数据文件复制到新的位置
步骤5 导入元数据
5.2 相关限制
不能传输SYSTEM表空间或其内容。这意味着无法将TTS用于PL/SQL、触发器或视图,这些必须用导出程序进行移动。
源数据库和目标数据库必须具有相同的字符集和自然语言集
不能传输带有物化视图的表,除非其物化视图也同时位于生成的传输集合中
如果没有传输整个表,就不能传输一个表的一个分区
5.3 跨平台的可传输表空间
在Oracle Database 10g中,TTS可以在多个不同平台间传输表空间。
允许跨平台传输的操作系统是有限的,您可以查询任何一个Oracle Database 10g的数据库来查看其支持的操作系统:
COLUMN PLATFORM NAME FORMAT A30
SELECT * FROM V$TRANSPORTABLE_PLATFORM;
请注意ENDIAN_FORMAT列。如果两个平台的ENDIAN相同,那么在它们之间传输表空间就与相同平台间传输是一样的。
如果ENDIAN_FORMAT列不同,需要使用RMAN转换数据文件。
除ENDIAN格式外还有一个别外的新限制,就是在平台间只能传输Oracle Database 10g的数据文件。
5.4 HA工作室:将表空间从Solaris操作系统传输到Linux操作系统
步骤1
connect / as sysdba
execute dbms_tts.transport_set_check('wdscrord_sep_2003',true);
select * from transport_set_violations;
步骤2 设置表空间为只读
alter tablespace wdscreord_sep_2003 read only;
步骤3 导出元数据。注意,我们没有指定约束。我们必须在新数据库的表上重建主键
exp file=/u01/../ws_sep_dat.dmp transport_tablespace=y constraints=n tablespaces=wdscrord_sep_2003
--expdp语法
expdp userid=system/oracle directory=DP_DIR transport_tablespaces=ws_app_data,ws_app_idx dumpfile=ws_app_data.dmp
...
username: / as sysdba
步骤4 使用RMAN将数据文件转换为Linux移植所需的little endian
convert tablespace wsscrord_sep_2003 to platform 'Linux IA(32-BIT)'
format ='/u01/.../wscrord_sep_2003_for_LNX.dbf';
步骤5 将数据文件移植到Linux系统上。
步骤6 将所表空间设置为读写模式
alter tablespace wdscrord_sep_2003 read write;
步骤7 在目标系统上,志入数据文件的元数据
imp file=/u01/.../ws_sep_dat.dmp transport_tablespace=y tablespaces=wdscrord_sep_2003 datafiles='/u01/.../wscrord_sep_2003.dbf' tts_owners=(ws_app)
步骤8 设置新表空间为读写模式
--参考
expdp userid=system/oracle@db131 directory=DP_DIR transport_tablespaces=ws_app_data,ws_app_idx dumpfile=ws_app_data.dp
impdp userid=system/uprr directory=DP_DIR transport_tablespaces=(ws_app_data,ws_app_idx) dumpfile=ws_app_data.dp TRANSPORT_DATAFILES='D:oracleproduct10.1.0oradataorclws_app_data01.dbf,D:oracleproduct10.1.0oradataorclws_app_idx01.dbf'
5.5 测试:将WINDOWS(ORACLE DATABASE 10.1G)上的表空间传输到LINUX(ORACLE DATABASE 10.2G)
--第一步:确认是否可以传输表空间到目标库
--确认源/目标库的版本(目标库的版本不能低于源库)
select * from v$version;
--确认源/目标库所在平台
select platform_name from v$database;
--确认源/目标库 支持的表空间传输平台
select * from transport_set_violations;
--源库与目标库的字符集和自然语言集要相同
select * from nls_database_parameters
--查看是否存在冲突
execute dbms_tts.transport_set_check('tablespacename',true);
select * from transport_set_violations;
--在源库建立测试表空间-------------------------------------------
--WINDOWS
--DROP TABLESPACE ts_transport INCLUDING CONTENTS AND DATAFILES;
alter system set db_8k_cache_size=4m;
create tablespace ts_transport datafile 'd:oraclets_transport.dbf' size 5m BLOCKSIZE 8K;--本实验中8K不是标准块
create user utran
identified by "utran";
-- Grant/Revoke role privileges
grant connect to utran;
grant resource to utran;
-- Grant/Revoke system privileges
grant create materialized view to utran;
grant unlimited tablespace to utran;
create table t_tran
(c1 date) tablespace ts_transport;
insert into t_tran values(sysdate);
insert into t_tran values(sysdate);
insert into t_tran values(sysdate);
insert into t_tran values(sysdate);
insert into t_tran values(sysdate);
commit;
-------------------------------------------------------------------
--第二步:生成元数据文件
alter tablespace ts_transport read only;
exp file=e:workts_transport.dmp transport_tablespace=y constraints=n tablespaces=(ts_transport)
--如果是跨平台的,数据文件需要用RMAN转
convert tablespace wsscrord_sep_2003 to platform 'Linux IA(32-BIT)'
format ='/u01/.../wscrord_sep_2003_for_LNX.dbf';
--第三步:将元数据文件及表空间的数据文件传到目标主机
--第四步:目标库的导入
create user utran
identified by "utran";
-- Grant/Revoke role privileges
grant connect to utran;
grant resource to utran;
-- Grant/Revoke system privileges
grant create materialized view to utran;
grant unlimited tablespace to utran;
imp file=/home/oracle/dp_dir/ts_transport.dmp transport_tablespace=y tablespaces=ts_transport datafiles='/home/oracle/db/TS_TRANSPORT.DBF' tts_owners=(utran)
alter tablespace TS_TRANSPORT read write;
测试小结:
(1) 10.2向10.1的表空间传输失败了,10.1到10.2成功
(2)非标准块问题:如果源表空间的数据文件块尺寸与目标库的标准块尺寸不一样,那么就需要在目标库分配对应尺寸的数据块高速缓冲池
(3)在目标库需要手动创建用户
(4)表空间传输操作需要使用SYS权限
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7901922/viewspace-1059678/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7901922/viewspace-1059678/