(8.0.26)
https://ez-net.jp/article/4B/v4oWna5J/kpwT0SuSlcvA/
https://qiita.com/ShuM/items/1a960b4ef53f8a08dd5a
https://dev.mysql.com/doc/refman/8.0/ja/general-tablespaces.html#general-tablespaces-moving-non-partitioned-tables
データディレクトリの移動
select @@datadir;
mkdir -p /home/mysql/data
chown -R mysql:mysql /home/mysql
vim /etc/my.cnf
datadir=/home/mysql/data
socket=/home/mysql/data/mysql.sock
[client]
socket=/home/mysql/data/mysql.sock
※client側のsocket設定も明示的に追加する
systemctl stop mysqld
mv /var/lib/mysql/* /home/mysql/data
systemctl start mysqld
systemctl status mysqld
select @@datadir;
※一部のテーブルだけ移動したい場合、テーブルスペースを使用する。
移動先ディレクトリをinnodb_directoriesに指定する必要がある。
vim /etc/my.cnf
innodb_directories=/var/lib/mysql
systemctl restart mysqld
select @@innodb_directories;
select * from information_schema.INNODB_TABLESPACES;
create tablespace tbs1 add datafile '/var/lib/mysql/tbs1.ibd' engine=innodb;
alter table tab1 tablespace tbs1;
テーブルスペースを使用せずに直接ディレクトリを指定する下記構文はalter table文では動作しなかった。
( create table文であれば動作した。)
alter table tab2 data directory '/var/lib/mysql';
(19c)
https://qiita.com/plusultra/items/f75b9286c76e75a37937
https://qiita.com/mikoski01/items/646bb221cdc3ef2a054a
-- PDBの場合
mkdir /home/oracle/pdb1
select file_id,file_name from dba_data_files order by file_id;
alter database move datafile 9 to '/home/oracle/pdb1/system01.dbf' ;
alter database move datafile 10 to '/home/oracle/pdb1/sysaux01.dbf' ;
alter database move datafile 11 to '/home/oracle/pdb1/users01.dbf' ;
alter database move datafile 12 to '/home/oracle/pdb1/usertbs01.dbf' ;
→ 通常表領域、システム表領域、UNDO表領域についてはオンラインでデータファイルを移動可能
※一時表領域はオンラインで移動できないため、データファイルを追加してから削除する
select file_id,file_name from dba_temp_files order by file_id;
alter tablespace temp add tempfile '/home/oracle/pdb1/temp01.dbf' size 128m autoextend on;
alter database tempfile '/u01/app/oracle/oradata/orcl/pdb1/temp01.dbf' offline;
alter database tempfile '/u01/app/oracle/oradata/orcl/pdb1/temp01.dbf' drop including datafiles;
-- CDBの場合
mkdir /home/oracle/cdb
select file_id,file_name from dba_data_files order by file_id;
alter database move datafile 1 to '/home/oracle/cdb/system01.dbf' ;
alter database move datafile 3 to '/home/oracle/cdb/sysaux01.dbf' ;
alter database move datafile 5 to '/home/oracle/cdb/undo01.dbf' ;
alter database move datafile 6 to '/home/oracle/cdb/users01.dbf' ;
→ 通常表領域、システム表領域、UNDO表領域についてはオンラインでデータファイルを移動可能
※一時表領域はオンラインで移動できないため、データファイルを追加してから削除する
select file_id,file_name from dba_temp_files order by file_id;
alter tablespace temp add tempfile '/home/oracle/cdb/temp01.dbf' size 128m autoextend on;
alter database tempfile '/u01/app/oracle/oradata/orcl/temp01.dbf' offline;
alter database tempfile '/u01/app/oracle/oradata/orcl/temp01.dbf' drop including datafiles;
-- REDOログの場合
select * from v$log order by group#;
select * from v$logfile order by group#,member;
alter database add logfile member '/home/oracle/cdb/redo01a.log' to group 1;
alter database add logfile member '/home/oracle/cdb/redo01b.log' to group 1;
alter database add logfile member '/home/oracle/cdb/redo02a.log' to group 2;
alter database add logfile member '/home/oracle/cdb/redo02b.log' to group 2;
alter database add logfile member '/home/oracle/cdb/redo03a.log' to group 3;
alter database add logfile member '/home/oracle/cdb/redo03b.log' to group 3;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
alter database drop logfile member '/u01/app/oracle/oradata/orcl/redo01a.log';
alter database drop logfile member '/u01/app/oracle/oradata/orcl/redo01b.log';
alter database drop logfile member '/u01/app/oracle/oradata/orcl/redo02a.log';
alter database drop logfile member '/u01/app/oracle/oradata/orcl/redo02b.log';
alter database drop logfile member '/u01/app/oracle/oradata/orcl/redo03a.log';
alter database drop logfile member '/u01/app/oracle/oradata/orcl/redo03b.log';
(14)
https://ex1.m-yabe.com/archives/4719
データディレクトリの移動
sudo mkdir /home/postgres
sudo chown postgres:postgres /home/postgres
sudo systemctl stop postgresql-14
vim postgresql.conf
data_directory = '/home/postgres/data'
mv /var/lib/pgsql/14/data /home/postgres
sudo vim /usr/lib/systemd/system/postgresql-14.service
Environment=PGDATA=/var/lib/pgsql/14/data/
↓
Environment=PGDATA=/home/postgres/data/
sudo systemctl daemon-reload
sudo systemctl start postgresql-14
sudo systemctl status postgresql-14
sudo vim ~/.bash_profile
PGDATA=/var/lib/pgsql/14/data
↓
PGDATA=/home/postgres/data/
. ~/.bash_profile
※一部のテーブルだけ移動したい場合は、テーブルスペースを使用する
テーブルスペースではシンボリックリンクが使用されている
mkdir /var/lib/pgsql/14/tbs1
\db+
create tablespace tbs1 owner postgres location '/var/lib/pgsql/14/tbs1';
alter table tab1 set tablespace tbs1;
alter index ind1 set tablespace tbs1;
(2019)
https://docs.microsoft.com/ja-jp/sql/relational-databases/databases/move-database-files?view=sql-server-ver15
https://docs.microsoft.com/ja-jp/sql/relational-databases/databases/move-system-databases?view=sql-server-ver15
cd C:\
mkdir mssql\master
mkdir mssql\tempdb
mkdir mssql\test
-- 1. masterシステム データベースの移動
[SQL Server 構成マネージャー] から [起動時のパラメーターの指定] タブを開き、
マスター "データ" ファイルの新しいパスにパラメーターを変更します
-dC:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\master.mdf
-lC:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\mastlog.ldf
↓
-dC:\mssql\master\master.mdf
-lC:\mssql\master\masterlog.ldf
net stop mssqlserver
move "C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\master.mdf" "C:\mssql\master\master.mdf"
move "C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\mastlog.ldf" "C:\mssql\master\masterlog.ldf"
net start mssqlserver
select name, physical_name as currentlocation, state_desc
from sys.master_files
where database_id = db_id(N'master');
-- 2. tempdbシステム データベースの移動
※tempdb は SQL Server のインスタンスが開始されるたびに再作成されるので、データ ファイルとログ ファイルを物理的に移動する必要はありません。
alter database tempdb modify file ( name = tempdev , filename = 'C:\mssql\tempdb\tempdb.mdf' )
alter database tempdb modify file ( name = temp2 , filename = 'C:\mssql\tempdb\tempdb2.ndf' )
alter database tempdb modify file ( name = templog , filename = 'C:\mssql\tempdb\tempdblog.ldf' )
net stop mssqlserver
net start mssqlserver
select name, physical_name as currentlocation, state_desc
from sys.master_files
where database_id = db_id(N'tempdb');
del "C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\tempdb.mdf"
del "C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\tempdb_mssql_2.ndf"
del "C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\templog.ldf"
-- 3. ユーザー データベースの移動
alter database test modify file ( name = test_dat, filename = 'C:\mssql\test\test.mdf' )
alter database test modify file ( name = test_log, filename = 'C:\mssql\test\testlog.ldf' )
alter database test set offline with rollback immediate;
ファイルを新しい場所に移動します。
move "C:\DATA\test_dat.mdf" "C:\mssql\test\test.mdf"
move "C:\DATA\test_log.ldf" "C:\mssql\test\testlog.ldf"
alter database test set online;
select name, physical_name as currentlocation, state_desc
from sys.master_files
where database_id = db_id(N'test');
-- 4. 一部のテーブルだけ移動したい場合
MOVE TO オプションを指定すると、1 つのトランザクションで、クラスター化インデックスを削除し、
その結果生成されたテーブルを別のファイル グループまたはパーティション構成に移動できます。
mkdir C:\test
alter database test remove file tbs1_01;
alter database test remove filegroup tbs1;
alter database test add filegroup tbs1;
alter database test add file
(name = tbs1_01 ,filename = 'C:\test\tbs1_01.ndf'
) to filegroup tbs1
;
drop table tab1;
create table tab1(col1 int not null);
insert into tab1 values(1);
alter table tab1 add constraint tab1pk primary key(col1);
alter table tab1 drop tab1pk with ( move to tbs1 );
ファイル移動の確認
select * from sys.database_files;
select top 100 t1.col1,t2.file_id,t2.page_id,t2.slot_id
from tab1 t1
cross apply sys.fn_PhysLocCracker(%%physloc%%) as t2
order by t2.file_id, t2.page_id, t2.slot_id
;