Linux系统Oracle常见操作

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;
}

报错 operation disallowed: snapshot control file enqueue unavailable

错误信息

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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Sql Server Proc 先看看简单吧

    –以上是语句库 –先看看不带参数的吧 他跟方法一样 可以带参数也可以不带参数(当然我没用过几次不带参数的) –获取一个表吧这种都感觉像视图了 &…

    Linux 2023年6月7日
    0134
  • CentOS7.6 单用户模式下修改root密码

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月7日
    0104
  • 一维热传导方程的回焊炉子炉温模型

    赛题链接 论文链接 1. 有限差分方法 参考 1.1 一阶微分 由泰勒公式: 对上式变形即可以得到 一阶微分的向前差分公式: 将上式中的h用-h替代,则可以得到 一阶微分的向后差分…

    Linux 2023年6月14日
    0112
  • 挂载mount

    挂载mount 1.查看系统挂载的磁盘情况 df df -h 2.挂载:mount 将光驱挂在到/mnt目录: mount /dev/cdrom /mnt #mount 准备挂载的…

    Linux 2023年6月11日
    0100
  • 来的随笔

    感谢各位 posted @2022-01-07 12:08 三途河畔人 阅读(71 ) 评论() 编辑 Original: https://www.cnblogs.com/sthp…

    Linux 2023年6月7日
    0116
  • prometheus监控

    介绍 Prometheus是一个开源监控系统,它前身是SoundCloud的警告工具包。从2012年开始,许多公司和组织开始使用Prometheus。该项目的开发人员和用户社区非常…

    Linux 2023年6月6日
    0105
  • zabbix部署

    zabbix zabbix zabbix介绍 zabbix特点 zabbix部署 zabbix介绍 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开…

    Linux 2023年6月13日
    0141
  • /dev/random 和 /dev/urandom 的原理

    /dev/random 和 /dev/urandom 是 Linux 上的字符设备文件,它们是随机数生成器,为系统提供随机数 随机数的重要性 随机数在计算中很重要。 TCP/IP …

    Linux 2023年6月13日
    089
  • Docker存储卷

    Docker存储卷 1、COW机制 Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。 如果运行中的容器修改了现有的一个已…

    Linux 2023年6月7日
    091
  • python2.6.6安装Image模块

    python2.6.6安装Image模块1、下载Image模块源码地址:http://www.pythonware.com/products/pil/index.htm2、加压文件…

    Linux 2023年6月14日
    0100
  • zabbix自定义监控(当会话登录超过三个就报警)

    安装过程在此省略。 1.agent端去修改配置文件 2.调用自定义内容 vim /etc/zabbix/zabbix_agentd.d/login.conf UserParamet…

    Linux 2023年6月6日
    092
  • 常见框架漏洞

    ThinkPHP 框架漏洞 thinkphp是一个国内轻量级的开发框架,采用php+apache,在更新迭代中,thinkphp也经常爆出各种漏洞,thinkphp一般有think…

    Linux 2023年6月14日
    098
  • 五、用户管理

    id root查看用户uiduid 0管理员uid 1-999系统账号uid 1000-60000普通账号gid 0 管理组gid 1-999 系统组gid 1000-60000 …

    Linux 2023年6月7日
    084
  • JPA作持久层操作

    JPA(Hibernate是jpa的实现) jpa是对实体类操作,从而通过封装好的接口直接设置数据库的表结构。虽然jpa可以直接通过编写java代码来操作数据库表结构,避免了sql…

    Linux 2023年6月7日
    0122
  • vim的使用

    1、概述: Vim 是从 vi 发展出来的一个文本编辑器。具有代码补全、编译及错误跳转等功能 2、vim编辑器的常用命令: 图源:https://vimsky.com/articl…

    Linux 2023年5月27日
    0135
  • SpringSecurity 新版2.7以上 快速入门

    SpringSecurity 快速入门 1、导入依赖 org.springframework.boot spring-boot-starter-security 2、测试三种权限 …

    Linux 2023年6月7日
    0113
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球