有谁对Oracle 9i比较熟悉
ERP系统是另一个公司开发,数据库服务器Oracle 9i for Unix
SCM系统是我们公司开发,要提取ERP中的一部分基础数据,SCM系统是Win2000 Server+Oracle 9i+ASP.NET,ERP那边愿意开放部分表,但不愿做其他多余的工作。我该怎样取得Unix下的数据?
1.我在2000 Server上建立快照,用触发器定时更新是否可行?
2.能不能通过微软的ODBC,ADO之类的直接取?
请高手给一个简单的例子,特别是快照和触发器的例子,分数不够我愿意加到500分,另开主题散分。
ERP系统是另一个公司开发,数据库服务器Oracle 9i for Unix
SCM系统是我们公司开发,要提取ERP中的一部分基础数据,SCM系统是Win2000 Server+Oracle 9i+ASP.NET,ERP那边愿意开放部分表,但不愿做其他多余的工作。我该怎样取得Unix下的数据?
1.我在2000 Server上建立快照,用触发器定时更新是否可行?
2.能不能通过微软的ODBC,ADO之类的直接取?
请高手给一个简单的例子,特别是快照和触发器的例子,分数不够我愿意加到500分,另开主题散分。
快照也可以的吧,不过没怎么用过。
select * from tab@dblink_name,若想更接些,可以建立本地的视图
以下快照例子:Materialized Aggregate View Examples
The following statement creates and populates a materialized aggregate view and specifies the default refresh method, mode, and time: CREATE MATERIALIZED VIEW mv1 REFRESH FAST ON COMMIT
BUILD IMMEDIATE
AS SELECT t.month, p.prod_name, SUM(f.sales) AS sum_sales
FROM time t, product p, fact f
WHERE f.curDate = t.curDate AND f.item = p.item
GROUP BY t.month, p.prod_name;
The following statement creates and populates the materialized aggregate view sales_by_month_by_state. The materialized view will be populated with data as soon as the statement executes successfully. By default, subsequent refreshes will be accomplished by reexecuting the materialized view's query: CREATE MATERIALIZED VIEW sales_by_month_by_state
TABLESPACE my_ts PARALLEL (10)
ENABLE QUERY REWRITE
BUILD IMMEDIATE
REFRESH COMPLETE
AS SELECT t.month, g.state, SUM(f.sales) AS sum_sales
FROM fact f, time t, geog g
WHERE f.cur_date = t.cur_date AND f.city_id = g.city_id
GROUP BY month, state;
使用定时刷新的快照就可以了,不用使用触发器。快照的一个例子--GLOBAL NAME设置为TRUE或者FALSE并不影响快照的使用
--修改数据库名称ALTER DATABASE RENAME GLOBAL_NAME TO "ORCL";是没有必要的
--
--初始化文件global_names = false
job_queue_processes = 16
job_queue_interval = 60
open_links = 4--TOM/MAO用户拥有足够权限
--创建快照的语句最好加上模式(用户)的名称ORCL:主数据库
MYDB:本地数据库--创建共有数据库链
CREATE PUBLIC DATABASE LINK orcl_link
USING 'ORCL';--创建私有数据库链(否则快照不会自动刷新
--每次TOM用户刷新的时候会重新连接对方数据库,但是连接的时候没有带用户名和,密码的信息
CREATE DATABASE LINK orcl_link
CONNECT TO tom IDENTIFIED BY mao; SELECT * FROM global_name@orcl_link;--在ORCL数据库上创建表SNAP_TABLE
CREATE TABLE SNAP_TABLE (ID CHAR(5),VALUE NUMBER(10,2));--创建主键
ALTER TABLE SNAP_TABLE ADD CONSDROPTRAINT snap_table_key PRIMARY KEY (ID);--在ORCL数据库表SNAP_TABLE创建快照日志
CREATE SNAPSHOT LOG ON SNAP_TABLE;--在MYDB上创建快照
CREATE SNAPSHOT TOM.MY_SNAP
REFRESH FAST START WITH SYSDATE NEXT SYSDATE + 1/1440
AS SELECT * FROM TOM.SNAP_TABLE@ORCL_LINK;
--在DBA_STUDIO中察看快照查询--测试快照的刷新
INSERT INTO SNAP_TABLE VALUES('10014',140);
COMMIT ;--1分钟之后可以看到了刷新的结果--删除快照
DROP SNAPSHOT MY_SNAP;
DROP SNAPSHOT SNAPOF_SNAP_TABLE;
--重新设置快照刷新
ALTER SNAPSHOT MY_SNAP
REFRESH COMPLETE
START WITH TRUNC(SYSDATE+1)+8/24
NEXT SYSDATE+15/1440*60;
使用定时刷新的快照就可以了,不用使用触发器。快照的一个例子--GLOBAL NAME设置为TRUE或者FALSE并不影响快照的使用
--修改数据库名称ALTER DATABASE RENAME GLOBAL_NAME TO "ORCL";是没有必要的
--
--初始化文件global_names = false
job_queue_processes = 16
job_queue_interval = 60
open_links = 4--TOM/MAO用户拥有足够权限
--创建快照的语句最好加上模式(用户)的名称ORCL:主数据库
MYDB:本地数据库--创建共有数据库链
CREATE PUBLIC DATABASE LINK orcl_link
USING 'ORCL';--创建私有数据库链(否则快照不会自动刷新
--每次TOM用户刷新的时候会重新连接对方数据库,但是连接的时候没有带用户名和,密码的信息
CREATE DATABASE LINK orcl_link
CONNECT TO tom IDENTIFIED BY mao; SELECT * FROM global_name@orcl_link;--在ORCL数据库上创建表SNAP_TABLE
CREATE TABLE SNAP_TABLE (ID CHAR(5),VALUE NUMBER(10,2));--创建主键
ALTER TABLE SNAP_TABLE ADD CONSDROPTRAINT snap_table_key PRIMARY KEY (ID);--在ORCL数据库表SNAP_TABLE创建快照日志
CREATE SNAPSHOT LOG ON SNAP_TABLE;--在MYDB上创建快照
CREATE SNAPSHOT TOM.MY_SNAP
REFRESH FAST START WITH SYSDATE NEXT SYSDATE + 1/1440
AS SELECT * FROM TOM.SNAP_TABLE@ORCL_LINK;
--在DBA_STUDIO中察看快照查询--测试快照的刷新
INSERT INTO SNAP_TABLE VALUES('10014',140);
COMMIT ;--1分钟之后可以看到了刷新的结果--删除快照
DROP SNAPSHOT MY_SNAP;
DROP SNAPSHOT SNAPOF_SNAP_TABLE;
--重新设置快照刷新
ALTER SNAPSHOT MY_SNAP
REFRESH COMPLETE
START WITH TRUNC(SYSDATE+1)+8/24
NEXT SYSDATE+15/1440*60;