数据库文件移位(一)

前言:需要把本地磁盘的所有数据文件,都移动到存储上去。
步骤概要:
1.shut immediate 停库
2.host cp dbfile   to new path
3.修改参数中controlfile的位置,把数据库启动到mount
4.rename相关文件
5.alter database open;
本次具体实施步骤:
一、查好需要移动的文件,以防漏掉。
SQL>
select name from v$datafile
union all
select name from v$controlfile
union all
select name from v$tempfile
union all
select member from v$logfile;

NAME
--------------------------------------------------
/oracle/oradata/test/system01.dbf
/oracle/oradata/test/undotbs01.dbf
/oracle/oradata/test/sysaux01.dbf
/oracle/oradata/test/users01.dbf
/oradata1/test01.dbf             <--------------注意该文件不在默认目录下。
/oracle/oradata/test/control01.ctl
/oracle/oradata/test/control02.ctl
/oracle/oradata/test/control03.ctl
/oracle/oradata/test/temp01.dbf
/oracle/oradata/test/redo03.log
/oracle/oradata/test/redo02.log
/oracle/oradata/test/redo01.log

12 rows selected.

SQL>
二、用语句生成rename语句。
datafile:
SQL> select ‘alter database rename file ‘||chr(10)||chr(39)||name ||chr(39)||chr(10)||‘ to ‘‘‘||replace(name,‘/oracle/oradata/test‘,‘/oracle/oradata/u1/test‘) ||‘‘‘;‘ aaa from v$datafile;

AAA
--------------------------------------------------------------------------------------------------------------
alter database rename file
‘/oracle/oradata/test/system01.dbf‘
 to ‘/oracle/oradata/u1/test/system01.dbf‘;

alter database rename file
‘/oracle/oradata/test/undotbs01.dbf‘
 to ‘/oracle/oradata/u1/test/undotbs01.dbf‘;

alter database rename file
‘/oracle/oradata/test/sysaux01.dbf‘
 to ‘/oracle/oradata/u1/test/sysaux01.dbf‘;

alter database rename file
‘/oracle/oradata/test/users01.dbf‘
 to ‘/oracle/oradata/u1/test/users01.dbf‘;

alter database rename file
‘/oradata1/test01.dbf‘
 to ‘/oracle/oradata/u1/test/test01.dbf‘;                <------------------------手动修改一下。

CONTROLFILE:
控制文件位置修改不需要通过rename,直接修改参数文件就行。

tempfile:
SQL> select ‘alter database rename file ‘||chr(10)||chr(39)||name ||chr(39)||chr(10)||‘ to ‘‘‘||replace(name,‘/oracle/oradata/test‘,‘/oracle/oradata/u1/test‘) ||‘‘‘;‘ aaa from v$tempfile;

AAA
--------------------------------------------------------------------------------------------------------------
alter database rename file
‘/oracle/oradata/test/temp01.dbf‘
 to ‘/oracle/oradata/u1/test/temp01.dbf‘;

redolog
SQL> select ‘alter database rename file ‘||chr(10)||chr(39)||member ||chr(39)||chr(10)||‘ to ‘‘‘||replace(member,‘/oracle/oradata/test‘,‘/oracle/oradata/u1/test‘) ||‘‘‘;‘ aaa from v$logfile
  2  ;

AAA
--------------------------------------------------------------------------------------------------------------
alter database rename file
‘/oracle/oradata/test/redo03.log‘
 to ‘/oracle/oradata/u1/test/redo03.log‘;

alter database rename file
‘/oracle/oradata/test/redo02.log‘
 to ‘/oracle/oradata/u1/test/redo02.log‘;

alter database rename file
‘/oracle/oradata/test/redo01.log‘
 to ‘/oracle/oradata/u1/test/redo01.log‘;

三、停库,拷贝文件
SQL>shut immediate;
SQL>!
cp /oracle/oradata/test/*    /oracle/oradata/u1/test/
cp  /oradata1/test01.dbf   /oracle/oradata/u1/test/

四、修改一下参数文件对controlfile的描述。

五、SQL>startup mount
         SQL>执行第二步生成的rename语句。
         SQL>alter database open;

时间: 2024-10-06 10:32:09

数据库文件移位(一)的相关文章

Unity3D在Android平台使用嵌入式数据库Sqlite,解决无法找到数据库文件的问题

做一个需要嵌入式数据库Sqlite 的unity3d项目,在pc机上运行良好,需要发布到Android平台上,于是,各种坑爹...会遇到找不到数据库文件的问题.当在pc机上使用sqlite时,当执行SqliteConnection dbConnection = new SqliteConnection("data source = test.db");语句时,如果有这个数据库文件则建立连接,如果没有则创建出这个文件,然后建立连接.当在Android平台上时,扯淡的事情就开始了,总之便不

批处理实现每日自动备份和清除数据库文件

说明 利用任务计划,每天指定时间执行批处理文件: 1.实现自动Copy数据库备份文件至另一台主机上 2.自动删除指定天数的备份文件 1.批处理文件代码 CopyDB2Lan (factory).bat ************************* 代码开始处 *************************  @echo off color 0e cls title Copy DB 到 镜像主机下 (by [email protected])... set desthost=\\172.

SP_attach_db 添加数据库文件

SP_attach_db   用法如下:       EXEC   SP_attach_db   @dbname   =   N'目标数据库名',           //这是你要引入后的数据库名.          @filename1   =   N'源数据库DATA文件完整路径及文件名.MDF',   //指明源数据库的数据文件          @filename2   =   N'源数据库LOG文件完整路径及文件名.LDF'       //指明源数据库日志文件    注:最后一行不要

为什么NTFS删除超过4G大文件或数据库文件后FILE RECORD大小表现为0

为什么NTFS删除超过4G大文件或数据库文件后FILE RECORD大小表现为0? 答:NTFS删除一个文件,必须要完成如下几个流程,才算完结: 1.更改文件系统$bitmap,释放空间 2.更改$mft filerecord项的属性为删除 3.更改$mft:$bitmap的位图信息为0,释放这个filerecord的占用空间 4.清除目录链表中关于本文件的item信息. 这个流程是理想状态下的处理规则,但实际上,最头疼的是OS要考虑这个问题:如果在上述4个步骤中出现中断(如突然断电.死机等),

64位系统使用Access 数据库文件的彻底解决方法

最近,有PDF.NET用户问我怎么在64位系统下无法访问Access数据库的问题,我第一反应是我怎么没有遇到呢?今天一看自己的VS和Office都是32位版本的,所以在VS里面调试访问Access是没有问题的,但是直接使用编译好的.NET程序访问Access,就出问题了,报: 未在本地计算机上注册“Microsoft.Jet.Oledb.4.0”提供程序. 于是,又在公司的电脑上(Win7 64位)做了实验,发现跟家里面的Win8.1 64位 问题一样,上网搜索了一下,大部分都建议将.NET程序

SharedPreferences数据、openFileOutput文件、SQLite数据库文件存储位置

在模拟器中: SharedPreferences将XML文件保存在/data/data/<package name>/shared_prefs目录下, openFileOutput方法将文件保存在/data/data/<package name>/files目录下 SQLite数据库文件存放在/data/data/<package name>/databases目录下 SharedPreferences数据.openFileOutput文件.SQLite数据库文件存储位

读取本地数据库文件

有时候我们可以将类似省份城市的数据库文件存放在assets/文件夹名/××.sql下,当程序在创建数据库时读取该数据库文件,并执行其内的sql语句 在SqLiteOpenHelper类的onCreate方法中调用 executeAssetsSQL(db, "××.sql"); /** * 读取数据库文件(.sql),并执行sql语句 * */ private void executeAssetsSQL(SQLiteDatabase db, String schemaName) { Bu

SqlServer修改数据库文件及日志文件存放位置

--查看当前的存放位置 select database_id,name,physical_name AS CurrentLocation,state_desc,size from sys.master_files  where database_id=db_id(N'数据库名');   --修改文件的存放位置下次启动生效 --testDb为数据库名, alter database 数据库名 modify file ( name = 文件名(不包含后缀), filename = '文件存储路径')

linux系统下迁移mysql数据库文件

linux下(这里是centos),mysql安装后,数据库的数据默认存放在/var/lib/mysql目录下,如果该目录下挂载的磁盘空间很少,不够用,需要迁移到其他的目录位置. 方法一: 参照windows下的方法,把/var/lib/mysql移到需要的目录,再修改/etc/my.cnf文件,指定数据目录.这方面的教程网上很多,大家可以去搜索一下. 方法二: 使用linux下的软连接方法,具体操作如下:(以迁移到/home/mysql/目录为例) 先停止mysql: /etc/init.d/