社区
基础和管理
帖子详情
oracle两个数据库的相互导数据
dengkunliu
2002-12-19 04:52:24
在两个机器上分别装了Oracle 8.1.7 workgroup
如果要想将一个机器中的Oracle数据导入另一个机器中的
数据库该怎么办?
Thank you
我是菜鸡
...全文
369
17
打赏
收藏
oracle两个数据库的相互导数据
在两个机器上分别装了Oracle 8.1.7 workgroup 如果要想将一个机器中的Oracle数据导入另一个机器中的 数据库该怎么办? Thank you 我是菜鸡
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
maohaisheng
2002-12-21
打赏
举报
回复
使用Oracle数据库复制
下面是我下载的资料
我们经常希望把各地的数据入库后进行统一的应用。现在可以用复制技术来解决这个问题。但实现数据库复制也是要有一些条件的。
首先,数据库要具备高级复制功能(用system身份登录数据库,查看v$option视图,如果其中Advanced replication为TRUE,则支持高级复制功能;否则不支持)。
如果具备高级复制功能,数据库要进行一些参数初始化。
db_domain = test.com.cn 指明数据库的域名(默认的是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上有两个数据库:一个叫中国(China),一个叫日本(Japan)。
具体配置如下:
数据库名:China、Japan
数据库域名 test.com.cn
数据库sid号 China、Japan
Listener端口号 1521
服务器ip地址 10.1.0.100 10.1.0.200
确认两个数据库之间可以互相访问,在tnsnames.ora里设置数据库连接字符串。
中国这边的数据库连接字符串是以下的格式:
Japan =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.200)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = Japan)
)
)
运行$tnsping Japan,出现以下提示符:
Attempting to contact (ADDRESS=(PROTOCOL=TCP)(HOST=10.1.1.200)(PORT=1521))
OK(n毫秒)
表明中国数据库可以访问日本数据库。在日本那边也同样配置,确认$tnsping China 是通的。
改数据库全局名称,建公共的数据库链接。
用system身份登录China数据库
SQL>alter database rename global_name to China.test.com.cn;
用system身份登录Japan数据库:
SQL>alter database rename global_name to Japan.test.com.cn;
用system身份登录China数据库。
SQL>create public database link Japan.test.com.cn using 'Japan';
测试数据库全局名称和公共的数据库链接。
SQL>select * from global_name@Japan.test.com.cn;
返回结果为Japan.test.com.cn就对了。
用system身份登录Japan数据库:
SQL>create public database link China.test.com.cn using 'China';
测试数据库全局名称和公共的数据库链接。
SQL>select * from global_name@China.test.com.cn;
返回结果为China.test.com.cn就对了。
建立管理数据库复制的用户repadmin,并赋权。
用system身份登录China数据库:
SQL>create user repadmin identified by repadmin default tablespace users temporary tablespace temp;
SQL>execute dbms_defer_sys.register_propagator('repadmin');
SQL>grant execute any procedure to repadmin;
SQL>execute dbms_repcat_admin.grant_admin_any_repgroup('repadmin');
SQL>grant comment any table to repadmin;
SQL>grant lock any table to repadmin;
同样用system身份登录Japan数据库,运行以上的命令,管理数据库复制的用户repadmin,并赋权。
在数据库复制的用户repadmin下创建私有的数据库链接。
用repadmin身份登录China数据库。
SQL>create database link Japan.test.com.cn connect to repadmin identified 试这个私有的数据库链接:
SQL>select * from global_name@Japan.test.com.cn;
返回结果为Japan.test.com.cn就对了。
用repadmin身份登录Japan数据库。
SQL>create database link China.test.com.cn connect to repadmin identified by repadmin;
测试这个私有的数据库链接:
SQL>select * from global_name@China.test.com.cn;
返回结果为China.test.com.cn就对了。
创建或选择实现数据库复制的用户和对象,给用户赋权,数据库对象必须有主关键字。
用internal身份登录China数据库,创建scott用户并赋权:
SQL>create user scott identified by tiger default tablespace users temporary tablespace temp;
SQL>grant connect, resource to scott;
SQL>grant execute on sys.dbms_defer to scott;
用scott身份登录China数据库,创建表dept :
SQL>create table dept
(deptno number(2) primary key,
dname varchar2(14),
loc varchar2(13) );
如果数据库对象没有主关键字,可以运行以下SQL命令添加:
SQL>alter table dept add (constraint dept_deptno_pk primary key (deptno));
在China数据库scott用户下创建主关键字的序列号,范围避免和Japan的冲突。
SQL> create sequence dept_no increment by 1 start with 1 maxvalue 44 cycle nocache;
在China数据库scott用户下插入初始化数据
SQL>insert into dept values (dept_no.nextval,'accounting','new york');
SQL>insert into dept values (dept_no.nextval,'research','dallas');
SQL>commit;
在Japan数据库那边同样运行以上①,②,③。
在Japan数据库scott用户下创建主关键字的序列号,范围避免和China的冲突。
SQL> create sequence dept_no increment by 1 start with 45 maxvalue 99 cycle nocache;
在Japan数据库scott用户下插入初始化数据。
SQL>insert into dept values (dept_no.nextval,'sales','chicago');
SQL>insert into dept values (dept_no.nextval,'operations','boston');
SQL>commit;
在Japan数据库那边同样运行以上①,②,③。
在Japan数据库scott用户下创建主关键字的序列号,范围避免和China的冲突。
SQL> create sequence dept_no increment by 1 start with 45 maxvalue 99 cycle nocache;
在Japan数据库scott用户下插入初始化数据。
SQL>insert into dept values (dept_no.nextval,'sales','chicago');
SQL>insert into dept values (dept_no.nextval,'operations','boston');
SQL>commit;
创建要复制的组scott_mg,加入数据库对象,产生对象的复制支持。
用repadmin身份登录China数据库,创建主复制组scott_mg:
SQL> execute dbms_repcat.create_master_repgroup('scott_mg');
在复制组scott_mg里加入数据库对象:
SQL>execute dbms_repcat.create_master_repobject(sname=>'scott',oname=>'dept', type=>'table',use_existing_object=>true,gname=>'scott_mg');
参数说明:
sname 实现数据库复制的用户名称;
oname 实现数据库复制的数据库对象名称;
type 实现数据库复制的数据库对象类别;
use_existing_object true表示用主复制节点已经存在的数据库对象;
gname 主复制组名;
对数据库对象产生复制支持:
SQL>execute dbms_repcat.generate_replication_support('scott','dept','table');
确认复制的组和对象已经加入数据库的数据字典:
SQL>select gname, master, status from dba_repgroup;
SQL>select * from dba_repobject;
创建主复制节点:
用repadmin身份登录China数据库,创建主复制节点:
SQL>execute dbms_repcat.add_master_database
(gname=>'scott_mg',master=>'Japan.test.com.cn',use_existing_objects=>true, copy_rows=>false, propagation_mode => 'asynchronous');
参数说明:
gname 主复制组名;
master 加入主复制节点的另一个数据库;
use_existing_object true表示用主复制节点已经存在的数据库对象;
copy_rows false表示第一次开始复制时不用和主复制节点保持一致;
propagation_mode 异步地执行;
确认复制的任务队列已经加入数据库的数据字典:
SQL>select * from user_jobs;
使同步组的状态由停顿(quiesced )改为正常(normal):
用repaa数据库,运行以下命令:
SQL> execute dbms_repcat.resume_master_activity('scott_mg',false);
确认同步组的状态为正常(normal):
SQL> select gname, master, status from dba_repgroup;
如果这个①命令不能使同步组的状态为正常(normal),可能有一些停顿的复制,运行以下命令再试试(建议在紧急的时候才用):
SQL> execute dbms_repcat.resume_master_activity('scott_mg',true);
创建复制数据库的时间表,10分钟复制一次。
用repadmin身份登录China数据库,运行以下命令:
SQL>begin
dbms_defer_sys.schedule_push (
destination => 'Japan.test.com.cn',
interval => 'sysdate + 10/1440',
next_date => sysdate);
end;
/
SQL>begin
dbms_defer_sys.schedule_purge (
next_date => sysdate,
interval => 'sysdate + 10/1440',
delay_seconds => 0,
rollback_segment => '');
end;
/
用repadmin身份登录Japan数据库,运行以下命令:
SQL>begin
dbms_defer_sys.schedule_push (
destination => ' China.test.com.cn ',
interval => 'sysdate + 10 / 1440',
next_date
dengkunliu
2002-12-20
打赏
举报
回复
yes
hotsmile
2002-12-20
打赏
举报
回复
具体要怎么设置,那台web的数据库是不是要在那个dbastudio里,复制那个工具里设置主站点?
caixiang
2002-12-20
打赏
举报
回复
这是数据库的replication吧
dengkunliu
2002-12-20
打赏
举报
回复
各位好象误会了,是在两台机器上正常运行的情况下,自动导数据,而不是用手动命令去完成。比如说一台机器是Web正常连接的,而另一台机器是备份的机器。将Web连接的数据库内的数据按一定的时间向备份数据库中导。
mike_541
2002-12-20
打赏
举报
回复
我认为还是用database link 好一点
zhenchun
2002-12-19
打赏
举报
回复
用PowerBuilder另存为一个临时文件,再新建数据库,导入数据即可
hotsmile
2002-12-19
打赏
举报
回复
具体说说dblink,数据库复制吧!
keisar
2002-12-19
打赏
举报
回复
1、向楼上各位所说用exp\imp来回折腾。
2、建dblink,作数据库复制。
apusic
2002-12-19
打赏
举报
回复
按照上面所说都不行吗?
windycloud
2002-12-19
打赏
举报
回复
导入
IMP SYSTEM/MANAGER FROMUSER = FUSER_NAME TOUSER = USER_NAME FILE = C:\EXPDAT.DMP COMMIT = Y
导出
exp userid/<password>@<service_name> file=<dmp文件> full=y
wanghai
2002-12-19
打赏
举报
回复
exp imp
jin0607
2002-12-19
打赏
举报
回复
如果你的两台数据库中有一个不是单机版,就可以在两台数据库之间建立dblink,
然后用copy 命令将数据库中的表分别导入另一个数据库,这样做可以避免用exp
出现的很多问题,如字符集问题、大数据表问题和字段中含特殊字符等问题,这些问题用exp很难解决。
ropriest
2002-12-19
打赏
举报
回复
1、在需要导入的数据库中,建立一个同名(便于使用时方便)的用户表空间
2、然后用导出数据库:
for 9i
exp <user>/<password>@<service_name> file=<dmpname>
for 8i
exp80 <user>/<password>@<service_name> file=<dmpname>
3、把导出的dmp文件用Imp导入需要导入的数据库:
imp <user>/<password> file=<dmpname.dmp> fromuser=<user> touser=<user>
完成后即可。
yuxuan
2002-12-19
打赏
举报
回复
1、首先把需要导出的数据库用Exp导出Dmp文件:(在dos命令行窗口中执行)
exp <user>/<password> file=<dmpname.dmp>
2、把Dmp文件用Imp导入需要导入的数据库:
imp <user>/<password> file=<dmpname.dmp> fromuser=<user> touser=<user>
3、等待完成
jiezhi
2002-12-19
打赏
举报
回复
1st method:create a dblink between the two server and execute sql like this:insert table1 select * from table1@dblink_name;
2nd method:use exp/imp
jlandzpa
2002-12-19
打赏
举报
回复
exp then imp
两个
oracle
相互
查询,两台
oracle
数据库
相互
导数
据
两台
oracle
数据库
相互
导数
据案例说明:有A,B两台
oracle
数据库
,都为10g,现在有一个A
数据库
中one表的几条数据要插入到B
数据库
中的one表?在网上查阅了一下,可以通过在A上建立dblink,当然在B机上建立也是一样的。...
两台
oracle
数据库
相互
导数
据
案例说明: 有A,B两台
oracle
数据库
,都为10g,现在有一个A
数据库
中one表的几条数据要插入到B
数据库
中的one表?在网上查阅了一下,可以通过在A上建立dblink,当然在B机上建立也是一样的。打开sqlplus终端,或者任意的...
Oracle
数据库
详解(超详细)
文章目录
Oracle
数据库
详解一、数据类型1.数字型2.字符型3.日期型二、运算部分1. 关系运算2. 集合运算3. 算术运算4. 数据类型间
相互
转换5. 特殊字符查询运算三、DQL1. 通用模板2. 运行顺序3. 子查询4. 连接查询a.连接...
不同ip地址的两个
oracle
数据库
进行
相互
操作的解决思路
第一步,在操作的
数据库
上 创建另外一个提供数据的
数据库
的链接 create database link XXX connect to userbj identified by bj123 using 'tns_xj_to_bj'; ( 1.XXX是随便取的链接名称,方便后面查询即可 2....
一个完整的
Oracle
数据库
包括两个部分:
数据库
和
数据库
实例。
数据库
是存储数据的多个物理文件的集合,如控制文件,数据文件,参数文件,日志文件,临时文件等 ,它是静态的、永久的,只要文件存在它就存在。
数据库
名(db_name)就是对
数据库
的标识。 (2)
数据库
实例 oarcle...
基础和管理
17,377
社区成员
95,127
社区内容
发帖
与我相关
我的任务
基础和管理
Oracle 基础和管理
复制链接
扫一扫
分享
社区描述
Oracle 基础和管理
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章