文档库 最新最全的文档下载
当前位置:文档库 › ORACLE数据库复制

ORACLE数据库复制

ORACLE数据库复制
ORACLE数据库复制

ORACLE数据库高级复制

一、数据库复制概述

复制,顾名思义就是将数据库中的数据拷贝到不同物理地点的数据库中。

在很多生产环境中,经常遇到一些大量得数据,这些数据只用作查询统计功能。例如:历史告警,历史性能指标,历史事件,等等。这种数据的特点是:只读不写,数据量相当大,一旦查询大结果集的数据时,对数据库的IO,内存缓存占用相当大,会严重影响同一个数据库的其他会话的操作,表现为整个数据库反应迟缓,业务功能不可用。采用复制技术后,将这些大型数据复制到另外一个数据库中,对这些大数据的查询统计操作放在另外的一台数据库服务器上进行,即使受影响,也只是影响局部的查询统计功能,其他正常的业务处理不受影响。

但是,使用复制技术的话,意味着一个系统中,至少存在两个数据库(集群的数据库也当成一个数据库),对应的应用程序也需要建立多个数据库连接,能够根据业务需要,访问不同的数据库。

ORACLE数据库自身提供有复制功能,只需要进行配置即可实现。

ORACLE提供有三种复制技术:

高级复制(Advanced Replication)

流复制(Streams Replication)

备库(Dataguard)

备库的方式,就是数据库对数据库的备份方式,主要是解决容灾的,不讨论此话题。

流复制主要是利用ORACLE的归档日志,进行增量备份来实现的,不仅可以配置只复制某些表,还可以配置仅复制某些表上的ddl或dml。可以复制到表,用户,数据库级别。

高级复制主要是基于触发器的原理来触发数据同步的,因此,高级复制无法实现用户,数据库级别的对象复制,只能做些表、索引和存储过程的复制。

如果出于容灾整个数据库的考虑,高级复制相当复杂,而且并不一定能做好,流复制的配置相对简单。流复制是后来产生的复制技术,是基于日志挖掘技术实现的,对数据库的影响较低。但在稳定性方面较差,实时性没有高级复制强(因为高级复制是基于触发器的)。如果系统意外的话,流复制的恢复将会需要较长时间,特别是意外时间越长,恢复时间成倍增长。

下面使用相同的环境,分别对两种复制功能进行配置介绍,并进行性能压力测试比较。

二、环境描述

三、高级复制配置过程:

高级复制API函数参考网址:

https://www.wendangku.net/doc/da1045598.html,/docs/cd/B19306_01/server.102/b14227/rarrcatpac.htm

1. 配置相互访问:

在主备机的tnsnames.ora里,都分别添加数据库连接字符串,使两个数据库之间可以互相访问。

master =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.2.11.184)(PORT = 1521))

(CONNECT_DATA =

(SERVICE_NAME = ora102)

)

)

backup =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.2.11.218)(PORT = 1521))

(CONNECT_DATA =

(SERVICE_NAME = ora218)

)

)

(3)添加完成后,在主备机上分别测试一下数据库的访问是否正常

tnsping master

tnsping backup

出现“OK (xx 毫秒)”,就正常了。

(1)用system身份登录主机数据库

sqlplus system/manager1

SQL>

alter database rename global_name to https://www.wendangku.net/doc/da1045598.html,;

(2)用system身份登录备机数据库:

sqlplus system/manager1

SQL>

alter database rename global_name to https://www.wendangku.net/doc/da1045598.html,;

(3)用system身份登录主机数据库

sqlplus system/manager1

SQL>

create public database link https://www.wendangku.net/doc/da1045598.html, using 'backup';

(4)用system身份登录备机数据库:

sqlplus system/manager1

SQL>

create public database link https://www.wendangku.net/doc/da1045598.html, using 'master';

(5)用system身份分别登录主备机数据库,测试数据库全局名称和公共的数据库链接

sqlplus system/manager1

SQL>

conn system/manager1@master

select * from global_name@master;

select * from global_name@https://www.wendangku.net/doc/da1045598.html,;

select * from global_name@backup;

select * from global_name@https://www.wendangku.net/doc/da1045598.html,;

conn system/manager1@backup

select * from global_name@master;

select * from global_name@https://www.wendangku.net/doc/da1045598.html,;

select * from global_name@backup;

select * from global_name@https://www.wendangku.net/doc/da1045598.html,;

2.在主备机上分别建好自己应用的数据库表,并赋好权限

sqlplus /nolog

SQL>

conn sys/manager1@master as sysdba

drop user ismc cascade;

create user ismc identified by ismc default tablespace users temporary tablespace temp;

grant connect, resource to ismc;

grant execute on sys.dbms_defer to ismc;

conn ismc/ismc@master

CREATE TABLE ORIG_REPT (

REPORT_ID NUMBER(5) primary key,

title varchar2(16),

info varchar2(16)

);

create sequence seq_rpt_id increment by 1 start with 1 maxvalue 100 cycle nocache;

conn sys/manager1@backup as sysdba

drop user ismc cascade;

create user ismc identified by ismc default tablespace users temporary tablespace temp;

grant connect, resource to ismc;

grant execute on sys.dbms_defer to ismc;

conn ismc/ismc@backup

CREATE TABLE ORIG_REPT (

REPORT_ID NUMBER(5) primary key,

title varchar2(16),

info varchar2(16)

);

--备机上不需要创建不需要的,所以,这里没有创建seq_rpt_id

3. 配置与复制相关的内容

(1)建立管理数据库复制的用户repadmin,并赋权。

SQL语句如下:

--用sys身份登录master数据库:

conn sys/manager1@master as sysdba

drop user repadmin cascade;

create user repadmin identified by repadmin default tablespace users temporary tablespace temp;

execute dbms_defer_sys.register_propagator('repadmin');

grant execute any procedure to repadmin;

execute dbms_repcat_admin.grant_admin_any_repgroup('repadmin');

grant comment any table to repadmin;

grant lock any table to repadmin;

execute DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (username => 'repadmin');

--用sys身份登录backup数据库:

conn sys/manager1@backup as sysdba

drop user repadmin cascade;

create user repadmin identified by repadmin default tablespace users temporary tablespace temp;

execute dbms_defer_sys.register_propagator('repadmin');

grant execute any procedure to repadmin;

execute dbms_repcat_admin.grant_admin_any_repgroup('repadmin');

grant comment any table to repadmin;

grant lock any table to repadmin;

execute DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (username => 'repadmin'); (2)在主备机上分别创建私有数据库链接。

SQL语句如下:

--用repadmin身份登录主机数据库。

conn repadmin/repadmin@master

create database link https://www.wendangku.net/doc/da1045598.html, connect to repadmin identified by repadmin; select * from global_name@backup;

select * from global_name@https://www.wendangku.net/doc/da1045598.html,;

--用repadmin身份登录备机数据库。

conn repadmin/repadmin@backup

create database link https://www.wendangku.net/doc/da1045598.html, connect to repadmin identified by repadmin; select * from global_name@master;

select * from global_name@https://www.wendangku.net/doc/da1045598.html,;

(3)在主备机上创建复制组zz_rept_group

SQL语句如下:

-- repadmin身份登录master

conn repadmin/repadmin@master

execute dbms_repcat.create_master_repgroup('zz_rept_group');

--创建的对象放在dba_repobject表中

(4)在复制组zz_rept_group里加入复制对象

SQL语句如下:

-- repadmin身份登录master

conn repadmin/repadmin@master

execute dbms_repcat.create_master_repobject(sname=>'ismc',oname=>'orig_rept', type=>'table',use_existing_object=>true,gname=>'zz_rept_group');

--sname 用户名称

--oname对象名称

-- type 复制对象类别:表,索引,同义词,触发器,视图,过程,函数,程序包,程序包体

-- use_existing_object true 使用在主复制节点已经存在的数据库对象

-- gname 主复制组名

--创建的对象放在dba_repobject表中

(5)生成复制对象支持,即通知给相关服务器

SQL语句如下:

-- 产生对数据库对象的复制支持

conn repadmin/repadmin@master

execute dbms_repcat.generate_replication_support('ismc','orig_rept','table');

(6)创建主复制节点,此步会将复制信息写入到备机数据库中

SQL语句如下:

-- repadmin登录master数据库,创建主复制节点

conn repadmin/repadmin@master

execute

dbms_repcat.add_master_database(gname=>'zz_rept_group',master=>'https://www.wendangku.net/doc/da1045598.html,', use_existing_objects=>true, copy_rows=>false, propagation_mode => 'asynchronous');

-- gname 主复制组名

--master 加入主复制节点的另一个数据库

--use_existing_object true表示用主复制节点已经存在的数据库对象

--copy_rows false表示第一次开始复制时不用和主复制节点保持一致

--propagation_mode 异步地执行

-- 确认复制的任务队列已经加入数据库的数据字典

--注意:如果此步报“ORA-23375数据库版本不兼容”问题,

--请在主备机上分别执行execute DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (username => 'repadmin');。然后,再执行此步。

(7)激活复制组,状态由quiesced改为normal

SQL语句如下:

--检查之前的状态

conn repadmin/repadmin@master

select gname, master, status from dba_repgroup;

conn repadmin/repadmin@backup

select gname, master, status from dba_repgroup;

--激活

conn repadmin/repadmin@master

execute dbms_repcat.resume_master_activity('zz_rept_group',true);

--过几秒后,再次检查的状态,注意,要过几秒,确保两边都激活成功

conn repadmin/repadmin@master

select gname, master, status from dba_repgroup; conn repadmin/repadmin@backup

select gname, master, status from dba_repgroup; (8)创建复制数据库的时间表

SQL语句如下:

--设置为1分钟一次,即1/1440天

--用repadmin身份登录master数据库:

conn repadmin/repadmin@master

begin

dbms_defer_sys.schedule_push (

destination => 'https://www.wendangku.net/doc/da1045598.html,',

interval => 'sysdate + 1/1440',

next_date => sysdate);

end;

/

begin

dbms_defer_sys.schedule_purge (

next_date => sysdate,

interval => 'sysdate + 1/1440',

delay_seconds => 0,

rollback_segment => '');

end;

/

commit;

--用repadmin身份登录backup数据库:

conn repadmin/repadmin@backup

begin

dbms_defer_sys.schedule_push (

destination => 'https://www.wendangku.net/doc/da1045598.html,',

interval => 'sysdate + 1/1440',

next_date => sysdate);

end;

/

begin

dbms_defer_sys.schedule_purge (

next_date => sysdate,

interval => 'sysdate + 1/1440',

delay_seconds => 0,

rollback_segment => '');

end;

/

commit;

(9)验证测试(增删改,这里只做增测试)

--验证测试

--用ISMC用户登录master:

conn ismc/ismc@backup

select * from orig_rept;

conn ismc/ismc@master

select * from orig_rept;

insert into orig_rept values (seq_rpt_id.nextval,'zz11_master','zz12_master'); commit;

select * from orig_rept;

--过一分钟后,在备机上查看

conn ismc/ismc@backup

select * from orig_rept;

4. 再额外增加复制表举例

根据前面的解释,这里就不解释了,提醒一下,要单步执行。语句中的一些停止服务,删除表之类的,在首次执行时,会报错,不用理会。

conn repadmin/repadmin@master

execute dbms_repcat.suspend_master_activity (gname =>'ismc_mg2');

execute dbms_repcat.DROP_MASTER_REPOBJECT(sname=>'ismc',oname=>'dept2', type=>'table',drop_objects=>false);

execute

dbms_repcat.drop_master_repgroup(gname=>'ismc_mg2',drop_contents=>TRUE,all_sites=>true) ;

conn ismc/ismc@master

drop table dept2;

create table dept2

(deptno number(2),

dname varchar2(14),

loc varchar2(13) );

alter table dept2 add constraint pk_dep_loc primary key ( deptno,loc );

commit;

conn ismc/ismc@backup

drop table dept2;

create table dept2

(deptno number(2),

dname varchar2(14),

loc varchar2(13) );

alter table dept2 add (constraint pk_dep_loc primary key ( deptno,loc ));

commit;

conn repadmin/repadmin@master

--execute dbms_repcat.suspend_master_activity (gname =>'ismc_mg2');

--execute dbms_repcat.DROP_MASTER_REPOBJECT(sname=>'ismc',oname=>'dept2', type=>'table',drop_objects=>false);

--execute

dbms_repcat.drop_master_repgroup(gname=>'ismc_mg2',drop_contents=>TRUE,all_sites=>true) ;

execute dbms_repcat.create_master_repgroup('ismc_mg2');

execute dbms_repcat.create_master_repobject(sname=>'ismc',oname=>'dept2', type=>'table',use_existing_object=>true,gname=>'ismc_mg2');

execute dbms_repcat.generate_replication_support('ismc','dept2','table');

execute

dbms_repcat.add_master_database(gname=>'ismc_mg2',master=>'https://www.wendangku.net/doc/da1045598.html,',use_existing_ objects=>true, copy_rows=>false, propagation_mode => 'asynchronous');

conn repadmin/repadmin@master

select gname, master, status from dba_repgroup;

conn repadmin/repadmin@backup

select gname, master, status from dba_repgroup;

conn repadmin/repadmin@master

execute dbms_repcat.resume_master_activity('ismc_mg2',true);

conn repadmin/repadmin@master

select gname, master, status from dba_repgroup;

conn repadmin/repadmin@backup

select gname, master, status from dba_repgroup;

5. 配置注意点

1. 数据库要具备高级复制功能(用system身份登录数据库,查看v$option视图,如果其

中Advanced replication为TRUE,则支持高级复制功能;否则不支持)。

2.为了减少配置出错,将数据库的系统参数global_names设为FALSE(缺省值),否则,

两边名字不一致,会不通过。

show parameters global_names

3.在进行复制前,要求主备机器上,具有相同的数据表结构。本文没有验证集群数据库的

复制,没有验证索引,过程,函数,触发器等等的同步。因为,在使用中,认为大型数据表的结构不会发生变化,索引在建表时就已经建立好。

4.上面提供的SQL操作步骤可以COPY到一个SQL文件中,但是,不要一下子直接全部执

行完,因为里边的有些步骤,是需要中间停顿的,是要等待主机将复制信息同步到备机上的。

5.在进行复制的数据表中,一定要有主键才具备复制条件。主键可以是一个或多个字段组

合。

6.两边的数据库要有相同的用户名和密码,否则,会报登录不了,导致于无法配置成功。

7.两边的数据库最好是相同的版本,否则,会报登录不了,这是因为有些版本会强制将密

码转换成大写再登录,因此,会导致于无法配置成功。

8.在创建repadmin用户时,要求执行execute

DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (username => 'repadmin');,否则,会报两边的数据库版本不兼容。

9.在运行generate_replication_support()时,如果报错“对象不存在或无效”,出现

此问题的原因是自己的用户没有被赋权(sys.dbms_defer)造成的,例如,给ismc用户赋权:grant execute on sys.dbms_defer to ismc;。在赋好权之后,需要先执行删除复制组(drop_master_repgroup)再创建(create_master_repgroup)的过程。

10.当挂起一个复制组时,与此复制组相关的数据表不能进行增删改数据的操作,还需要同

时运行dbms_repcat.DROP_MASTER_REPOBJECT这个过程的操作。

11.如果需要配置两个数据表的复制,基于上面的原因,建议创建两个复制组,而不要合并

在一个复制组里,否则,不利于后期的数据维护。

12.在删除复制对象时,一定要记得要先suspend_master_activity,执行挂起操作。否则,

需要来回的将主机上应该的操作,换到备机和主机上来回操作。

13.在操作过程中,可以在主备机上,用repadmin用户查看如下几个表的状态。

select * from dba_repsites;

select * from dba_repgroup;

select * from dba_repobject;

select * from user_jobs;

14.在配置好定期复制任务后,检查复制工作正常否,可以在repadmin 用户下查询

user_jobs

SQL>select job,this_date,next_date,what, broken from user_jobs;

正常的状态有两种:任务闲——this_date为空,next_date为当前时间后的一个时间值;任务忙——this_date不为空,next_date为当前时间后的一个时间值。异常状态也有两种:任务死锁——next_date为当前时间前的一个时间值;任务死锁——next_date为非常大的一个时间值,例如:4001-01-01。这可能因为网络中断照成的死

锁。解除死锁的办法:

$ps –ef|grep orale

找到死锁的刷新快照的进程号ora_snp*,用kill –9 命令删除此进程,然后进入repadmin 用户SQL>操作符下,运行命令:

SQL>exec dbms_job.run(job_number);

说明:job_number 为用select job from user_jobs where what like '%https://www.wendangku.net/doc/da1045598.html,%';命令查出的job编号,即找出PUSH信息给备机的那个JOB号。15.修改复制时间,只需要按照前面的“创建复制数据库的时间表”,修改好新的时间值之

后,重新执行一下即可,会立即生效。

16.在使用delete时,备机上相关的数据也会delete掉,但是,如果使用trancate命令

清表数据时,备机上的数据是不会被清掉的。这个可以用来将主表中不要的数据带来好处。

17.复制任务没有挂起,备机宕机,主机仍旧能够正常增删改数据,待备机运行后,会将期

间改变的数据同步到备机中。

18.撤销复制任务过程:

1)挂起复制任务:

conn repadmin/repadmin@master

execute dbms_repcat.suspend_master_activity (gname =>'zz_rept_group');

2)删除复制对象:

conn repadmin/repadmin@master

execute dbms_repcat.DROP_MASTER_REPOBJECT(sname=>'ismc',oname=>'orig_rept', type=>'table',drop_objects=>false);

3)删除复制组:

conn repadmin/repadmin@master

execute

dbms_repcat.drop_master_repgroup(gname=>'zz_rept_group',drop_contents=>TRUE ,all_sites=>true);

四、流复制配置过程:

流复制API函数参考网址:

https://www.wendangku.net/doc/da1045598.html,/docs/cd/B19306_01/appdev.102/b14258/d_strm_a.htm#CDEJFACB 1. 配置相互访问:

在主备机的tnsnames.ora里,都分别添加数据库连接字符串,使两个数据库之间可以互相访问。

master =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.2.11.184)(PORT = 1521))

(CONNECT_DATA =

(SERVICE_NAME = ora102)

)

)

backup =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.2.11.218)(PORT = 1521))

(CONNECT_DATA =

(SERVICE_NAME = ora218)

)

)

(3)添加完成后,在主备机上分别测试一下数据库的访问是否正常

tnsping master

tnsping backup

出现“OK (xx 毫秒)”,就正常了。

2. 主备机上查看原有参数

sqlplus /nolog

conn sys/manager1 as sysdba

show parameters global_names;

show parameters undo_retention;

show parameters job_queue_processes;

show parameters NLS_DATE_FORMAT;

show parameters Open_links;

show parameters Aq_tm_processes ;

show parameters utl_file_dir;

3. 主备机上修改参数

alter system set aq_tm_processes=2 scope=both;

alter system set global_names=true scope=both;

alter system set job_queue_processes=10 scope=both;

alter system set parallel_max_servers=20 scope=both;

alter system set undo_retention=3600 scope=both;

alter system set nls_date_format='YYYY-MM-DD HH24:MI:SS' scope=spfile;

alter system set streams_pool_size=128M scope=spfile;

alter system set utl_file_dir='*' scope=spfile;

alter system set open_links=4 scope=spfile;

4. 主备机上设置归档模式

--注意按照自己的系统修改文件的目录

alter system set log_archive_dest_1='location=/home/oracle/oracle/oradata/archive/arch' scope=spfile;

alter system set log_archive_start=TRUE scope=spfile;

alter system set log_archive_format='arch%t_%s_%r.arc' scope=spfile;

shutdown immediate;

startup mount;

alter database archivelog;

alter database open;

archive log list;

5. 在主机(源:master)上配置Supplemental loging:sqlplus sys/manager1@master

alter database add supplemental log data;

6. 改数据库全局名称,建公共的数据库链接

(1)用system身份登录主机数据库

sqlplus system/manager1

SQL>

alter database rename global_name to https://www.wendangku.net/doc/da1045598.html,;

(2)用system身份登录备机数据库:

sqlplus system/manager1

SQL>

alter database rename global_name to https://www.wendangku.net/doc/da1045598.html,;

(3)用system身份登录主机数据库

sqlplus system/manager1

SQL>

create public database link https://www.wendangku.net/doc/da1045598.html, using 'backup';

(4)用system身份登录备机数据库:

sqlplus system/manager1

SQL>

create public database link https://www.wendangku.net/doc/da1045598.html, using 'master';

(5)用system身份分别登录主备机数据库,测试数据库全局名称和公共的数据库链接

sqlplus system/manager1

SQL>

conn system/manager1@master

select * from global_name@master;

select * from global_name@https://www.wendangku.net/doc/da1045598.html,;

select * from global_name@backup;

select * from global_name@https://www.wendangku.net/doc/da1045598.html,;

conn system/manager1@backup

select * from global_name@master;

select * from global_name@https://www.wendangku.net/doc/da1045598.html,;

select * from global_name@backup;

select * from global_name@https://www.wendangku.net/doc/da1045598.html,;

7. 配置与复制相关的内容

(1)主备机上分别为strmadmin用户创建独立表空间

--请注意修改这里的文件路径及空间

conn system/manager1@master

CREATE TABLESPACE streams_tbs DATAFILE

'D:\oracle\product\10.2.0\oradata\ora102\streams_tbs.dbf'

SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

--请注意修改这里的文件路径及空间

conn system/manager1@backup

CREATE TABLESPACE streams_tbs DATAFILE

'D:\oracle\product\10.2.0\oradata\ora218\streams_tbs.dbf'

SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

(2)主备机上分别建立管理数据库复制的用户strmadmin,并赋权。

SQL语句如下:

--用sys身份登录master数据库:

conn sys/manager1@master as sysdba

drop user strmadmin cascade;

CREATE USER strmadmin IDENTIFIED BY strmadmin

DEFAULT TABLESPACE streams_tbs

QUOTA UNLIMITED ON streams_tbs;

GRANT DBA TO strmadmin;

BEGIN

DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(

grantee => 'strmadmin',

grant_privileges => true);

END;

/

--用sys身份登录backup数据库:

conn sys/manager1@backup as sysdba

drop user strmadmin cascade;

CREATE USER strmadmin IDENTIFIED BY strmadmin

DEFAULT TABLESPACE streams_tbs

QUOTA UNLIMITED ON streams_tbs;

GRANT DBA TO strmadmin;

BEGIN

DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(

grantee => 'strmadmin',

grant_privileges => true);

END;

/

(3)在主备机上分别创建私有数据库链接。

SQL语句如下:

--用strmadmin身份登录主机数据库。

conn strmadmin/strmadmin@master

create database link https://www.wendangku.net/doc/da1045598.html, connect to strmadmin identified by strmadmin; select * from global_name@backup;

select * from global_name@https://www.wendangku.net/doc/da1045598.html,;

--用strmadmin身份登录备机数据库。

conn strmadmin/strmadmin@backup

create database link https://www.wendangku.net/doc/da1045598.html, connect to strmadmin identified by strmadmin; select * from global_name@master;

select * from global_name@https://www.wendangku.net/doc/da1045598.html,;

8. 创建应用的数据库和用户表(主机上操作)

sqlplus /nolog

conn sys/manager1 as sysdba

drop user ismc cascade;

create user ismc identified by ismc default tablespace users temporary tablespace temp;

grant connect, resource to ismc;

conn ismc/ismc

CREATE TABLE ORIG_REPT (

REPORT_ID NUMBER(5) primary key,

title varchar2(16),

info varchar2(16)

);

create sequence seq_rpt_id increment by 1 start with 1 maxvalue 100 cycle nocache;

9. 在主备机上分别创建队列

9.1 创建Master流队列

--以strmadmin身份,登录主数据库。

connect strmadmin/strmadmin@master

begin

dbms_streams_adm.set_up_queue(

queue_table => 'master_queue_table',

queue_name => 'master_queue');

end;

/

9.2 创建Backup流队列

--以strmadmin身份,登录从数据库。

connect strmadmin/strmadmin@backup

begin

dbms_streams_adm.set_up_queue(

queue_table => 'backup_queue_table',

queue_name => 'backup_queue');

end;

/

如果不带参数,

conn strmadmin/strmadmin@master

EXEC DBMS_STREAMS_ADM.SET_UP_QUEUE();

conn strmadmin/strmadmin@backup

EXEC DBMS_STREAMS_ADM.SET_UP_QUEUE();

上面的命令则会创建一个队列缺省名:streams_queue,队列表缺省是:STREAMS_QUEUE_TABLE

队列存储的object类型是anaydata

可以用查询dba_queues,dba_queue_tables来检查:

SQL> select owner,queue_table,name from dba_queues where

owner='STRMADMIN';

OWNER QUEUE_TABLE NAME

---------------- ----------------------------------

---------------------------------------------

STRMADMIN STREAMS_QUEUE_TABLE STREAMS_QUEUE

STRMADMIN STREAMS_QUEUE_TABLE AQ$_STREAMS_QUEUE_TABLE_E

SQL> select owner,queue_table,object_type from dba_queue_tables where owner='STRMADMIN';

OWNER QUEUE_TABLE OBJECT_TYPE

----------------- ---------------------------------

-------------------------------

STRMADMIN STREAMS_QUEUE_TABLE SYS.ANYDATA

10. 在主机上创建Capture捕获进程:

--以strmadmin身份,登录主数据库。提醒一下,本文档以ismc 用户做示例。

connect strmadmin/strmadmin@master

begin

dbms_streams_adm.add_schema_rules(

schema_name => 'ismc',

streams_type => 'capture',

streams_name => 'capture_master',

queue_name => 'strmadmin.master_queue',

include_dml => true,

include_ddl => true,

include_tagged_lcr => false,

source_database => null,

inclusion_rule => true);

end;

/

PL/SQL procedure successfully completed.

可以通过dba_capture查看:

SQL> select CAPTURE_NAME,QUEUE_NAME,START_SCN,STATUS,CAPTURE_TYPE from dba_capture;

CAPTURE_NAME QUEUE_NAME START_SCN STATUS CAPTURE_TY

---------------------------- --------------------------

--------------- ------------ ----------

CAPTURE_master STREAMS_QUEUE 504733 DISABLED LOCAL

SQL>

alter session set nls_date_format='yyyy-mm-dd:hh24:mi:ss';

select * from ALL_CAPTURE_PREPARED_SCHEMAS;

SCHEMA_NAME TIMESTAMP SUPPLEME SUPPLEME SUPPLEME SUPPLEME

-------------------- --------------- -------------- --------------

------------- --------

ISMC 12-JUN-08 IMPLICIT IMPLICIT IMPLICIT NO

11. 将主机上的用户数据导到备机上:

导数据:

oracle@backup ~]$ impdp system/manager1 network_link=https://www.wendangku.net/doc/da1045598.html, schemas=ismc

Import: Release 10.2.0.2.0 - Production on Thursday, 12 June, 2008 17:47:59

Copyright (c) 2003, 2005, Oracle. All rights reserved.

.....

......

Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS Job "SYSTEM"."SYS_IMPORT_SCHEMA_01" successfully completed at 17:50:32

12. 在主机上创建Stream propagation流传播:

--以strmadmin身份,登录主数据库。

connect strmadmin/strmadmin@master

begin

dbms_streams_adm.add_schema_propagation_rules(

schema_name => 'ismc',

streams_name => 'master_to_backup',

source_queue_name => 'strmadmin.master_queue',

destination_queue_name => 'strmadmin.backup_queue@backup',

include_dml => true,

include_ddl => true,

include_tagged_lcr => false,

source_database => 'master',

inclusion_rule => true);

end;

/

--修改propagation休眠时间为0,表示实时传播LCR。

begin

dbms_aqadm.alter_propagation_schedule(

queue_name => 'master_queue',

destination => 'backup',

latency => 0);

eclipse如何连接oracle数据库、访问数据表并显示结果小结

总结eclipse中连接oracle数据库并访问其中的表: (这里我们用的是oracle10g) 为了防止把主要精力放在编程实现上而忽略小细节,我们可以先启动oracle 监听和oracleservice服务。 1 我们首先导入oracle 数据库驱动包:这里有两种方式:(1)把ojdbc14.jar包复制到当前项目的jar文件夹下,或新建一文件夹把ojdbc14.jar放到其下(在eclipse本项目上刷新一下,否则按下面添加时可能找不到),再project--------→properties---------→java build path--------→libraries-------→add jars找到ojdbc14.jar 点击ok. (2)project--------→properties---------→java build path--------→libraries-------→add externals jars找到ojdbc14.jar包,(本人的ojdbc14.jar是在目录E:\oracle\product\10.2.0\db_1\jdbc\lib 下)点击ok。 2 编写程序:可以归纳为6个小部分(1)装载并注册oracle数据库的jdbc驱动程序(2)建立与数据库的连接(3)创建statement对象(4)调用sql语句并执行,结果返回resultset对象(5)查看resultset对象中的记录(6)数据库操作完毕后,需要依次关闭ResultSet、Statement、Connection 对象。如下: Import java.sql.*; public class OracleTest { public static void main(String[] args) throws Exception{ //装载并注册oracle数据库的jdbc驱动程序 try { Class.forName("oracle.jdbc.driver.OracleDriver");//获取并装载jdbc驱动程序 java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); //注册数据库驱动程序} catch(java.sql.SQLException e) { throw new RuntimeException("error"); } //建立与数据库的连接 String url="jdbc:oracle:thin:@localhost:1521:dbname"; //端口号1521可以通过查看oracle安装目录下E:\oracle\product\10.2.0\db_1\NETWORK\ADMIN的listener.ora文件得知String user="system"; String passworddb="****** "; Connection conn=null; try { conn=DriverManager.getConnection(url, user, passworddb); } catch(Exception ex) { ex.printStackTrace(); } //创建statement对象

oracle表的导入导出-命令

数据导出: 1 将数据库TEST完全导出,用户名system 密码manager 导出到D:daochu.dmp中 exp system/manager@TEST file=d:daochu.dmp full=y 2 将数据库中system用户与sys用户的表导出 exp system/manager@TEST file=d:daochu.dmp owner=(system,sys) 3 将数据库中的表inner_notify、notify_staff_relat导出 exp aichannel/aichannel@TESTDB2 file= d:datanewsmgnt.dmp tables=(inner_notify,notify_staff_relat) 4 将数据库中的表table1中的字段filed1以"00"打头的数据导出 exp system/manager@TEST file=d:daochu.dmp tables=(table1) query=" where filed1 like '00%'" 上面是常用的导出,对于压缩,既用winzip把dmp文件可以很好的压缩。 也可以在上面命令后面加上 compress=y 来实现。 数据的导入 1 将D:daochu.dmp 中的数据导入 TEST数据库中。 imp system/manager@TEST file=d:daochu.dmp imp aichannel/aichannel@HUST full=y file=file= d:datanewsmgnt.dmp ignore=y 上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。 在后面加上 ignore=y 就可以了。 2 将d:daochu.dmp中的表table1 导入 imp system/manager@TEST file=d:daochu.dmp tables=(table1) 基本上上面的导入导出够用了。不少情况要先是将表彻底删除,然后导入。 注意: 操作者要有足够的权限,权限不够它会提示。 数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。 附录一: 给用户增加导入数据权限的操作 第一,启动sql*puls 第二,以system/manager登陆 第三,create user 用户名 IDENTIFIED BY 密码(如果已经创建过用户,这步可以省略)第四,GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW , DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE, DBA,CONNECT,RESOURCE,CREATE SESSION TO 用户名字 第五, 运行-cmd-进入dmp文件所在的目录, imp userid=system/manager full=y file=*.dmp

SQL Server数据导入到Oracle中的方法

SQL Server数据导入到Oracle中的方法 如果我们需要将SQL Server数据库中的数据导入到Oracle数据库中,应该如何操 作呢?下文对该方法的步骤进行了详细的介绍,供您借鉴参考之用。 在我们使用SQL Server数据库的过程中,有时需要将SQL Server数据导出,导 入到其他的数据库中,比如导入到Oracle中。 假设要将SQL Server中的Northwind数据库中的Products表导出到Oracle 的Scott用户 首先需要有安装SQL Server企业版 1.打开工具: 开始->程序->Microsoft SQLServer->导入和SQL Server数据导出数据 2.下一步,选择数据源 [数据源]选择“用于SQL Server的Microsoft OLE DB提供程序”,这应该是缺省值。 [服务器]选择要导出数据的服务器,如果是本机,选择(local) [数据库]选择要导出的数据所在的库,这里选择Northwind 3.下一步,选择目的 [目的]选择Microsoft ODBC for Oracle [DSN]选择用户/系统DSN一项,然后在下拉列表框中找一个已经连接到了Scott用户的DSN名称。 如果下拉列表中没有,点下拉列表框右侧的[新建],出现创建新数据源界面。 接下来选择系统数据源,下一步,在驱动程序列表中选择Microsoft ODBC for Oracle 下一步,完成,出现Microsoft ODBC for Oracle安装界面 [数据源名称]随便输入,比如sss [说明]可以不填 [用户名称]填入要SQL Server数据导出到的Oracle用户名称,这里是scott

oracle表的导入导出-命令

oracle表的导入导出-命令.txt12思念是一首诗,让你在普通的日子里读出韵律来;思念是一阵雨,让你在枯燥的日子里湿润起来;思念是一片阳光,让你的阴郁的日子里明朗起来。数据导出: 1 将数据库TEST完全导出,用户名system 密码manager 导出到D:daochu.dmp中 exp system/manager@TEST file=d:daochu.dmp full=y 2 将数据库中system用户与sys用户的表导出 exp system/manager@TEST file=d:daochu.dmp owner=(system,sys) 3 将数据库中的表inner_notify、notify_staff_relat导出 exp aichannel/aichannel@TESTDB2 file= d:datanewsmgnt.dmp tables=(inner_notify,notify_staff_relat) 4 将数据库中的表table1中的字段filed1以"00"打头的数据导出 exp system/manager@TEST file=d:daochu.dmp tables=(table1) query=" where filed1 like '00%'" 上面是常用的导出,对于压缩,既用winzip把dmp文件可以很好的压缩。 也可以在上面命令后面加上compress=y 来实现。 数据的导入 1 将D:daochu.dmp 中的数据导入TEST数据库中。 imp system/manager@TEST file=d:daochu.dmp

oracle数据迁移方法

Oracle数据迁移方案 数据迁移通俗的说就是将数据从一个地方转移到另一个地方。主要使用场景有:根据正式系统搭建测试环境、从内网复制到外网、数据库服务器硬件升级等。根据需要迁移的数据量大小、系统架构,可采取不同的迁移方法。 注:以下所说方法,不考虑数据的增量更新、不考虑数据的实时同步、不考虑数据的逻辑转换。如果有这些需求,建议使用第三方ETL工具或使用Oracle的其他数据同步技术。 一、常用示例 1.1 如何在客户现场搭建测试环境? 常规方案,使用imp/exp工具,先在源库执行直接路径导出操作,然后在目标库执行导入操作。IMP/EXP的执行速度主要受限于磁盘及网络。 数据量:1.5G 导出用时:5分钟 导入用时:23分钟 导出文件大小:641M 导出导入环境:单CPU,700M内存。为力求最大速度,使用直接路径导出、设置最大I/O 缓冲、导入导出文件都放在服务器上执行。 1.2 还有没有更快的办法? 有,仍然使用impdp/expdp。只是不再将数据导出后导入,而是直接将数据从源库导入到目的库。 CMD> Impdp testi@目标库 directory=DMPDIR schemas=TESTI network_link=源库dblink remap_schema=TESTI:TESTA 上面语句的操作是将源库的TESTI用户的数据,导入到目标库的TESTA用户下。 这个操作是局域网内迁移数据最方便的工具,不过也可能是速度最慢的工具。 1.3 有没有还快一点的方法? 有,换用impdp/expdp。同样在源库执行导出,在目标库执行导入。操作速度能得到极大提升。IMPDP/EXPDP速度主要受限于磁盘,与网络无关。

Oracle查看表结构的几种方法

Oracle查看表结构的几种方法 Oracle查看表结构的几种方法 1,DESCRIBE 命令 使用方法如下: SQL> describe nchar_tst(nchar_tst为表名) 显示的结果如下: 名称是否为空? 类型 ----------------------------------------- -------- ---------------------------- NAME NCHAR(6) ADDR NVARCHAR2(16) SAL NUMBER(9,2) 2,DBMS_METADATA.GET_DDL包 使用方法如下: [sql] SQL> SELECT DBMS_METADATA.GET_DDL('TABLE','NCHAR_TST') FROM DUAL; 如果显示的结果并未完整,如下: CREATE TABLE "SCOTT"."NCHAR_TST" ( "NAME" NCHAR(6), "ADDR" NVARCHAR2(16 那么修改如下: [sql] SQL> SET LONG 9999 SQL> SELECT DBMS_METADATA.GET_DDL('TABLE','NCHAR_TST') FROM DUAL; 则显示如下的结果: DBMS_METADATA.GET_DDL('TABLE','NCHAR_TST')

------------------------------------------------------------------------ ------ CREATE TABLE "SCOTT"."NCHAR_TST" ( "NAME" NCHAR(6), "ADDR" NVARCHAR2(16), "SAL" NUMBER(9,2) ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING STORAGE(INITIAL 12288 NEXT 12288 MINEXTENTS 1 MAXEXTENTS 249 PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "SYSTEM" [Oracle] dbms_metadata.get_ddl 的使用方法总结 以下是对Oracle中dbms_metadata.get_ddl的用法进行了详细的分析介绍,需要的朋友参考下 dbms_metadata.get_ddl()用于获取对象的DDL,其具体用法如下。 注意:在sqlplus里,为了更好的展示DDL,需要设置如下参数: 复制代码代码如下: set line 200 set pagesize 0 set long 99999 set feedback off set echo off 1)获得表、索引、视图、存储过程、函数的DDL 复制代码代码如下:

excel中的数据导入oracle方法详解

SQL_loader批量上传数据 1.注释 在工作中,很多时候会遇到如下情况:需要将excel中的数据批量上传到ORACLE 表中。如果是小数据量,如几十条至几百条,那么用plsql dev工具,在查询命令后加上for update 然后解锁,把数据复制粘贴进去就可以了。 但如果遇到大数据量几万至几十万时,上述方法就不可行了。 如下介绍如何使用oracle自带的sqlloader上传数据。 2.SQL_LOADER上传数据 2.1sql_loader说明 sql*loader是oracle自带程序。需要上传数据的本机只要安装了oracle数据库或客户端就会自动集成该工具。但是不同的版本对控制文件的写法要求有所不同。具体可参见2.3节或者附件控制文件的内容。 2.2编辑数据文件 要使用sql*loader,其数据文件必须是两种,一种是*.txt 的文本文件,另一种是*.csv的文件。例如,需要上传的数据是使用excel编辑的,那么只需要将excel另存为[制表符分割的txt 文件]或者另存为[逗号分割的csv 文件]即可。 上图是将excel文件另存为“文本文件(制表符分割)(*.txt)”文件格式后的效果要将excel文件转换成csv格式同上面一样,另存为“CSV(逗号分割)(*.csv)”格式即可。如下图:

注意:CSV格式的文件打开后跟excel的样式差不多,但实际存储方式不一样。在磁盘上CSV格式的文件中每个格子中的数据使用逗号分割开存储的。 这样的存储方式很有用,方面后面写控制文件。控制文件在控制读取数据的时候直接以逗号为标记读取数据。其实,plsql dev在导出文件的时候就可选择存储为csv格式。 按照以上方法,数据文件就准备好了。 2.3编写控制文件 控制文件其实就是SQL_LOADER上传数据时需要运行的脚本,其后缀名为ctl。控制文件写明了数据文件的位置、加载数据的方式、加载到哪个表、如何读取数据等信息。 下面是一段简单、完整的控制文件的截图及解释: 图注:编写控制文件时用文本文件编写好,修改后缀名为ctl即可。 上面的代码比较简单。需要复杂的控制,请查阅相关资料。 2.4SQL_LOADER导入数据 制作好了数据文件和控制文件,接下来就是把数据导入oracle表中。下面还是用test 表来举例。 第一步:进入dos命令环境,检查sql_loader是否装好。 在命令窗口输入sqlldr,回车,如果系统正确装好了sql_loader就会提示如下:

Oracle数据库表连接方式及常见用法

Oracle数据库表连接方式及常见用法 racle数据库表连接方式根据应用场景的不同会有不同的方法,本文向您介绍相等连接、外连接、不等连接、自连接和哈希连接等。一个SQL语句的关联表超过两个,那么连接的顺序如何呢?ORACLE首先连接其中的两个表,产生一个结果集;然后将产生的结果集与下一个表再进行关联;继续这个过程,直到所有的表都连接完成;最后产生所需的数据,,本文将主要从以下几个典型的例子来分析Orac Oracle数据库表连接方式根据应用场景的不同会有不同的方法,本文向您介绍相等连接、外连接、不等连接、自连接和哈希连接等。 一个SQL语句的关联表超过两个,那么连接的顺序如何呢?ORACLE首先连接其中的两个表,产生一个结果集;然后将产生的结果集与下一个表再进行关联;继续这个过程,直到所有的表都连接完成;最后产生所需的数据,,本文将主要从以下几个典型的例子来分析Oracle表的几种不同连接方式: 1. 相等连接 通过两个表具有相同意义的列,可以建立相等连接条件。 只有连接列上在两个表中都出现且值相等的行才会出现在查询结果中。 例查询员工信息以及对应的员工所在的部门信息; SELECT * FROM EMP,DEPT; SELECT * FROM EMP,DEPT WHERE EMP.DEPTNO = DEPT.D EPTNO; REM 显示工资超过2000的员工信息以及对应的员工的部门名称。 2. 外连接 对于外连接,Oracle中可以使用“(+)”来表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN,下面将配合实例一一介绍。除了显示匹配相等连接条件的信息之外,还显示无法匹配相等连接条件的某个表的信息。 外连接采用(+)来识别。 ◆左条件(+) = 右条件; 代表除了显示匹配相等连接条件的信息之外,还显示右条件所在的表中无法匹配相等连接条件的信息。 此时也称为"右外连接".另一种表示方法是:

Oracle中比对2张表之间数据是否一致的几种方法

Oracle中比对2张表之间数据是否一致的几种方法 by Maclean.liu liu.maclean@https://www.wendangku.net/doc/da1045598.html, https://www.wendangku.net/doc/da1045598.html,

About Me l Email & Gtalk:liu.maclean@https://www.wendangku.net/doc/da1045598.html, l Blog:https://www.wendangku.net/doc/da1045598.html, l QQ:47079569 QQ Group:23549328 l Oracle Certified Database Administrator Master 10g and 11g l Over 6 years experience with Oracle DBA technology l Over 7 years experience with Linux technology l Member Independent Oracle Users Group l Member All China Oracle Users Group l Presents for advanced Oracle topics: RAC, DataGuard, Performance Tuning and Oracle Internal.

How To Find Maclean Liu?

大约是2个星期前做一个夜班的时候,开发人员需要比对shareplex 数据同步复制软件在 源端和目标端的2张表上的数据是否一致,实际上后来想了下shareplex 本身应当具有这种数据校验功能, 但是还是希望从数据库的角度得出几种可用的同表结构下的数据比对方法。 注意以下几种数据比对方式适用的前提条件: 1. 所要比对的表的结构是一致的 2. 比对过程中源端和 目标端 表上的数据都是静态的,没有任何DML修改 方式1: 假设你所要进行数据比对的数据库其中有一个 版本为11g且该表上有相应的主键索引(primary key index)或者唯一非空索引(unique key ¬ null)的话,那么恭喜你! 你可以借助11g 新引入的专门做数据对比的PL/SQL Package dbms_comparison来实现数据校验的目的,如以下演示: Source 源端版本为11gR2 : conn maclean/maclean SQL> select * from v$version; BANNER --------------------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production PL/SQL Release 11.2.0.3.0 - Production CORE 11.2.0.3.0 Production TNS for Linux: Version 11.2.0.3.0 - Production NLSRTL Version 11.2.0.3.0 - Production SQL> select * from global_name; GLOBAL_NAME https://www.wendangku.net/doc/da1045598.html, & https://www.wendangku.net/doc/da1045598.html,

oracle数据库备份与恢复的三种方法(1)

Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP)、热备份和冷备份。导出备件是一种逻辑备份,冷备份和热备份是物理备份。 一、导出/导入(Export/Import) 利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回到Oracle数据库中去。 1、简单导出数据(Export)和导入数据(Import) Oracle支持三种方式类型的输出: (1)、表方式(T方式),将指定表的数据导出。 (2)、用户方式(U方式),将指定用户的所有对象及数据导出。 (3)、全库方式(Full方式),瘵数据库中的所有对象导出。 数据导入(Import)的过程是数据导出(Export)的逆过程,分别将数据文件导入数据库和将数据库数据导出到数据文件。 2、增量导出/导入 增量导出是一种常用的数据备份方法,它只能对整个数据库来实施,并且必须作为SYSTEM来导出。在进行此种导出时,系统不要求回答任何问题。导出文件名缺省为export.dmp,如果不希望自己的输出文件定名为export.dmp,必须在命令行中指出要用的文件名。 增量导出包括三种类型: (1)、“完全”增量导出(Complete) 即备份三个数据库,比如: (2)、“增量型”增量导出 备份上一次备份后改变的数据,比如: (3)、“累积型”增量导出 累计型导出方式是导出自上次“完全”导出之后数据库中变化了的信息。比如: 数据库管理员可以排定一个备份日程表,用数据导出的三个不同方式合理高效的完成。 比如数据库的被封任务可以做如下安排: 星期一:完全备份(A)

星期二:增量导出(B) 星期三:增量导出(C) 星期四:增量导出(D) 星期五:累计导出(E) 星期六:增量导出(F) 星期日:增量导出(G) 如果在星期日,数据库遭到意外破坏,数据库管理员可按一下步骤来回复数据库: 第一步:用命令CREATE DATABASE重新生成数据库结构; 第二步:创建一个足够大的附加回滚。 第三步:完全增量导入A: 第四步:累计增量导入E: 第五步:最近增量导入F: 二、冷备份 冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份时将关键性文件拷贝到另外的位置的一种说法。对于备份Oracle信息而言,冷备份时最快和最安全的方法。冷备份的优点是: 1、是非常快速的备份方法(只需拷文件) 2、容易归档(简单拷贝即可) 3、容易恢复到某个时间点上(只需将文件再拷贝回去) 4、能与归档方法相结合,做数据库“最佳状态”的恢复。 5、低度维护,高度安全。 但冷备份也有如下不足: 1、单独使用时,只能提供到“某一时间点上”的恢复。 2、再实施备份的全过程中,数据库必须要作备份而不能作其他工作。也就是说,在冷备份过程中,数据库必须是关闭状态。

复制已有表结构及数据

一、同时复制表结构及数据 在数据库的实际应用中,有时会存在单个表数据备份的情况,或创建一个与已有表结构相同的表,在sqlserver和oracle中,这种情况可以用一个语句即可完成。 1、sqlserver中,用select * into table1 from table2 where 条件 1)select * into table1 from table2,创建与table2相同结构的table1,并向table1导入table2的所有数据 2)select * into table1 from table2 where 1=2,创建与table2相同结构的table1,表数据为空3)select * into table1 from table2 where ....,创建与table2相同结构的table1,插入符合条件的表数据 2、oracle 中用create table1 as (select * from table2 where ......) 1)create table1 as (select * from table2),创建与table2相同结构的table1,并向table1导入table2的所有数据 2)create table1 as (select * from table2 where 1=2),创建与table2相同结构的table1,表数据为空 3)create table1 as (select * from table2 where ....),创建与table2相同结构的table1,插入符合条件的表数据 二、只复制数据 在表已经存在,只需要把表2的数据导入到表1中时,可以用以下方式(oracle和sqlserver 相同): 1、表结构完全相同时用insert into table1 (select * from table2 where ......) 2、表结构不同时用指定字段方式insert into table1(field11,field12,......) (select field21,field22,... from table2 where ......),此时会table2的查询结果按字段顺序插入到table1中,所以要求table1和table2的指定字段要一一对应。 复制数据时要注意,因为table1已经存在,在向table1中插入中数据时,由于主键和自动编号等字段不可重复的特点,要考虑插入的数据是否合法,否则不能成功。如在sqlserver 中,如存在自动编号的字段,如果此字段插入的数据已经存在,则不能再次插入。

Oracle 表空间数据文件迁移

一、系统表空间数据文件迁移: SQL> conn /@study as sysdba 已连接。 SQL>descdba_data_files; 名称是否为空? 类型 ----------------------------------------- -------- ---------------------------- FILE_NAME VARCHAR2(513) FILE_ID NUMBER TABLESPACE_NAME VARCHAR2(30) BYTES NUMBER BLOCKS NUMBER STATUS VARCHAR2(9) RELATIVE_FNO NUMBER AUTOEXTENSIBLE VARCHAR2(3) MAXBYTES NUMBER MAXBLOCKS NUMBER INCREMENT_BY NUMBER USER_BYTES NUMBER USER_BLOCKS NUMBER ONLINE_STATUS VARCHAR2(7) SQL> select file_name,tablespace_name from dba_data_files where tablespace_name= 'SYSTEM'; FILE_NAME -------------------------------------------------------------------------------- TABLESPACE_NAME ------------------------------ D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSTEM01.DBF SYSTEM SQL> shutdown immediate 数据库已经关闭。 已经卸载数据库。 ORACLE例程已经关闭。 SQL> host copy D:\oracle\product\10.2.0\oradata\study\system.dbf d:\oracle\study 系统找不到指定的文件。 SQL> host copy D:\oracle\product\10.2.0\oradata\study\system.dbf d:\oracle\study

oracle数据库replication功用的实现

高级复制 什么是复制?简单地说复制就是在由两个或者多个数据库系统构成的一个分布式数据库环境中拷贝数据的过程。 高级复制,是在组成分布式数据库系统的多个数据库中复制和维护数据库对象的过程。Oracle 高级复制允许应用程序更新数据库的任何副本,并将这些更改自动传递到其他数据库,同时确保全局事务处理的一致性和数据完整性。 同步复制,复制数据在任何时间在任何复制节点均保持一致。如果复制环境中的任何一个节点的复制数据发生了更新操作,这种变化会立刻反映到其他所有的复制节点。这种技术适用于那些对于实时性要求较高的商业应用中。 异步复制,所有复制节点的数据在一定时间内是不同步的。如果复制环境中的其中的一个节点的复制数据发生了更新操作,这种改变将在不同的事务中被传播和应用到其他所有复制节点。这些不同的事务间可以间隔几秒,几分种,几小时,也可以是几天之后。复制节点之间的数据临时是不同步的,但传播最终将保证所有复制节点间的数据一致。 一、实现数据库复制的前提条件 1、数据库支持高级复制功能 您可以用system身份登录数据库,查看v$option视图,如果其中Advanced replication为TRUE,则支持高级复制功能;否则不支持。 2、数据库初始化参数要求 ①、db_domain = https://www.wendangku.net/doc/da1045598.html, 指明数据库的域名(默认的是WORLD),这里可以用您公司的域名。 ②、global_names = true 它要求数据库链接(database link)和被连接的数据库名称一致。 现在全局数据库名:db_name+”.”+db_domain ③、有跟数据库job执行有关的参数 job_queue_processes = 1 job_queue_interval = 60 distributed_transactions = 10 open_links = 4 第一行定义SNP进程的启动个数为n。系统缺省值为0,正常定义范围为0~36,根据任 务的多少,可以配置不同的数值。 第二行定义系统每隔N秒唤醒该进程一次。系统缺省值为60秒,正常范围为1~3600秒。事实上,该进程执行完当前任务后,就进入睡眠状态,睡眠一段时间后,由系统的总控负责将其唤醒。 如果修改了以上这几个参数,需要重新启动数据库以使参数生效。 二、实现数据库同步复制的步骤 假设在Internet上我们有两个数据库:一个叫深圳(shenzhen),一个叫北京(beijing)。 具体配置见下表: 数据库名shenzhen beijing 数据库域名https://www.wendangku.net/doc/da1045598.html, https://www.wendangku.net/doc/da1045598.html, 数据库sid号shenzhen beijing Listener端口号1521 1521 服务器ip地址10.1.1.100 10.1.1.200 1、确认两台数据库之间可以互相访问,在tnsnames.ora里设置数据库连接字符串。

ORACLE缓存表

ORACLE缓存表 数据库监听器停止与启动 切换至安装oracle数据库的那个用户,一般为oracle(在root下是安装或是启动不了oracle的); #su oracle 然后启动监听器 #lsnrctl start 会看到启动成功的界面; 停止监听器命令. lsnrctl stop 可以修改oracle的ora文件,对数据库进行配置,在opt/oracle/product/9.2.0/network/admin目录中,修改相应的ora文件即可. 就目前网络上出现的有关“Oracle缓存表”的疑问,小编在网上查找整理了一些,希望能帮助到大家。

Oracle缓存表(db_buffer_pool)由三部分组成: buffer_pool_defualt buffer_pool_keep buffer_pool_recycle 如果要把表钉死在内存中,也就是把表钉在keep区。相关的命令为: alter table表名storage(buffer_pool keep);这句命令把表示表如果缓存的话是缓存在keep区。 可以通过语句: select table_name from dba_tables where buffer_pool='KEEP';查询到该表是放在keep区中的。但是不意味着表已经被缓存了。 下面的语句把表缓存: alter table表名cache;可以通过

select table_name from dba_tables where rtrim(cache)='Y'查询到该表已经被缓存了。 加入到keep区的表不是说不能被移出内存,不过是比较不容易移出内存。 也可以手工来移出内存,命令如下: alter table...nocache; Cache Connect to Oracle是Oracle内存数据库TimesTen的一个选件,可以为Oracle数据库提供实时的可更新缓存。缓存表驻

(Oracle管理)Oracle数据库备份详解

Oracle数据库备份详解 ORACLE数据库有两类备份方法。第一类为物理备份,该方法实现数据库的完整恢复,但数据库必须运行在归挡模式下(业务数据库在非归挡模式下运行),且需要极大的外部存储设备,例如磁带库;第二类备份方式为逻辑备份,业务数据库采用此种方式,此方法不需要数据库运行在归挡模式下,不但备份简单,而且可以不需要外部存储设备。 一、数据库逻辑备份方法 1 导出工具:exp Exp它是操作系统下一个可执行的文件存放目录/ORACLE_HOME/bin exp导出工具将数据库中数据备份压缩成一个二进制系统文件.可以在不同OS间迁移ORACLE数据库的逻辑备份分为三种模式: a. 表模式:导出用户所有表或者指定的表; b. 用户模式:导出用户所有对象以及对象中的数据; c. 整个数据库:导出数据库中所有对象。 1.1 表模式 备份某个用户模式下指定的对象(表)。业务数据库通常采用这种备份方式。 若备份到本地文件,使用如下命令: exp icdmain/icd rows=y indexes=n compress=n buffer=65536 feedback=100000 volsize=0 file=exp_icdmain_csd_yyyymmdd.dmp log=exp_icdmain_csd_yyyymmdd.log tables=https://www.wendangku.net/doc/da1045598.html,moninformation,icdmain.serviceinfo,icdmain.dealinfo 若直接备份到磁带设备,使用如下命令: exp icdmain/icd rows=y indexes=n compress=n buffer=65536 feedback=100000 volsize=0 file=/dev/rmt0 log=exp_icdmain_csd_yyyymmdd.log tables=https://www.wendangku.net/doc/da1045598.html,moninformation,icdmain.serviceinfo,icdmain.dealinfo 注:在磁盘空间允许的情况下,应先备份到本地服务器,然后再拷贝到磁带。出于速度方面的考虑,尽量不要直接备份到磁带设备。 1.2 用户模式 备份某个用户模式下的所有对象。业务数据库通常采用这种备份方式。

使用PLSQL_Developer导出Oracle表及数据

说明:需要把建表脚本及表数据分开导出,操作很简单。 一、导出表及存储过程等对象: 1、登录PL-SQL Developer 2、选择只显示本用户的对象,如下图: 3、选择菜单“Tools——〉Export User Objects”,如下图:

4、会弹出如下窗口: 5、选择我们要导出的表、视图、存储过程等;只选中“Single file”单选按钮;在“Output file”处选择要导出文件的路径及文件名称(默认是.sql 文件),我这里是“b.sql”;点击“Export”按钮,如下图:

6、最下面显示的绿色条到最后,表示导出成功。 二、导出表的数据: 1、进入到PL-SQL Developer,选择只显示本用户的对象; 2、打开菜单“Tools——〉Export Tables”,如下图: 3、弹出如下窗口:

4、选择我们要导出数据的表;选中下面三个选项卡的中间那个“SQL Inserts” 选中;“Drop tables”,其它复选框类似下图选择;在“Output file”处选择要导出文件的路径及文件 名称(默认是.sql 文件),我这里是“c.sql”;点击“Export”按钮,如下图

5、下面出现“Exporting tables... Done”字样,表示导出成功。如下图: 三、导入: 1、先导入建表脚本(包括视图、存储过程等对象): 1)进入到PL-SQL Developer; 2)打开菜单“File——〉New——〉Commnad Window”,如下图:

3)会打开如下窗口: 4)找到我们刚刚导出的b.sql 文件,打开文件,选中文件中的所有内容(ctrl+a),复制(ctrl+c)再回到PL-SQL Developer 中的那个;“Command Window”窗口中,粘贴(ctrl+v),将所有内容刷到数据库中;如下图: 5)中间可以提示某些红字异常,可能是我们要导入的表在数据库中已经存在,暂时不管;当出现“spool off”字样时,表示导入表成功,如下图: 2、再导入表的数据: 1)进入到PL-SQL Developer;打开菜单“File——〉New——〉Commnad Window”; 2)找到我们刚刚导出的 c.sql 文件,打开文件,选中文件中的所有内容(ctrl+a),

oracle复制表数据

oracle复制表数据,复制表结构 2010年09月02日15:49 1.不同用户之间的表数据复制 对于在一个数据库上的两个用户A和B,假如需要把A下表old的数据复制到B下的new,请使用权限足够的用户登入sqlplus: insert into B.new(select * from A.old); 如果需要加条件限制,比如复制当天的A.old数据 insert into B.new(select * from A.old where date=GMT); 蓝色斜线处为选择条件 2.同用户表之间的数据复制 用户B下有两个表:B.x和B.y,如果需要从表x转移数据到表y,使用用户B登陆sqlpus 即可: insert into 目标表y select * from x where log_id>'3049' -- 复制数据 注意:要示目标表y必须事先创建好 如insert into bs_log2 select * from bs_log where log_id>'3049' 3.B.x中个别字段转移到B.y的相同字段 --如果两个表结构一样 insert into table_name_new select * from table_name_old 如果两个表结构不一样: insert into y(字段1,字段2) select 字段1,字段2 from x 4.只复制表结构加入了一个永远不可能成立的条件1=2,则此时表示的是只复制表结构,但是不复制表内容 create table 用户名.表名as select * from 用户名.表名where 1=2 如create table zdsy.bs_log2 as select * from zdsy.bs_log where 1=2 5完全复制表(包括创建表和复制表中的记录) create table test as select * from bs_log --bs_log是被复制表 6 将多个表数据插入一个表中 insert into 目标表test(字段1。。。字段n) (select 字段1.。。。。字段n) from 表union all select 字段1.....字段n from 表 ===================================================== oracle和mssql中复制表的比较 库内数据复制 MS SQL Server: Insert into 复制表名称select 语句(复制表已经存在) select 字段列表into 复制表名称from 表(复制表不存在) Oracle : Insert into 复制表名称select 语句(复制表已经存在) create table 复制表名称as select 语句(复制表不存在) 多表更新、删除 一条更新语句是不能更新多张表的,除非使用触发器隐含更新,我这里说的意思是:根据其他表数据更新你要更新的表一般形式:

相关文档
相关文档 最新文档