Oracle数据库异常解决

本篇文章是对Oralce遇到的各种问题的一个收集整理,用作后续的排查问题使用


ORA-31655:尚未为作业选择数据或元数据对象

【场景】
数据泵导入数据,执行下面的数据导入时

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
D:\app>impdp jnmcbusi/123456@orcl directory=data_pump_dir dumpfile=MKM_ORGUSER_M
AP.dmp tablespaces=jnmcdb_data

Import: Release 11.2.0.1.0 - Production on 星期四 37 11:20:46 2019

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Produc
tion
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-31655: 尚未为作业选择数据或元数据对象
已成功加载/卸载了主表 "JNMCBUSI"."SYS_IMPORT_TABLESPACE_01"
启动 "JNMCBUSI"."SYS_IMPORT_TABLESPACE_01": jnmcbusi/xxx@orcl directory=da
ta_pump_dir dumpfile=MKM_ORGUSER_MAP.dmp tablespaces=jnmcdb_data
作业 "JNMCBUSI"."SYS_IMPORT_TABLESPACE_01" 已于 11:20:48 成功完成

【原因】
数据泵导入数据的时候,因生产环境和本地环境的表空间不同,需要设置新老不同的表空间

【处理方案】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
D:\app>impdp jnmcbusi/123456@orcl directory=data_pump_dir dumpfile=MKM_CUST_AREA
_FX.dmp remap_tablespace=data_custtemp:jnmcdb_data

Import: Release 11.2.0.1.0 - Production on 星期四 37 11:34:36 2019

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Produc
tion
With the Partitioning, OLAP, Data Mining and Real Application Testing options
已成功加载/卸载了主表 "JNMCBUSI"."SYS_IMPORT_FULL_01"
启动 "JNMCBUSI"."SYS_IMPORT_FULL_01": jnmcbusi/xxx@orcl directory=data_pum
p_dir dumpfile=MKM_CUST_AREA_FX.dmp remap_tablespace=data_custtemp:jnmcdb_data
处理对象类型 TABLE_EXPORT/TABLE/TABLE
处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA
. . 导入了 "JNMCBUSI"."MKM_CUST_AREA_FX" 814.9 MB 8607689
作业 "JNMCBUSI"."SYS_IMPORT_FULL_01" 已于 11:36:11 成功完成

ORA-12546: TNS:permission denied

【场景】
使用root账号启动sqlplus /nolog ,连接数据库
【原因】
root账号下尽量不要操作Oracle相关操作
【处理方案】
切换到oracle用户下,然后执行相关操作


ORA-08189: cannot flashback the table because row movement is not enabled

【场景】
执行数据库表闪回的时候,报错
【原因】
该表不支持闪回,未设置闪回配置
【处理方案】
可以通过select flashback_on from v$database;查询是否设置了闪回,可以通过百度设置对应数据库的闪回配置


ORA-12162: TNS:net service name is incorrectly specified

【场景】
sqlplus / as sysdba连接数据库的时候
【原因】
未设置ORACLE_HOME和ORACLE_SID的问题
【处理方案】

1
2
export ORACLE_HOME="D:\ProgramFiles\Oracle\product\11.2.0\dbhome_1"
export ORACLE_SID=orcl

ORA-00845: MEMORY_TARGET not supported on this system

【场景】
执行启动数据库指令的时候

1
2
SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system

【原因】
这个是因为使用了Oracle 11g的AMM(automatic memory management)内存自动管理,但内存自动管理要求Oracle Parameter中的MEMORY_TARGET要小于共享内存/dev/shm的大小,否则不足以Oracle进行内存的自动管理
【处理方案】

  1. 首先需要看下自己的目前配置的/dev/shm的大小,执行下面的命令,显示是分配了42G,使用了19G,剩余24G,已用45%
    1
    2
    [oracle@xxx ~]$ df -h | grep shm
    tmpfs 42G 19G 24G 45% /dev/shm
  2. 重新分配共享内存大小,执行如下命令下面的这个大小需要按照目前配置的大小慢慢的增,比如目前上面是42个G,适当的先到50G试下能不能启动
    1
    [root@xxx ~]# mount -t tmpfs shmfs -o size=61440m /dev/shm
  3. 尝试启动
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [oracle@xxx ~]$ sqlplus /nolog
    SQL*Plus: Release 11.2.0.1.0 Production on Thu Dec 3 13:18:54 2020
    Copyright (c) 1982, 2009, Oracle. All rights reserved.
    SQL> conn /as sysdba;
    Connected to an idle instance.
    SQL> startup
    # 这里显示启动成功了
    ORACLE instance started.
    Total System Global Area 3.3672E+10 bytes
    Fixed Size 2214976 bytes
    Variable Size 2.4159E+10 bytes
    Database Buffers 9395240960 bytes
    Redo Buffers 115212288 bytes
  4. 上面2中的操作在服务器重启的时候会失效,因此需要修改下配置文件(这样每次重启都会设置/dev/shm缓存区域大小为64Gb)
    1
    2
    3
    [root@xxx ~]$ vim /etc/fstab
    # 然后在最后添加如下配置
    tmpfs /dev/shm tmpfs defaults,size=61440m 0 0
  5. 其他(如果不想调整MEMORY_TARGET/MEMORY_MAX_TARGET可以不用往下看了,如果需要调整那就继续往下看)
    首先看下之前数据库中配置的MEMORY_TARGET/MEMORY_MAX_TARGET分别是多少,执行下面的命令之后会发现分别设置的是32G这个地方我也很迷茫,上面总共分配了42G,明显小于下面配置的32G,为啥不行呢?先不管这个了,先调小MEMORY_TARGET/MEMORY_MAX_TARGET再说
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SQL> show parameter target;
    NAME TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    archive_lag_target integer 0
    db_flashback_retention_target integer 1440
    fast_start_io_target integer 0
    fast_start_mttr_target integer 0
    memory_max_target big integer 32256M
    memory_target big integer 32256M
    parallel_servers_target integer 128
    pga_aggregate_target big integer 0
    sga_target big integer 0
  6. 执行如下命令分别设置MEMORY_TARGET/MEMORY_MAX_TARGET为12G,设置完成后需要重启数据库服务才能生效
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    # 修改memory_max_target
    SQL> alter system set memory_max_target=12288M scope=spfile;
    System altered.
    # 修改memory_target
    SQL> alter system set memory_target=12288M scope=spfile;
    System altered.
    # 停止Oracle实例服务
    SQL> shutdown immediate;
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    # 启动Oracle服务
    SQL> startup;
    ORACLE instance started.

    Total System Global Area 1.2827E+10 bytes
    Fixed Size 2217632 bytes
    Variable Size 6979324256 bytes
    Database Buffers 5771362304 bytes
    Redo Buffers 74465280 bytes
    Database mounted.
    Database opened.

【场景】
【原因】
【处理方案】


【场景】
【原因】
【处理方案】