我把服务器上表空间对应的datafile挪了个地方,怎么把表空间对应的datafile重新指定到那个新的位置啊,原来的数据会不会被影响啊

解决方案 »

  1.   

    可以按以下步骤:
    将数据库置于安装状态(STARTUP MOUNT)或将文件脱机(ALTER DATABASE DATAFILE 'filename' OFFLINE);
    在操作系统上移动文件;
    执行 ALTER DATABASE RENAME FILE 'old_filename' TO 'new_filename'; 语句重定位文件。
      

  2.   


    文件是剪切走的,这样他找不到old_filename也可以么
      

  3.   

    sys@SZTYORA> show user;
    USER 为 "SYS"
    sys@SZTYORA> select file#,ts#,name from v$datafile;     FILE#        TS# NAME
    ---------- ---------- ------------------------------------------------------------------------------
             1          0 D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\SYSTEM01.DBF
             2          1 D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\UNDOTBS01.DBF
             3          2 D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\SYSAUX01.DBF
             4          4 D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\USERS01.DBF
             5          6 D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\SM_DATA.DBF
             6          7 D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\UBLOCK01.DBF
             7         10 D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\EYGLE_01.DBF
             9         13 D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\BOOKTBS_01.DBF已选择8行。sys@SZTYORA> select ts#, name from v$tablespace;       TS# NAME
    ---------- ------------------------------------------------------------------------------
             0 SYSTEM
             1 UNDOTBS1
             2 SYSAUX
             4 USERS
            10 EYGLE
             6 SM_DATA
             7 UBLOCK
             9 TEMP_SWITCH
            13 BOOKTBS已选择9行。sys@SZTYORA> alter tablespace eygle offline;表空间已更改。sys@SZTYORA> host
    Microsoft Windows [版本 5.2.3790]
    (C) 版权所有 1985-2003 Microsoft Corp.C:\Documents and Settings\Administrator>e:E:\>md oracle_dbE:\>dir
     驱动器 E 中的卷是 wzs
     卷的序列号是 A04B-203A E:\ 的目录2011-01-18  09:40    <DIR>          2010年年会照片
    2010-10-11  17:09    <DIR>          42755551ca76dd5a669fb1
    2010-09-27  13:17    <DIR>          783206d2cc7e051abd
    2010-10-22  13:43    <DIR>          Apress
    2010-10-13  09:22    <DIR>          luoyoumou_245
    2010-12-14  14:37    <DIR>          mysql_mv
    2011-02-11  16:55    <DIR>          oracle_db
                   0 个文件              0 字节
                   7 个目录 181,440,536,576 可用字节E:\>copy D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\EYGLE_01.DBF E:\oracle_db\
    已复制         1 个文件。E:\>cd E:\oracle_dbE:\oracle_db>dir
     驱动器 E 中的卷是 wzs
     卷的序列号是 A04B-203A E:\oracle_db 的目录2011-02-11  16:56    <DIR>          .
    2011-02-11  16:56    <DIR>          ..
    2011-02-11  16:52     1,073,750,016 EYGLE_01.DBF
                   1 个文件  1,073,750,016 字节
                   2 个目录 180,366,786,560 可用字节E:\oracle_db>exitsys@SZTYORA> alter database rename file 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\EYGLE_01.DBF' to 'E:\oracle_db\EYGLE_01.DBF';数据库已更改。sys@SZTYORA> ALTER tablespace eygle online;表空间已更改。sys@SZTYORA> select file#,ts#,name from v$datafile;     FILE#        TS# NAME
    ---------- ---------- ------------------------------------------------------------------------------
             1          0 D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\SYSTEM01.DBF
             2          1 D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\UNDOTBS01.DBF
             3          2 D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\SYSAUX01.DBF
             4          4 D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\USERS01.DBF
             5          6 D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\SM_DATA.DBF
             6          7 D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\UBLOCK01.DBF
             7         10 E:\ORACLE_DB\EYGLE_01.DBF
             9         13 D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\BOOKTBS_01.DBF已选择8行。sys@SZTYORA>
      

  4.   

    -- 文件是剪切走的,这样他找不到old_filename也可以么-- 从楼主问上面的问题可以看出:楼主对 Oracle 运行原理 狗屁不懂!
      

  5.   


    old_filename 指的是原来的路径和文件名
      

  6.   

    其实 ALTER DATABASE RENAME FILE 'old_filename' TO 'new_filename'; 语句修改的是数据文件在控制文件和数据字典中的记录,并不会在文件系统上处理数据文件。
      

  7.   

    你这个移走是在shutdown的情况下吧?
    如果是关闭状态下移走的,是不会有影响的  在mount状况下 
    startup mount;
    alter database rename file 'old file location' to 'new file location';
    alter database open ;
    这样应该是没问题的
      

  8.   

    首先,你需要知道oracle现在把文件放在哪里.用下面的语句可以看到.
    数据文件位置:
    select name from v$datafile;
    日志文件位置:
    select * from v$logfile;
    控制文件位置:
    select name from v$controlfile;
    临时文件位置:
    select name from v$tempfile;
    全库移动的话,就是移动上面的所有内容.当然,只移动数据文件的话,就datafile那一行.
    移动方法:关闭oracle数据库,然后将文件拷贝到新地方.原地方的文件现在要留一份.然后
    startup mount;
    数据文件这样移动(有多少个数据文件就有多少条这个语句,下同):
    alter database rename file 'E:\ORACLE\ORADATA\DBSERVER\SYSTEM01.DBF' to 'H:\oradata\dbserver\system01.dbf';
    日志文件这样移动:
    alter database rename file 'E:\ORACLE\ORADATA\DBSERVER\REDO01.LOG' to 'H:\oradata\dbserver\redo01.log';
    控制文件直接在pfile里改路径.改完以后执行下面的语句重建一下spfile.
    create spfile from pfile='E:\oracle\admin\dbserver\pfile\init.ora';
    以后控制文件应该就是按照init.ora里规定的路径了走了.
    临时文件没法用上面的方法移动,只能通过重建的方法.首先,需要知道目前用的临时表空间名.(比如是temp)
    select username ,temporary_tablespace from dba_users;
    然后在新位置重新建立一个临时表空间的文件.
    create temporary tablespace temp2 tempfile 'h:\ORADATA\dbserver\TEMP01.DBF' size 10M ;
    然后指定使用新的临时表空间
    alter database default temporary tablespace temp2;
    原来的表空间如果想删除的话:
    drop tablespace temp including contents and datafiles;
    然后关闭oracle,老位置的文件夹可以改个名,然后startup.如果没有报什么错误,而且用最开始的语句看的所有文件都到了新的地方.OK,移植成功.老位置的文件可以del了.
    我就是这样将工业机数据库移植到个人本本上的=.=(本本E盘可用空间太小了).楼主可以试下.