1.1 登录默认数据库
首先切换到oracle用户,用数据库默认管理员登录。
[root@tsm-zh01 ~]# su – oracle
[oracle@redhat ~]$ lsnrctl start #开启监听
[oracle@tsm-zh01 ~]$ sqlplus / as sysdba #sqlplus 用户名/密码
SQL> startup; #打开数据库
1.2数据库切换
[oracle@tsm-zh01 ~]$ ps -ef | grep ora_dbw0_$ORACLE_SID
oracle 5956 1 0 Sep21 ? 00:16:18 ora_dbw0_tsmdb1
oracle 5958 1 0 Sep21 ? 00:18:05 ora_dbw0_tsmcnnt1
oracle 5972 1 0 Sep21 ? 00:22:59 ora_dbw0_tsmcity1
在oracle用户下输入
export ORACLE_SID=实例名
SQL> select instance_name from v$instance;
INSTANCE_NAME
YES
SQL> alter database flashback off;
Database altered.
查看数据库实例状态
select instance_name,status from v$instance;
INSTANCE_NAME STATUS
+TSMCITY/tsmcity/datafile/users.290.855748279
ONLINE USERS
+TSMCITY/tsmcity/datafile/undotbs1.292.855748279
ONLINE UNDOTBS1
+TSMCITY/tsmcity/datafile/sysaux.272.855748279
ONLINE SYSAUX
- 关闭RAC上涉及的数据库
srvctl stop database -d XXX
- 将RAC1启动到mount状态
如果用户将原来的表空间建立在RAC1上,则在RAC1上进行操作;如果是RAC2,就到RAC2上进行操作
SQL>startup mount;
这一步非常重要,否则会提示找不到之前的数据表文件
- 通过rman 拷贝文件到磁盘组
如果用户将原来的表空间建立在RAC1上,则在RAC1上进行操作;如果是RAC2,就到RAC2上进行操作
RMAN> connect target /
connected to target database: TSMCITY (DBID=2201482424)
RMAN> copy datafile ‘/home/oracle/test.dbf’ to ‘+data’;
Starting backup at 2017/09/17 02:13:03
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=36 instance=devdb1 device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00006 name=/home/oracle/test.dbf
output file name=+DATA/devdb/datafile/users.273.954900787 tag=TAG20170917T021305 RECID=3 STAMP=954900786
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 2017/09/17 02:13:07
Starting Control File and SPFILE Autobackup at 2017/09/17 02:13:07
piece handle=+FLASH/devdb/autobackup/2017_09_17/s_954900552.304.954900789 comment=NONE
Finished Control File and SPFILE Autobackup at 2017/09/17 02:13:10
- 拷贝完毕后更改文件名
SQL>alter database rename file ‘/home/oracle/test.dbf’ to ‘+DATA/devdb/datafile/USERS.273.954900787’;
- 启动数据库集群
srvctl start database -d XXX
如果是数据库集群建议采用如上操作,在grid里面启动数据库,采用如下单点操作也可以进行
RAC1
SQL> alter database open;
Database altered.
SQL>
RAC2
SQL> startup;
2.1 用户管理
CREATE USER 用户名 IDENTIFIED BY 密码 PROFILE DEFAULT DEFAUL T TABLESPACE 表空间 ACCOUNT UNLOCK;
PROFILE DEFAULT:默认的用户口令限制,比如密码错误次数、密码锁定时间。
ACCOUNT UNLOCK:账户是否启用或者锁定,默认是启用。
DROP USER 用户名 CASCADE;
若用户拥有对象,则不能直接删除,否则将返回一个错误值。指定关键字cascade,可删除用户所有的对象,然后再删除用户。
ALTER USER 用户名 IDENTIFIED BY 改变的口令;
SELECT * FROM ALL_USERS;
2.2 表空间管理
CREATE TABLESPACE 表空间名 DATAFILE ‘/ 路径 / 文件名 .dbf’ SIZE 50M AUTOEXTEND ON NEXT 50M MAXSIZE 2048M [PERMANENT | TEMPORARY] [ EXTENT MANAGEMENT LOCAL | DICTIONARY];
AUTOEXTEND:自动增长,默认关闭 ;
NEXT:下次增长的空间;
MAXSIZE:最大增长空间;
[PERMANENT | TEMPORARY] : 永久或者临时表空间,一般先创建临时表空间再创建永久表空间
[ EXTENT MANAGEMENT LOCAL | DICTIONARY] :管理方式,默认是本地管理;
CREATE USER 用户名 IDENTIFIED BY 密码 DEFAULT TABLESPACE 永久表空间名 TEMPORARY TABLESPACE 临时表空间 ;
删除表空间(先脱机)
DROP TABLESPACE 表空间名字 INCLUDING CONTENTS AND DATAFILES;
删除单个数据文件
ALTER TABLESPACE TEST_SPACE DROP
DATAFILE ‘/DATA/ORACLE/ORADATA/ORCL/TEST2.DBF’; #删除文件
ALTER TABLESPACE 表空间名ADD DATAFILE ‘/路径/aaa.dbf’ SIZE 1000M;
ALTER DATABASE 数据库名 DATAFILE ‘/路径/AA.DBF’ RESIZE 2048M;
使表空间联机|脱机
ALTER TABLESPACE game ONLINE|OFFLINE;
使数据文件脱机|连接
ALTER DATABASE DATAFILE ‘ssss’ OFFLINE|ONLINE;
使表空间只读|读写
ALTER TABLESPACE game READ ONLY|WRITE;
select tablespace_name,status from user_tablespaces;
SET lines 2000
SET pagesize 2000
SELECT total.tablespace_name,
Round(total.mb, 2) AS total_mb,
Round(total.mb – free.mb, 2) AS used_mb,
Round(free.mb, 2) AS free_mb,
Round(( 1 – free.mb / total.mb ) * 100, 2)
|| ‘%’ AS used_pct
FROM (SELECT tablespace_name,
Sum(bytes) / 1024 / 1024 AS mb
FROM dba_free_space
GROUP BY tablespace_name) free,
(SELECT tablespace_name,
Sum(user_bytes) / 1024 / 1024 AS mb
FROM dba_data_files
GROUP BY tablespace_name) total
WHERE free.tablespace_name = total.tablespace_name
ORDER BY tablespace_name;
select tablespace_name, count(*) AS extends,round(sum(bytes) / 1024 / 1024, 2) AS MB,sum(blocks) AS blocks from dba_free_space group BY tablespace_name;
select tablespace_name, sum(bytes) / 1024 / 1024 as MB from dba_data_files group by tablespace_name;
SELECT total.tablespace_name,
Round(total.MB, 2) AS Total_MB,
Round(total.MB – free.MB, 2) AS Used_MB,
Round(( 1 – free.MB / total.MB ) * 100, 2)
|| ‘%’ AS Used_Pct
FROM (SELECT tablespace_name,
Sum(bytes) / 1024 / 1024 AS MB
FROM dba_free_space
GROUP BY tablespace_name) free,
(SELECT tablespace_name,
Sum(bytes) / 1024 / 1024 AS MB
FROM dba_data_files
GROUP BY tablespace_name) total
WHERE free.tablespace_name = total.tablespace_name;
SELECT TABLESPACE_NAME, FILE_ID, FILE_NAME,ROUND(BYTES/(1024*1024),0) TOTAL_SPACE FROM DBA_DATA_FILES ORDER BY TABLESPACE_NAME;
GRANT CONNECT,RESOURCE,DBA TO 用户名;
REVOKE CONNECT,RESOURCE,DBA FROM 用户名; #收回权限
Shutdown 数据库后直接复制相关文件即可,如果需要恢复,停机后再复制到原来的路径,然后开启数据库。
热备份的前提是数据库必须运行在归档模式下, 而且必须备份的只有数据文件,控制文件、重做日志文件、归档日志文件都是靠物理冗余来保护的。
由于数据文件处于备份状态时重做日志后台进程要将这些文件的所有的变化数据块写到重做日志文件中,这对重做日志缓冲区和重做日志文件的压力都增大了,所以需要注意几下加点:
- 重做日志缓冲区和重做日志文件适当增大
- 在联机备份时,每次只备份一个表空间
-
在DML最少的时候做备份
-
设置数据库日志模式为归档模式
Alter system set log_archive _start=true scope=spfile;
上述参数在oracle 10g已经废弃
Shutdown immediate;
Startup mount;
Alter database archive;
- 开启数据库
既然是联机备份,数据库肯定是要保持正常开启状态的。
Alter database open;
- 备份表空间
Alter tablespace 空间名 begin backup; 执行此命令后,用cp命令复制表空间文件即可(用oracle用户拷贝,否则文件权限不对,无法恢复)。
Alter tablespace 空间名 end backup;
select * from v$backup; 查看是否备份成功
- 重做日志写入
select group#,sequence#,status,archived from v$log; 查看当前重做日志:
Alter system archive log current;
Alter system switch logfile;
重做日志文件一般有3个,切换3次。
- 如果数据库某个表空间出现问题,无法正常启动数据库,操作如下;
先将表空间提示的数据文件切换到脱机状态
Alter database datafile 10 offline drop; 数字10为系统提示的文件编号;
Select * from v$recover_file; 查询是否为编号为10的文件报错。
删除并复制之前备份的文件到表空间文件位置。
Alter database open;
Recover datafile 10;
Alter datafile 10 online;
完毕。
3.1 热备份
3.2 逻辑备份
expdp或impdp命令时,可暂不指出用户名/密码@实例名 as 身份,然后根据提示再输入,如:
expdp schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;
该命令不会在操作系统创建真正的目录,最好以oracle等管理员创建。
sql>create directory dpdata1 as ‘/test/dump’;
查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错)
sql>select * from dba_directories;
给scott用户赋予在指定目录的操作权限,最好以system等管理员赋予。
sql>grant read,write on directory dpdata1 to scott;
Scott是数据库用户,如果用管理sys去操作,可以不用授权操作,以 \’sys/密码@实例名 as sysdba\’的形式登录即可。比如\’sys / as sysdba \’
1)按用户导
expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1 logfile=expdpd.log version=10.2.0.4
Schemas=用户名,Logfile可以不指定,系统会自动生成
version如果指定版本号:则可以再低版本中进行恢复保证兼容性
2)并行进程parallel
expdp scott/tiger@orcl directory=dpdata1 dumpfile=scott_%U.dmp parallel=4 job_name=scott3
注意:dumpfile 参数拥有一个通配符 %U,它指示文件将按需要创建,格式为scott_nn.dmp,其中nn 从 01 开始,然后按需要向上增加,上限为最大线程数。
Sql>show parameters cpu #查看cpu支持的线程数。
3)按表名导
expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1
默认导出的该用户名下面的表,如果需要导出其他用户的表 tables=用户名.表名
4)按查询条件导
expdp scott/tiger@orcl directory=dpdata1 dumpfile=expdp.dmp Tables=emp query=’WHERE deptno=20′
5)按表空间导
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example
6)导整个数据库
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y
7)partfile
expdp partfile=expdp.txt
文本文件里面可以写脚本,命令
- 导到指定用户下
impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott
即使用户不存在也可以导入数据,建议先建立用户在导入数据。
2)改变表的owner
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system
将表的所有者从scott变为system
3)导入表空间
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example
4)导入数据库
impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y
5)追加数据
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION
您可以通过 PARALLEL 参数为导出使用一个以上的线程来显著地加速作业。每个线程创建一个单独的转储文件,因此参数 dumpfile 应当拥有和并行度一样多的项目。您可以指定通配符作为文件名,而不是显式地输入各个文件名,例如:
expdp ananda/abc123 tables=CASES directory=DPDATA1 dumpfile=expCASES_%U.dmp parallel=4 job_name=Cases_Export
在并行模式下,状态屏幕将显示四个工作进程。(在默认模式下,只有一个进程是可见的)所有的工作进程同步取出数据,并在状态屏幕上显示它们的进度。
分离访问数据文件和转储目录文件系统的输入/输出通道是很重要的。否则,与维护 Data Pump 作业相关的开销可能超过并行线程的效益,并因此而降低性能。并行方式只有在表的数量多于并行值并且表很大时才是有效的。
3.3 冷备份(非归档模式)
拷贝相关的数据文件、归档日志、重做日志、控制文件即可,可以保持文件一致性。
connect tigger/sccot as sysdba;
shutdown immediate; #先关闭数据库
cp d:/test*.dbf d:export #–cp 文件 目标文件夹 数据文件
cp d:/test*.ctl d:export #–控制文件
cp d:/test*.log d:export #–日志文件
startup;
查看控制文件路径
select status,name from v$controlfile;
查看数据文件路径
select status,file_name from dba_data_files;
查看日志文件
select group#,status,member from v$logfile;
3.4 RMAN备份和恢复
Sql> alter database archivelog; #开启归档
Sql>archive log list; #查看归档状态
一般情况恢复目录是用另外一台服务器的数据库来创建的,以保证当前服务器宕机后,恢复目录仍然可以使用。
Sqlplus 远程用户名/密码@远程数据库名 ;
Sql>create tablespace 表空间名 datafile ‘路径’ size 200m autoextend on next 50m maxsize 500m;
Sql>create user 用户名 idendified by 密码 default tablespace 表空间名; #创建用于管理恢复目录表空间的用户
Sql>grant connect,resource,recovery_catalog_owner to 用户名; #授予用户管理表空间的权限
在恢复用表空间中创建恢复目录
rman
Rman>connect catalog 远程用户/密码@远程数据库名; #用rman 连接到远程数据库
Rman>create catalog; #创建恢复目录
创建完恢复目录后,在远程数据库中登录用户,可以查到多了很多数据表信息。
Rman target /; #用rman连接需要备份的数据库
Rman >connect catalog 用户名/密码@远程数据库名;
Rman>register database; #注册需要备份的数据库到恢复目录
注册完毕后可以在恢复目录看到数据库的注册信息
%c 备份片的拷贝数
%d 数据库名称
%D 位于该月中的第几天 (DD)
%M 位于该年中的第几月 (MM)
%F 一个基于DBID唯一的名称,这个格式的形式为c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII为该数据库的DBID,YYYYMMDD为
日期,QQ是一个1-256的序列
%n 数据库名称,向右填补到最大八个字符
%u 一个八个字符的名称代表备份集与创建时间
%p 该备份集中的备份片号,从1开始到创建的文件数
%U 一个唯一的文件名,代表%u_%p_%c
%s 备份集的号
%t 备份集时间戳
%T 年月日格式(YYYYMMDD)
在rman连接到本地数据库之后,必须再远程连接恢复目录,这样才会将备份信息写入到恢复目录,否则仍然是nocatlog模式,所有信息值存入到控制文件中。
rman target / catalog 用户名/密码@远程数据库名 #前半部分是登录到本地,后半部分连接到远程
rman target /
Rman> connect catalog 远程用户名/密码@远程数据库名;
Rman>backup as compressed backupset database plus archivelog delete all input;
plus archivelog 备份的同时备份归档日志,包括刚刚运行backup所生成的日志
delet all input 删除所有已备份的的归档日志
RMAN>configure channel device type disk format ‘/home/oracle/oradata/backup/data_%d_%M_%U’;
设置数据文件备份路径
RMAN>configure controlfile autobackup format for device type disk to ‘/home/oracle/oradata/backup/ctl_%d_%M_%F’;
设置控制文件备份路径
通道备份
run
{
allocate channel ch1 device type disk;
allocate channel ch2 device type disk;
backup database format ‘/home/oracle/oradata/backup/Data_%d_%M_%U’
plus archivelog format ‘/home/oracle/oradata/backup/log_%d_%M_%U’;
sql ‘alter system archive log current’; #备份所有的归档日志
release channel ch1;
release channel ch2;
}
错误信息
RMAN> backup current controlfile format ‘/tmp/xifenfei.ctl’;
Starting backup at 10-JUN-15
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=628 instance=orcl1 devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
waiting for snapshot control file enqueue
waiting for snapshot control file enqueue
waiting for snapshot control file enqueue
waiting for snapshot control file enqueue
waiting for snapshot control file enqueue
cannot make a snapshot control file
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of backup command on ORA_DISK_1 channel at 06/10/2015 16:03:10
ORA-00230: operation disallowed: snapshot control file enqueue unavailable
查看会话
SQL> SELECT s.SID, USERNAME AS “User”, PROGRAM, MODULE,
2 ACTION, LOGON_TIME “Logon”
3 FROM V$SESSION s, V$ENQUEUE_LOCK l
4 WHERE l.SID = s.SID
5 AND l.TYPE = ‘CF’
6 AND l.ID1 = 0
7 AND l.ID2 = 2;
SID User
MODULE
648 SYS
rman@db1 (TNS V1-V3)
backup full datafile
0000152 STARTED111 03-JUN-15
查询并 kill 相关 session
查询数据库 SID
Sql>select saddr,sid,serial#,paddr,username,status from v$session where sid = 648 ;SADDR SID SERIAL# PADDR USERNAME STATUS—————- ———- ———- —————- ———————————————————— —————-00000000849D3D48 648 319 000000008488C070 SYS ACTIVE
查询系统 SPID
SQL> select spid from v$process where addr in(select paddr from v$session where sid=648);
SPID
Original: https://www.cnblogs.com/simendavid/p/16715743.html
Author: 湖南馒头
Title: Linux系统Oracle常见操作
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/574072/
转载文章受原作者版权保护。转载请注明原作者出处!