一、先决条件
尽量保证所有表都具有主键或者唯一索引,当然也可部分无伤大雅的表也可以没有,
但要保证表中可以确定出来一条唯一的记录。
二、数据库准备阶段
1、环境变量(源和目标都要)
####################################
export PATH
ORACLE_SID=test
ORACLE_BASE=/opt/app/oracle
ORACLE_HOME=$ORACLE_BASE/oracle/product/10.2.0/db_1
PATH=$PATH:$ORACLE_HOME/bin
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:$LD_LIBRARY_PATH
export ORACLE_SID ORACLE_BASE ORACLE_HOME PATH LD_LIBRARY_PATH
export NLS_LANG="Simplified Chinese_china".ZHS16GBK
stty erase ^H
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
alias ggsci='rlwrap /opt/app/goldenGate/ggsci'
#####################################
2、需排除的表
#####################################
ST_USER_NAME
TEST
TMP_PROJECT_ID
TMP_TICKET_ID
3、无主键的表
####################################
M_MANAGER_ROLE
M_ROLE_AUTHORITY
####################################
4、需要同步的Schemas
####################################
TC258
PAYCENTRE
####################################
三、先决条件
1、确定归档模式已打开,如果没有打开按以下步骤进行(源和目标都要一样)
#########################################
mkdir /opt/app/oracle/oraArchive
sqlplus /nolog
conn /as sysdba
startup mount;
alter database archivelog;
alter system set log_archive_dest_1='location=/opt/app/oracle/oraArchive';
alter system set log_archive_dest_state_1=enable;
alter database open;
archive log list;
##########################################
2、开启最小日志功能
###########################################
##最小附加日志模式
##强制日志模式
##强制重做日志记录主键值
alter database add supplemental log data;
Alter database force logging;
alter database add supplemental log data (primary key,unique,foreign key) columns;
##以下是查询状态
select supplemental_log_data_min from v$database;
select force_logging from v$database;
select supplemental_log_data_min,supplemental_log_data_pk,
supplemental_log_data_ui from v$database;
############################################
四、安装GoldenGate
1、 下载GoldenGate
在以下地址下载对应版本
http://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html
2、 创建GoldenGate安装目录
mkdir /opt/app/goldenGate/
3、 直接解压到压缩文件到/opt/app/goldenGate目录即安装完成
4、 配置GoldenGate(源与目标一样)
[oracle@oracle01 goldenGate]$ ./ggsci
GGSCI> CREATE SUBDIRS
GGSCI>edit param mgr
#######################
port 7801
dynamicportlist 7802-7820
AUTOSTART ER * ##在目标机器上面删除这一行
AUTORESTART ER *, RETRIES 4, WAITMINUTES 4
STARTUPVALIDATIONDELAY 5
PURGEOLDEXTRACTS /opt/app/goldenGate/dirdat/*, USECHECKPOINTS, MINKEEPHOURS 2
###########################
保存
GGSCI>exit
五、配置源GoldenGate
1、 配置提取进程(按scheams划分)
############################################
GGSCI>add extract tc258,tranlog,begin now
GGSCI>add extract pay,tranlog,begin now
############################################
GGSCI>edit param tc258
########################
extract tc258
userid system@test,password oracle
exttrail /opt/app/goldenGate/dirdat/la
dynamicresolution
gettruncates
tableexclude tc258.ST_USER_NAME;
tableexclude tc258.TEST;
tableexclude tc258.TMP_PROJECT_ID;
tableexclude tc258.TMP_TICKET_ID;
table tc258.*;
#########################
GGSCI>edit param pay
########################
extract pay
userid system@test,password oracle
exttrail /opt/app/goldenGate/dirdat/lb
dynamicresolution
gettruncates
table paycentre.*;
#########################
GGSCI>ADD EXTTRAIL /opt/app/goldenGate/dirdat/la, EXTRACT tc258
GGSCI>ADD EXTTRAIL /opt/app/goldenGate/dirdat/lb, EXTRACT pay
2、添加DataPump 进程
GGSCI>add extract P-tc258,exttrailsource /opt/app/goldenGate/dirdat/la,begin now
GGSCI>add extract P-pay,exttrailsource /opt/app/goldenGate/dirdat/lb,begin now
GGSCI>edit param p-tc258
###############################
extract p-tc258
userid system,password oracle
rmthost 192.168.242.137,mgrport 7801
rmttrail /opt/app/goldenGate/dirdat/ra
PASSTHRU
gettruncates
table tc258.*;
################################
GGSCI>edit param p-pay
###############################
extract p-pay
userid system,password oracle
rmthost 192.168.242.137,mgrport 7801
rmttrail /opt/app/goldenGate/dirdat/rb
PASSTHRU
gettruncates
table paycentre.*;
################################
2、 添加远端队列
GGSCI>add rmttrail /opt/app/goldenGate/dirdat/ra extract p-tc258
GGSCI>add rmttrail /opt/app/goldenGate/dirdat/rb extract p-pay
六、配置源expdp 数据泵(源与目标都要一样)
1、 创建目录
mkdir /opt/app/oracle/oraExpdp
2、 执行SQL
CREATE OR REPLACE DIRECTORY
EXPDP AS
'/opt/app/oracle/oraExpdp';
GRANT READ, WRITE ON DIRECTORY EXPDP TO SYSTEM WITH GRANT OPTION;
七、同步源数据库到目标数据库
1、 启动GoldenGate
GGSCI (oracle01) 2> start mgr
2、 查询SCN号
3、 备份Scheams数据
expdp system/oracle DIRECTORY=expdp DUMPFILE=export.dmp SCHEMAS=tc258,paycentre FLASHBACK_SCN=688187 LOGFILE=export.log
4、 上传到目标机器/opt/app/oracle/oraExpdp目录
scp /opt/app/oracle/oraExpdp/export.dmp oracle@192.168.242.137:/opt/app/oracle/oraExpdp/
5、 在目标创建相关的表空间
1、 TC258
CREATE TABLESPACE tc258_data LOGGING DATAFILE '/opt/app/oracle/oradata/test/tc258_data01.dbf' SIZE 100M AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED;
CREATE TEMPORARY TABLESPACE tc258_temp TEMPFILE '/opt/app/oracle/oradata/test/tc258_temp01.dbf' SIZE 100M AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED;
2、 PAYCENTRE Scheam
CREATE TABLESPACE PAYCENTRE_DATA DATAFILE '/opt/app/oracle/oradata/test/paycentre_data01.dbf' SIZE 100M AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED;
CREATE TEMPORARY TABLESPACE PAYCENTRE_TEMP TEMPFILE '/opt/app/oracle/oradata/test/paycentre_temp01.dbf' SIZE 100M AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED;
3、 执行导入操作
impdp system/oracle DIRECTORY=expdp DUMPFILE=export.dmp SCHEMAS=tc258,paycentre LOGFILE=export.log
八、配置目标服务器
1、 配置检查点
GGSCI (BakOracle) 1> dblogin,userid system password oracle
GGSCI (BakOracle) 2> add checkpointtable tc258.checkpoint
GGSCI (BakOracle) 3> add checkpointtable paycentre.checkpoint
GGSCI (BakOracle) 4> edit params ./GLOBALS
############ file
checkpointtable tc258.checkpoint
checkpointtable paycentre.checkpoint
############ end
2、 创建日志目录
mkdir /opt/app/goldenGate/dirlog/
3、 配置复制进程
add replicat tc258 exttrail /opt/app/goldenGate/dirdat/ra,begin now,checkpointtable tc258.checkpoint
add replicat pay exttrail /opt/app/goldenGate/dirdat/rb,begin now,checkpointtable paycentre.checkpoint
4、 编辑复制进程配置文件
GGSCI (BakOracle) 8> edit param tc258
########## file
replicat tc258
userid system@test,password oracle
assumetargetdefs
discardfile /opt/app/goldenGate/dirlog/repl-tc258.log,append,megabytes 100
gettruncates
map tc258.*, target tc258.*;
########## end
GGSCI (BakOracle) 9> edit param pay
######### file
replicat pay
userid system@test,password oracle
assumetar
以管理员身份登录数据库
创建用户:create user [username] identified by [password];
赋予登录权限:grant create session to [username];
赋予建表权限:grant create table to [username];
赋予表空间使用权限:grant unlimited tablespace to [username];
用户拥有建表权限,相应拥有增删查改权限
查看用户权限:select * from user_sys_privs;
撤销登录权限:revoke create session to [username];
撤销建表权限:revoke create table from [username];
撤销表空间使用权限:revoke unlimited tablespace from [username];
赋予所有用户建表权限:grant create session to public;
赋予用户当前表查询权限:grant select on [tablename] to [username];
赋予用户当前表所有权限:grant all on [tablename] to [username];
撤销用户当前表查询权限:revoke select on [tablename] from [username];
撤销用户当前表所有权限:revoke all on [tablename] from [username];
赋予用户当前表当前列更新权限:grant update ([column]) on [tablename] to [username];
赋予用户当前表当前列插入权限:grant insert ([column]) on [tablename] to [username];
系统权限传递:
grant alter table to [username] with admin option;
对象权限传递:
grant select on [tablename] to [username] with grant option;
------------------------------------------------------------------------------------
grant create session,create table,create view,create any index to [username];
grant unlimited tablespace to [username];
------------------------------------------------------------------------------------
本文链接
表是在行和列中存储数据的基本结构。而且,就如同Oracle向数据库整体增加特性一样,随着时间失衡,它也增强了表的概念,以适应更加复杂的应用要求。在本章中,我们将要讨论:
- Oracle中最常用的表类型,以及用户为什么要使用各种类型。
- 用户在Oracle中将会遇到的表特性,它们可以影响表的操作方式。
- 怎样ALTER、DROP和TRUNCATE表
在Oracle中,存储数据从没有如此容易或如此高效。除了对SQL优化器进行了改进外,数据库内核、数据库管理配置选项等也都得到了强化。Oracle已经发布了新类型的表,来适应各种类型的数据存储、数据访问以及性能要求。
对于所有类型的表,Oracle都允许开发人员和管理员规定各种表属性,它们会确定如下内容:
- 哪一个表空间包含表
- Oracle怎样将表物理存储在磁盘上
- 当从磁盘读取表数据的时候,Oracle怎样将它们与内存映射
- Oracle怎样控制表上特定操作的日志
新的表类型还能够在开发和管理解决方案的时候节省用户时间。随着用户掌握不同类型的可用表,用户将会发现这些表可以满足那些使用堆存储的标准表之外的要求。这些要求过去通常要由处理问题的开发人员/或者管理员使用其它方式解决,但是因为Oracle的新表类型将会处理这些问题,所以就可以省去这些工作。
7.2 表类型7.2.1 堆表最基本的表类型就是堆表(Heap table)。术语堆是指数据在磁盘上随机存储的方式。一般来说,Oracle在将行写入数据块的时候不会考虑其它的行的存储位置。当向堆表插入行的时候,数据库会将数据写入第一个具有足够自由空间的段。当更新和删除行的时候,就会为新的插入提供可用空间。
为了展示堆表,我们将要模型化一个主要涉及信息技术领域的公司的培训和教育部门。
试验:建立堆组织的表(1) 我们将要建立的第一个是SUBJECTS,它给出了培训部门将要教授的课程类别。
2 subject_id number not null,
3 subject_name varchar2(30) not null,
4 description varchar2(4000)
5 )
6 tablespace users
7 /
表已创建。
就如用户所见,我们已经建立了3列,名称分别为SUBJECT_ID、SUBJECT_NAME、DESCRIPTION。这些列分别具有数据类型NUMBER、VARCHAR2(30)和VARCHAR2(4000)。注意,要使用NOT NULL子句来确保SUBJECT_ID和SUBJECT_ANME具有值。
(2) 现在已经建立SUBJECTS表,我们将要使用ALTER TABLE命令,使SUBJECT_ID列成为主键:
2 add constraint pk_subjects
3 primary key(subject_id)
4 /
表已更改。
(3) 建立了SUBJECTS表之后,我们将会继续建立一个COURSES的子表,它将会存储SUBJECTS表中各个学科的课程。
2 course_id number not null,
3 course_name varchar2(60) not null,
4 subject_id number not null,
5 duration number(2),
6 skill_lvl varchar2(12) not null
7 )
8 tablespace users
9 /
表已创建。
在这个例子中,我们已经建立了COURSES列的数据类型。
(4) 现在我们需要定义约束。
2 add constraint pk_courses
3 primary key(course_id)
4 /
表已更改。
其次,我们希望COURSES的SUBJECT_ID列能够成为引用SUBJECTS表的外键:
2 add constraint fk_course_subj
3 foreign key(subject_id) references subjects(subject_id)
4 /
表已更改。
最后,我们想要在SKILL_LVL列上实现一个检查约束,以确保各行中这个列的唯一可能值是BEGINNER、INTERMEDIATE或ADVANCED;
2 add constraint ck_level check(
3 skill_lvl in(