有谁对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分,另开主题散分。

解决方案 »

  1.   

    数据库是分开的吧,可以考虑用数据链路呀,DBLINK,你查查这方面的文章很多的。
    快照也可以的吧,不过没怎么用过。
      

  2.   

    同意,用DBLINK简单,就像直接存取自己的表一样(因为对方已经开放了他们的表),如
    select * from tab@dblink_name,若想更接些,可以建立本地的视图
      

  3.   

    快照不用更新,只要相前表更新,它会自动更新。可以通过用ado直接取,就如同表的作用.
    以下快照例子: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;
      

  4.   

    oracle可以很好屏蔽平台差异。
    使用定时刷新的快照就可以了,不用使用触发器。快照的一个例子--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;
      

  5.   

    oracle可以很好屏蔽平台差异。
    使用定时刷新的快照就可以了,不用使用触发器。快照的一个例子--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;