Oracle 实战手册 工作实战经验总结

news2024/11/23 19:23:29

目录

                                            

一、基本的数据库管理

1、数据库的启动和关闭

​编辑2、如何确定Oracle的版本?

3、如何修改数据库的内存参数

4、修改用户名密码

5、如何查看最大会话数

6、如何修改oracle数据库的用户连接数

7、解锁用户

8、如何获取被锁定的数据库对象

9、如何确定当前连接到数据库的机器和应用程序

10、如何转移数据文件的存储位置

11、如何杀掉被锁住的会话/连接

12、查看数据库字符集

13、查询表空间信息

14、如何查看各个表空间占用情况?

15、如何查有多少个数据库实例

16、如何查询数据库有多少表

17、怎么可以看到数据库有多少个tablespace

18、如何知道数据库中某个表所在的tablespace

19、如何在sqlplus下改变字段大小

20、用户访问授权

21、查看数据文件命令

22、oracle监听命令

23、Oradim的使用

24、oracle网络配置助手

25、Oracle资料库

二、数据库备份/恢复

1、数据库的导出/导入

2、数据泵导出导入

 3、使用数据泵进行数据库版本不同时的导出导入

4、11g空表不能导出的问题

三、损坏控制文件的恢复方法

1、损坏单个控制文件

2、损坏全部控制文件


                                            

一、基本的数据库管理

高级开发人员需要掌握,了解Oracle数据库运行的基本原理,了解其中的概念。

1、数据库的启动和关闭

  1. 2、如何确定Oracle的版本?

SQL> select * from v$version

  2  /

BANNER

----------------------------------------------------------------

Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod

PL/SQL Release 10.2.0.3.0 - Production

CORE    10.2.0.3.0      Production

TNS for 32-bit Windows: Version 10.2.0.3.0 - Production

NLSRTL Version 10.2.0.3.0 – Production

3、如何修改数据库的内存参数

Oracle 10G:

从Oracle 10g开始,Oracle提供了自动SGA的管理(简称ASMM,即Automatic Shared Memory Management)新特性。所谓ASMM,就是指我们不再需要手工设置shared pool、buffer pool等若干内存池的大小,而是为SGA设置一个总的大小尺寸即可。Oracle 10g数据库会根据系统负载的变化,自动调整各个组件的大小,从而使得内存始终能够流向最需要它的地方。

Oracle 10g提供了一个新的初始化参数:sga_target来启动ASMM,该参数定义了整个SGA的总容量。同时,初始化参数statistics_level必须设置为typical或all才能启动ASMM,(默认安装位typical)否则如果设置为basic,则关闭ASMM。 

Oracle 10g还提供了另一个初始化参数sga_max_size。sga_target的值不能超过sga_max_size的值,修改sga_max_size时,必须重启实例才能生效,而sga_target则可以在线修改,立即生效,无须重启实例。

采用自动SGA内存管理时,确定自动调整组件大小的主要参数是SGA_TARGET,这个参数可以在数据库启动并运行时动态调整,最大可以达到SGA_MAX_SIZE参数设置的值(默认等于SGA_TARGET,所以如果想增加SGA_TARGET,就必须在启动数据库实例之前先把SGA_MAX_SIZE设置得大一些)。数据库会使用SGA_TARGET值,再减去其他手动设置组件的大小(如DB_KEEP_CACHE_SIZE、DB_RECYCLE_CACHE_SIZE等),并使用计算得到的内存量来设置默认缓冲区池、共享池、大池和Java池的大小。在运行时,实例会根据需要动态地对这4个内存区分配和撤销内存

查看所有环境变量,在命令窗口输入“set”,输出信息如图,

首先先看下要修改内存的机器装了几个版本的oracle,在命令窗口输入“path”,如下图,可以看到当前机器只装了一个oracle,如果装了两个,而且还想进入到路径在后面的那个,需要修改path变量,把后面的oracle的路径拷贝到前面,格式如

set 变量名=%变量名%;新增变量内容例如:

Set path=oracle路径;%path%

进入该目录下,首先先set到要修改的数据库实例, 

连接数据库,输入命令show parameter sga查看参数:

输入命令修改内存,如图

关闭实例,启动实例,再查看参数,已经修改过来了。

使用命令如下:

SQL> show parameter sga

SQL> alter system set sga_max_size = 350M scope=spfile

SQL> alter system set sga_target = 350M scope=spfile

Oracle 11G:

在11g中oracle引入了自动化内存管理(Automatic Memory Management)概念,仅用两个参数就能完成oracle的内存管理工作。DBA的工作看来又要轻松不少了,看看两个参数:

MEMORY_TARGET:oracle所能使用的最大内存,该参数可以动态调整。MEMORY_MAX_TARGET:MEMORY_TARGET参数所能动态设定的最大值,不能动态调整,需要重启数据库

使用命令如下:

SQL> show parameter memory

SQL> alter system set memory_max_target = 500M scope=spfile

SQL> alter system set memory_target = 500M scope=spfile

但是注意memory_target不能设置的比memory_max_target大,这样重启实例就不能启动了,如果改错了,怎么办呢,先登录到服务器,在服务器本机进行修改,在命令窗口输入如下:

先连接到实例,进入sqlplus

SQL> conn sys/PASSWORD as sysdba

已连接到空闲例程。

SQL> startup

ORA-00837: Specified value of MEMORY_TARGET greater than MEMORY_MAX_TARGET

启动数据库会看见报错了,接着往下操作

SQL> create pfile='d:\x.txt' from spfile;

文件已创建。

在D盘下找到生成的文件,打开找到内存的参数,修改好,再执行下面的命令把文件转换 回去。

SQL> create spfile from pfile='d:\x.txt' ;

文件已创建。

SQL> startup

ORACLE 例程已经启动。

4、修改用户名密码

 SQL> Alter user sys identified by password

  2  ;

用户已更改。 

 DBA 权限的用户或者是用户本身可以执行该操作;

5、如何查看最大会话数

只查询进程数

SQL> SELECT NAME,VALUE FROM V$PARAMETER WHERE NAME LIKE 'proc%';

SQL> show parameter processes

NAME                         TYPE            VALUE

------------------------------------ ------- ------------------------------

aq_tm_processes               integer             1

db_writer_processes            integer             1

job_queue_processes           integer             4

log_archive_max_processes     integer              1

processes                      integer            200

可以看到这里为200个用户。

执行 Select * from v$license可以知道自从实例启动以来,连接数据库的用户session的最大值(SESSIONS_HIGHWATER)和当前值(SESSIONS_CURRENT ),出现进程超过最大数值错误的时候可以查看该视图

6、如何修改oracle数据库的用户连接数

SQL> show parameter processes

NAME                                 TYPE        VALUE

------------------------------------ ----------- ---------------

aq_tm_processes                      integer     0

db_writer_processes                  integer     1

gcs_server_processes                 integer     0

job_queue_processes                  integer     10

log_archive_max_processes            integer     2

processes                            integer     150

SQL> alter system set processes=100 scope=both

  2  /

alter system set processes=100 scope=both

                 *

第 1 行出现错误:

ORA-02095: 无法修改指定的初始化参数

SQL> alter system set processes=100 scope=spfile

  2  /

系统已更改。

SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup open

ORACLE 例程已经启动。

Total System Global Area  335544320 bytes

Fixed Size                  1290496 bytes

Variable Size             109055744 bytes

Database Buffers          218103808 bytes

Redo Buffers                7094272 bytes

数据库装载完毕。

数据库已经打开。

SQL> show parameter processes

NAME                                 TYPE        VALUE

------------------------------------ ----------- --------

aq_tm_processes                      integer     0

db_writer_processes                  integer     1

gcs_server_processes                 integer     0

job_queue_processes                  integer     10

log_archive_max_processes            integer     2

processes                            integer     100

SQL>

7、解锁用户

Alter user  oa  account unlock;

DBA 权限的用户可以执行该操作;

8、如何获取被锁定的数据库对象

select rpad(oracle_username,10) o_name,session_id sid,

decode(locked_mode,0,'None',1,'Null',2,'Row share',

3,'Row Exclusive',4,'Share',5,'Share Row Exclusive',6,'Exclusive') lock_type,object_name ,xidusn,xidslot,xidsqn

  from v$locked_object,all_objects

 where v$locked_object.object_id=all_objects.object_id;

O_NAME       SID      LOCK_TYPE   OBJECT_NAME    XIDUSN   XIDSLOT     XIDSQN

------------- ------------------- ------------------------------ ---------- ---------- ----------

TRAIN       198   Row Exclusive TRAIN_EMPLOYEE    3            28           1102

9、如何确定当前连接到数据库的机器和应用程序

select machine,program from v$session

10、如何转移数据文件的存储位置

Oracle安装到了C盘,表空间也创建到了C盘,目前发现C盘的空间不够用了,现在将表空间的文件转移到一个容量大的盘下边,操作方法:

  1. 先登录sqlplus:
  2. sqlplus /nolog
  3. conn user1/passwd@test
  4. 修改表空间为Offline
    alter tablespace users offline;
  5. 拷贝表空间文件 
    拷贝C:\oracle\product\10.2.0\oradata\orcl\ HR.DBF 到 D:oracledata 
  6. 修改oracle表空间指向地址
    SQL> alter database rename file 'C:\oracle\product\10.2.0\oradata\orcl\ HR.DBF' to 'D:oracledata\HR.DBF';
  7. 修改表空间为Online
    SQL> alter tablespace users online; 

查看数据库的表空间文件存放位置:
select file_name from sys.dba_data_files;

查看表空间空闲大小:

SQL>select tablespace_name ,sum(bytes)/1024/1024||'M' as freespaces from dba_data_files group by tablespace_name;

TABLESPACE_NAME                FREESPACES

------------------------------ -----------------------------------------

TRAIN                          100M

UNDOTBS1                       70M

SYSAUX                         640M

PT6                            500M

USERS                          182.5M

SYSTEM                         700M

11、如何杀掉被锁住的会话/连接

ALTER SYSTEM KILL SESSION ‘SID,SERIR#’;

查询被锁住的会话。

SELECT a.object_id, a.session_id, b.object_name,c.sid,c.serial#,c.username,c.machine,c.program

  FROM v$locked_object a, dba_objects b, v$session c   

 WHERE a.object_id = b.object_id   

   AND a.SESSION_ID = c.sid(+);

SQL> alter system kill session '150,23'

  2  /

系统已更改。

12、查看数据库字符集

SELECT * FROM NLS_DATABASE_PARAMETERS;

SELECT * FROM V$NLS_PARAMETERS;

经常用到的是数据库字符集NLS_CHARACTERSET,值为“ZHS16GBK”,在进行数据迁移的时候最好保证两个数据库的数据集一致;

13、查询表空间信息

SELECT * FROM DBA_DATA_FILES;

包含字典管理表空间和本地管理表空间2部分,可以看到表空间包括的各数据文件,及其所在的物理位置、大小。

14、如何查看各个表空间占用情况?

SQL>  select

  2  b.file_id 文件ID号,

  3  b.tablespace_name 表空间名,

  4  b.bytes 字节数,

  5  (b.bytes-sum(nvl(a.bytes,0))) 已使用,

  6  sum(nvl(a.bytes,0)) 剩余空间,

  7  sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比

  8  from dba_free_space a,dba_data_files b

  9  where a.file_id=b.file_id

 10  group by b.tablespace_name,b.file_id,b.bytes

 11  order by b.file_id

 12  /

  文件ID号 表空间名                 字节数     已使用   剩余空间   剩余百分比

---------- ------------------------------ ----------   ---------- ---------- ------------------

          1 SYSTEM                 503316480  493617152  9699328  1.92708333

         2 UNDOTBS1               57671680   54788096    2883584    5

         3 SYSAUX                  262144000  254083072    8060928   3.075

         4 USERS                    5242880     458752    4784128  91.25

对于自增长的表空间来说,剩余百分比并不重要;需要检查下文件的当前大小是否即将达到操作系统允许的最大值,如果是的话需要增加数据文件到相应的表空间。

15、如何查有多少个数据库实例

SQL>SELECT * FROM V$INSTANCE;

就目前的数据库应用情况来看,一般一个数据库下只有一个数据库实例;

16、如何查询数据库有多少表

SQL>select * from all_tables; 该语句包含所有的数据库表。

某个用户下有多少表可以通过如下SQL查询

select * from all_tables t where t.OWNER='IETD'。

17、怎么可以看到数据库有多少个tablespace

select * from dba_tablespaces;

18、如何知道数据库中某个表所在的tablespace

SQL> select tablespace_name from all_tables where table_name='EMP'

  2  /

TABLESPACE_NAME

------------------------------

USERS

19、如何在sqlplus下改变字段大小

alter table table_name modify (field_name varchar2(100));

改大行,改小不行(除非都是空的)

20、用户访问授权

   在scott/tiger这个用户下

     grant select on dept to zhangsan;

    在zhangsan下 可以使用select * from scott.dept;

         看到结果

    

 在scott/tiger这个用户下

       revoke select on dept from zhangsan;撤销授权

    在zhangsan下 可以使用select * from scott.dept;

         看不到结果

21、查看数据文件命令

select name from v$datafile;

22、oracle监听命令

Lsnrctl命令用来管理Oracle监听器,是一个命令行界面。想调用这个命令行工具,在命令行键入lsnrctl即可。可以在LSNRCTL>提示符下键入help来显示这些命令的一份清单。

Services        列举出服务的一个汇总表及为每个协议服务处理程序所建立和拒绝的连接信息个数

Start   启动指定的监听器

Status  显示指定监听器的状态

Stop    关闭指定的监听器

命令格式:lsnrctl  start/status/stop <listener name>。

23、Oradim的使用

创建例程:
 -NEW -SID sid | -SRVC 服务 [-INTPWD 口令] [-MAXUSERS 数量] [-STARTMODE a|m] [-PFILE 文件] [-TIMEOUT 秒]
   
编辑例程:
 -EDIT -SID sid [-NEWSID sid] [-INTPWD 口令] [-STARTMODE auto|manual] [-PFILE 文件名]     [-SHUTMODE a|i|n]    [-SHUTTYPE srvc|inst|srvc,inst] [-TIMEOUT 秒]
   
删除例程:
      -DELETE -SID sid | -SRVC 服务名称

启动服务和例程:
        -STARTUP -SID sid [-USRPWD 口令] [-STARTTYPE srvc|inst|srvc,inst] [-PFILE 文件名]

关闭服务和例程:
        -SHUTDOWN -SID sid [-USRPWD 口令] [-SHUTTYPE srvc|inst|srvc,inst] [-SHUTMODE a | i | n]

查询帮助:
        -? | -h | -help

例子: 在服务里生成一个新的实例管理服务,启动方式为手工

oradim -NEW -SID test -STARTMODE manual -PFILE "D:\Oracle\admin\test\pfile\inittest.ora

oradim -NEW -SRVC OracleServicetest -STARTMODE manual -PFILE "D:\Oracle\admin\test\pfile\inittest.ora   

注:有效的服务名为 “OracleService” 后跟“ SID” -SID test 与 -SRVC OracleServicetest 等价   

删除此实例或服务 oradim -DELETE -SID test

 oradim -DELETE -SRVC OracleServicetest   

编辑此实例,启动方式改为手动

oradim -EDIT -SID test -STARTMODE manual  

编辑此实例,启动方式改为自动

oradim -EDIT -SID test -STARTMODE auto   

启动test

oradim -STARTUP -SID test

oradim -STARTUP -SID test -STARTTYPE srvc,inst   

只启动test服务

oradim -STARTUP -SID test -STARTTYPE srvc  

只启动test实例

oradim -STARTUP -SID test -STARTTYPE inst  

关闭test

oradim -SHUTDOWN -SID test

oradim -SHUTDOWN -SID test -SHUTTYPE srvc,ins

示例如图

图中是以服务为例子删除,创建,关闭和启动的,注意服务名称。

  1. 24、oracle网络配置助手

netca是oracle net configuration assistance的简称,主要作用是配置监听程序、命名方法配置、本地net服务名配置、目录使用配置。

命令可以输入如图

  1. 25、Oracle资料库

  1. 创建一个EM资料库:emca -repos create
    重建一个EM资料库:emca -repos recreate
    删除一个EM资料库:emca -repos drop
  2. 配置数据库的 Database Control :emca -config dbcontrol db
  3. 删除数据库的 Database Control配置:emca -deconfig dbcontrol db
  4. 重新配置db control的端口(默认端口在1158 )
    emctl start dbconsole
    emca -reconfig ports -dbcontrol_http_port 1160
    emca -reconfig ports -agent_port 3940

    emca -repos create
    emca -config dbcontrol db

    emctl start dbconsole
  5. 重新配置dbconsole的步骤
    emca -repos drop
    emca -repos create
    emca -config dbcontrol db
  6. 其它emctl命令
    先设置ORACLE_SID环境变量后,启动EM console服务 emctl start dbconsole
    先设置ORACLE_SID环境变量后,停止EM console服务 emctl stop dbconsole
    先设置ORACLE_SID环境变量后,查看EM console服务的状态 emctl status dbconsole

可能遇到的问题:

oracle 10g 登录em后提示:

java.lang.Exception Exception in sending Request null 

解决:

出现这种错误一般是因为没有设置时区,一般默认的是agentTZRegion=GMT,也就是GMT。所以大家只要设置了这个东西,然后重新启动dbconsole就可以了。

下面是设置以及重新启动dbconsole的全过程。

第一步,在Oracle安装目录中找到这个文件emd.properties,文件在这里:D:\oracle\product\10.2.0\db_1\你的计算机名_数据库全局变量\sysman\config,大家只要找到以自己计算机命名的这个文件即可,然后依次找到sysman\config这个路劲下,然后就找到了emd.properties这个文件。然后用记事本打开这个文件,在此文件的最后一行你就可以看到agentTZRegion=GMT。

第二步,将agentTZRegion=GMT中的GMT改成Asia/Shanghai,也就是agentTZRegion=Asia/Shanghai,这里特别要注意的是Asia一定首字母大写,Shanghai的首字母也要大些,你也可以用其他的地区,关于时区的列表参考:10.2.0\db_1\sysman\admin\supportedtzs.lst这个路径的文件去查找下中查找。改完后保存就行。

第三步,在cmd下输入输入此命令,>set oracle_sid=xscj(xscj也就是数据库全局变量名,也就是数据库名),回车之后没任何反应。如下图:

第四部,继续输入命令>emctl stop dbconsole(大家一定要注意emctl,最后一个字母是L,不是1)。这一步就是关闭dbconsole,回车之后如下图:

第五步,最后一步,启动原来关闭的dbconsole服务。键入命令>emctl start dbconsole,回车之后如下图:

好了,经过这些操作之后大家重新启动浏览器,然后重新登录企业管理器就会发现java.lang.Exception: Exception in sending Request :: null这个错误没有了。我重新启动浏览器,重新登录后的界面如下图:

  1. 二、数据库备份/恢复

仅考虑数据库运行在非归档模式下的情景,归档模式下的恢复原理和此有很大差别,且难度比较大,由专业的DBA完成比较好。

1、数据库的导出/导入

采用EXP进行数据逻辑备份,业务数据库采用此种方式,此方法不需要数据库运行在归挡模式下,备份简单,而且可以不需要外部存储设备。EXP支持三种模式:表备份、用户备份和完全备份

  1. 完全:

         EXP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y

          如果要执行完全导出,必须具有特殊的权限EXP_FULL_DATABASE

  1. 用户模式

      EXP SONIC/SONIC    BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC

          这样用户SONIC的所有对象被输出到文件中。

  1. 表模式:

       EXP SONIC/SONIC    BUFFER=64000 FILE=C:\SONIC.DMP TABLES=(SONIC)

          这样用户SONIC的表SONIC就被导出。

在我们的应用系统中,通常采用用户模式导出所有业务数据用户的数据,如

exp apps/cape@ietd file=e:\ietd20121015.dmp log=e:\ietd20121015.log  owner=(appsys,apps,appview,hr,ietd,oa,workflow)

EXP 的进一步用法可在DOS窗口中运行:EXP –help 进行进一步了解;

对应EXP的3种导出模式,IMP也有3种导入模式,(完全、用户、表)

  1. 完全:

          IMP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y

  1.  用户模式:         

  IMP SONIC/SONIC    BUFFER=64000 FILE=C:\SONIC.DMP FROMUSER=SONIC TOUSER=SONIC

          这样用户SONIC的所有对象被导入到文件中。必须指定FROMUSER、TOUSER参数,这样才能导入数据。

  1.  表模式:

          EXP SONIC/SONIC    BUFFER=64000 FILE=C:\SONIC.DMP TABLES=(SONIC)

          这样用户SONIC的表SONIC就被导入。

在我们的应用系统中,采用表模式,分别导入各业务数据用户的数据,如:

--使用IMP导入数据文件, 下面的路径需要修改为实际的值

imp apps/cape@ietd301 file=f:\ietd20121221.dmp log=f:\ietd20121224.log fromuser=appsys touser=appsys fromuser=apps touser=apps fromuser=appview touser=appview fromuser=hr touser=hr fromuser=ietd touser=ietd fromuser=oa touser=oa fromuser=workflow touser=workflow

这种情况下的恢复,可以完全恢复到备份的点上,但是可能是丢失数据的,在备份之后与崩溃之前的数据将全部丢失。

2、数据泵导出导入

Oracle Database 10g引入了最新的数据泵(Data Dump)技术,数据泵导出导入(EXPDP和IMPDP)的作用

1)实现逻辑备份和逻辑恢复。

2)在数据库用户之间移动对象。

3)在数据库之间移动对象。

4)实现表空间搬移。

Oracle官方对此的形容是:OracleDataPump technology enables Very High-Speed movement of data and metadata from one database to another.其中Very High-Speed是亮点。

先说数据泵提供的主要特性(包括,但不限于):

  1. 支持并行处理导入、导出任务
  2. 支持暂停和重启动导入、导出任务
  3.  支持通过Database Link的方式导出或导入远端数据库中的对象
  4. 支持在导入时通过Remap_schema、Remap_datafile、Remap_tablespace几个参数实现导入过程中自动修改对象属主、数据文件或数据所在表空间。
  5. 导入/导出时提供了非常细粒度的对象控制。通过Include、Exclude两个参数,甚至可以详细制定是否包含或不包含某个对象。

数据泵导出导入与传统导出导入的区别

在10g之前,传统的导出和导入分别使用EXP工具和IMP工具,从10g开始,不仅保留了原有的EXP和IMP工具,还提供了数据泵导出导入工具EXPDP和IMPDP.使用EXPDP和IMPDP时应该注意的事项:

  1. EXP和IMP是客户端工具程序,它们既可以在可以客户端使用,也可以在服务端使用。
  2. EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。
  3. IMP只适用于EXP导出文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出文件,而不适用于EXP导出文件。
  4. 数据泵导出包括导出表,导出方案,导出表空间,导出数据库4种方式.

 3、使用数据泵进行数据库版本不同时的导出导入

数据库version

导入导出工具

( from )导出数据库

( to )导入数据库

Expdp/Impdp

11.2.0.2.0

10.2.0.3.0

From 11g(11.2.0.2.0) to 10g(10.2.0.3.0)

实现目的:将 11g(11.2.0.2.0) 中的数据导入到 10g(10.2.0.3.0)环境中去

适用范围:将高版本的数据库导入到低版本的数据库中

使用工具:Expdp/Impdp

导入数据库 version 10.2.0.3.0

在本地进行 版本确定  cmd 下 输入 expdp  -help 可以显示出本机的数据库版本信息

导出数据库   version 11.2.0.2.0

确定 导出数据库的版本信息  在 cmd 下  sqlplus apps/cape@数据库连接符

本文档以 scott/cape@mpm   (mpm是本地配置的连接符,如下图所示:)

在CMD模式下 sqlplus apps/cape@mpm 后,可以看到数据连接符 mpm的数据库版本信息是11.2.0.2.0

进行EXPDP的数据导出

Expdp system/password@mpm dumpfile=20120418.dmp schemas=(apps,oa,workflow,hr,appsys,mpm)  version='10.2.0.3.0'

注意  

1.由于导出,导入的数据库版本不一致,为防止 版本不一致导至 数据无法进行导入

此处一定要带上版本信息,并且 version的值是 需要导入到哪个数据库的版本信息

2.expdp的命令执行,如果本地机器有数据库的话,可以使用本地的expdp命令(当然必须先配置连接导出的数据库的连接符),如果没有,可以在数据库服务器上执行,两者没有区别,但必须带version ,version的值必须是你要导入的数据库的version值。

开始进行数据的导出

数据导出中…….

数据导出完成如下:

数据导出完成后,我们根据显示的路径可以找到 生成的数据文件和日志文件

由于 我们没有指定日志文件名称,系统默认是export.log 文件 ,我们可以查看下导出日志文件内容,确定没有在导出过程中出现异常问题。

将导出的文件(主要是dmp文件)拷贝到目的数据的oracle_home/oracle_sid/dpdump目录下

然后在CMD模式下 执行导入命令行

Impdp system/system@my  dumpfile=20120418.dmp schemas=(apps,appsys,hr,workflow,oa,mpm)

注意:此处的导入不需要写 version 参数了,因为导出的时候已经指定了版本信息,并且版本信息与导入的数控版本信息一致。

在执行导入命令行之前,需要在 导入数据库里创建必须的导入环境,如果之前已经导入过了,那么只需要将相关的用户删除既可,

drop user mpm cascade;

drop user oa cascade;

drop user hr cascade;

drop user workflow cascade;

drop user apps cascade;

drop user appsys cascade;

如果是第一次导入,那么需要创建相关的表空间(schema不需要创建,因为impdp会自动创建用户)创建表空间的代码如下:(因为导出的时候,指定了导出的用户为 apps,appsys,hr,oa,workflow,mpm,那么我们需要创建的表空间就只需要跟这几个用户所对应的表空间既可)

create tablespace apps datafile 'D:\oracle10g\product\10.2.0\oradata\my\apps.dbf' size 100m autoextend on next 10m;

create tablespace appsys datafile 'D:\oracle10g\product\10.2.0\oradata\my\appsys.dbf' size 100m autoextend on next 10m;

create tablespace hr datafile 'D:\oracle10g\product\10.2.0\oradata\my\hr.dbf' size 100m autoextend on next 10m;

create tablespace mpm datafile 'D:\oracle10g\product\10.2.0\oradata\my\mpm.dbf' size 100m autoextend on next 10m;

create tablespace workflow datafile 'D:\oracle10g\product\10.2.0\oradata\my\workflow.dbf' size 100m autoextend on next 10m;

create tablespace oa datafile 'D:\oracle10g\product\10.2.0\oradata\my\oa.dbf' size 100m autoextend on next 10m;

利用PLSQL Developer工具,在需要导入数据库里创建表空间

表空间创建完成后,就可以进行Impdp的数据导入了

按一般情况来说,到此处,数据导入就算完成了,如果发现导入过程中出现错误信息,造成的原因有如下几点:

  1. 在高版本使用了 低版本不支持的函数 如 listagg,regexp_count,正则表达式,等
  2. 在高版本中,引入了一些语义分析,对 一些特殊字符可以进行语义的分析,导至低版本不兼容  比如  高版本中 对” ,” (全角的逗号)的分析可以自动转化成”,”(英文逗号),也就是说在高版本中可以实验 全角的逗号进行SQL语句的拼写。
  3. 应用了其他未导入schema的对象。
  4. 有些对象需要特定的权限,比如从 sys用户下进行的 授权等.

针对这样的问题,最好查看下导入的日志文件,然后对错误的信息进行逐一检查验证。

从高版本数据迁移到低版本上,此方法基本通用,可进行参考执行。

4、11g空表不能导出的问题

正常执行导出语句后发现好多空表没有被导出,我们拿一个表做例子说明解决方法

执行单表导出的语句

exp pt6/cape@ptdev41 file=d:\pt6.dmp log=d:\pt6.log tables=pt6.TEST_DEPT

结果出现:

但实际中表是存在的,只是没有数据而已,是因为Oracle 11g中新加的一功能,Deferred Segment Creation参数引起,Deferred Segment Creation,延迟段创建,如果对象(表)中还没有任何记录需要消耗一个Extent,那么将不会在创建对象(表)时自动创建Segment,这样做的好处是在创建对象时大大提高了速度。但是这么一来,因为对象没有Segment,执行指定表模式EXP导出时,找不到这张表,就会报EXP-00011错误。但是使用exp用户模式导出时,跳过这未创建端的张表了, 所以不会报错。

执行一下语句可以看到该参数的值:

show parameter DEFERRED_SEGMENT_CREATION

创建oracle是该参数是默认打开的,再查询要导出的表

SQL> select segment_name from user_segments where segment_name=’ TEST_DEPT’;

no rows selected

注意:此处的表名是要大写的。

执行结果没有返回值,数据库确实没有给index表创建Segment,这就验证了为什么报错的都是空表。

有几种解决方法,如下:

1.  设置deferred_segment_creation的值为false

     执行:Alter system set deferred_segment_creation=false

此方法只对以后的表有效,之前的表没有Segment的还是没有。

2.  创建表的时候声明立即创建Segment

     create table XXX (XXX  XXX) SEGMENT CREATION IMMEDIATE;

3.   对于已经创建但是还没有Segment的表来说,可以执行alter table XXX allocate

extent来使其创建出 Segment,当然也可以插入一条数据,使其创建Segment,现在问

题是有很多表都有这样的情况,难道都一个个的alter?  其实还有更好的办法,在每个用户下执行以下语句,动态产生表的segment语句,再执行,语句如下:

select 'alter table ' || a.table_name || ' allocate extent;' from user_tables  a

where a.table_name not in

(select segment_name from user_segments where segment_type = 'TABLE');

三、损坏控制文件的恢复方法

1、损坏单个控制文件

损坏单个控制文件是比较容易恢复的,因为一般的数据库系统,控制文件都不是一个,而且所有的控制文件都互为镜相,只要拷贝一个好的控制文件替换坏的控制文件就可以了。

1、控制文件损坏,最典型的就是启动数据库出错,不能mount数据库

SQL>startup

ORA-00205: error in identifying controlfile, check alert log for more info

查看报警日志文件,有如下信息

alter database  mount

Mon May 26 11:59:52 2003

ORA-00202: controlfile: 'D:\Oracle\oradata\chen\control01.ctl'

ORA-27041: unable to open file

OSD-04002: unable to open file

O/S-Error: (OS 2) 系统找不到指定的文件。

2、停止数据库

SQL>shutdown immediate

3、拷贝一个好的控制文件替换坏的控制文件或修改init.ora中的控制文件参数,取消这个坏的控制文件。

4、重新启动数据

SQL>startup

说明:

1、损失单个控制文件是比较简单的,因为数据库中所有的控制文件都是镜相的,只需要简单的拷贝一个好的就可以了

2、建议镜相控制文件在不同的磁盘上

3、建议多做控制文件的备份,长期保留一份由alter database backup control file to trace产生的控制文件的文本备份,产生的文件可以在init.ora中查看参数user_dump_dest的值。

2、损坏全部控制文件

损坏多个控制文件,或者人为的删除了所有的控制文件,通过控制文件的复制已经不能解决问题,这个时候需要重新建立控制文件。

同时注意,alter database backup control file to trace可以产生一个控制文件的文本备份。

以下是详细重新创建控制文件的步骤

1、关闭数据库

SQL>shutdown immediate;

2、删除所有控制文件,模拟控制文件的丢失

3、启动数据库,出现错误,并不能启动到mount下

SQL>startup

ORA-00205: error in identifying controlfile, check alert log for more info

查看报警日志文件,有如下信息

alter database  mount

Mon May 26 11:53:15 2003

ORA-00202: controlfile: 'D:\Oracle\oradata\chen\control01.ctl'

ORA-27041: unable to open file

OSD-04002: unable to open file

O/S-Error: (OS 2) 系统找不到指定的文件。

4、关闭数据库

SQL>shutdown immediate;

5、在internal或sys下运行如下创建控制文件的脚本,注意完整列出联机日志或数据文件的路径,或修改由alter database backup control file to trace备份控制文件时产生的脚本,去掉多余的注释即可。(没有备份的情况下可以在D:\oracle\product\10.2.0\admin\test\bdump\alert_test.log里找相应的脚本,test为数据库名)

SQL> startup nomount

ORACLE 例程已经启动。

Total System Global Area  335544320 bytes

Fixed Size                  1290496 bytes

Variable Size             121638656 bytes

Database Buffers          205520896 bytes

Redo Buffers                7094272 bytes

SQL> Create controlfile reuse set database "test"

  2  MAXINSTANCES 8

  3  MAXLOGHISTORY 1

  4  MAXLOGFILES 16

  5  MAXLOGMEMBERS 3

  6  MAXDATAFILES 100

  7  Datafile

  8  'D:\oracle\product\10.2.0\oradata\test\SYSTEM01.DBF',

  9  'D:\oracle\product\10.2.0\oradata\test\UNDOTBS01.DBF',

 10  'D:\oracle\product\10.2.0\oradata\test\SYSAUX01.DBF',

 11  'D:\oracle\product\10.2.0\oradata\test\USERS01.DBF'

 12  LOGFILE GROUP 1 ('D:\oracle\product\10.2.0\oradata\test\redo01.log') SIZE 5

1200K,

 13  GROUP 2 ('D:\oracle\product\10.2.0\oradata\test\redo02.log') SIZE 51200K,

 14  GROUP 3 ('D:\oracle\product\10.2.0\oradata\test\redo03.log') SIZE 51200K RESETLOGS

 15  /

控制文件已创建。

SQL> recover database

ORA-00283: 恢复会话因错误而取消

ORA-01610: 使用 BACKUP CONTROLFILE 选项的恢复必须已完成

SQL> recover database

ORA-00283: 恢复会话因错误而取消

ORA-01610: 使用 BACKUP CONTROLFILE 选项的恢复必须已完成

SQL> shutdown

ORA-01109: 数据库未打开

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup mount

ORACLE 例程已经启动。

Total System Global Area  335544320 bytes

Fixed Size                  1290496 bytes

Variable Size             125832960 bytes

Database Buffers          201326592 bytes

Redo Buffers                7094272 bytes

数据库装载完毕。

SQL> alter database open resetlogs

  2  /

数据库已更改。

-- Recovery is required if any of the datafiles are restored backups,

-- or if the last shutdown was not normal or immediate.

RECOVER DATABASE

--if the last shutdown was not normal or immediate

--noarchive

-- RECOVER DATABASE UNTIL CANCELUSING BACKUP CONTROLFILE

--archive

-- RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL

-- Database can now be opened normally.

ALTER DATABASE OPEN;

--if recover database until cancel

--ALTER DATABASE OPEN RESETLOGS;

说明:

1、重建控制文件用于恢复全部数据文件的损坏,需要注意其书写的正确性,保证包含了所有的数据文件与联机日志

2、经常有这样一种情况,因为一个磁盘损坏,我们不能再恢复(store)数据文件到这个磁盘,因此在store到另外一个盘的时候,我们就必须重新创建控制文件,用于识别这个新的数据文件,这里也可以用这种方法用于恢复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1394252.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

金融CRM系统是什么?有哪些功能和作用

今年市场经济下行&#xff0c;投资趋向于保守、人们消费降级&#xff0c;对于金融行业来说影响很大。受经济形式的影响加上行业的数字化转型升级&#xff0c;金融企业都在寻求客户管理的新策略&#xff0c;维护好忠实客户、吸引新客户投资。小编认为CRM系统是管理客户的不二之选…

计算机网络——运输层(1)暨小程送书

计算机网络——运输层&#xff08;1&#xff09;暨小程送书 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 运输层概述两个主要协议运输层和网络层的关系网络层运输层总结 多路复用与多路分解多路复用多路分解不同的技术实现时分复用&#xff08;TDM&#xff09;频分复…

maven环境搭建(打包项目)

Maven:直观来讲就是打包写好的代码封装 Apahche 软件基金会&#xff08;非营业的组织&#xff0c;把一些开源软件维护管理起来&#xff09; maven apahce的一个开宇拿项目&#xff0c;是一个优秀的项目构建&#xff08;管理工具&#xff09; maven 管理项目的jar 以及jar与j…

Netty通信中的粘包半包问题(四)

前面我们介绍了特殊分隔符、以及固定长度&#xff0c;今天来介绍一下换行符分割&#xff0c;这种换行符是兼容了Windows和Linux的转义的&#xff0c;前提你的报文中没有换行符或者对换行符做特殊处理 System.getProperty("line.separator")1.Server package splici…

使用 Categraf 采集 Nginx 指标

1. 前言 工作中需要监控 Nginx 的指标&#xff0c;选用的指标采集器是 Categraf&#xff0c;特此记录下&#xff0c;以备后用。 此文档并未详细记录详细的操作细节&#xff0c;只记录了大概的操作步骤&#xff0c;仅供参考。 2. 采集基础指标 2.1. 暴露 Nginx 自带的指标采…

「2023 | 快手」PEPNet:融合个性化先验信息的多场景多任务网络

之前梳理过多场景建模方法&#xff1a;推荐系统(二十四&#xff09;「知识梳理」多场景建模梳理&#xff0c;现在介绍快手提出的多场景多任务方法PEPNet。 Title: PEPNet: Parameter and Embedding Personalized Network for Infusing with Personalized Prior Information F…

GMT学习记录

我主要根据GMT中文手册一步一步学习的&#xff01;&#xff01;&#xff01;&#xff01;B站视频介绍的是5.0老版本仅仅建立基础理解这个软件。 好的&#xff0c;学了一点发现直接把gmt转为shp&#xff0c;就得到我想的文件 gmt数据转shape格式数据 - 简书 (jianshu.com) 命…

OpenEL GS之深入解析视频图像处理中怎么实现错帧同步

一、什么是错帧同步? 现在移动设备的系统相机的最高帧率在 120 FPS 左右,当帧率低于 20 FPS 时,用户可以明显感觉到相机画面卡顿和延迟。我们在做相机预览和视频流处理时,对每帧图像处理时间过长(超过 30 ms)就很容易造成画面卡顿,这个场景就需要用到错帧同步方法去提升…

从前端角度浅谈性能 | 京东物流技术团队(转载)

1 前言 自网站诞生以来&#xff0c;页面白屏时间、用户交互的响应速度等一直都是开发者关心的问题&#xff0c;这直接影响了一个网站能否为用户的浏览提供舒适的服务&#xff0c;而这种舒适度&#xff0c;直接关系着对用户的吸引力&#xff0c;毕竟谁都不能忍受一个页面长达10秒…

HarmonyOS—声明式UI描述

ArkTS以声明方式组合和扩展组件来描述应用程序的UI&#xff0c;同时还提供了基本的属性、事件和子组件配置方法&#xff0c;帮助开发者实现应用交互逻辑。 创建组件 根据组件构造方法的不同&#xff0c;创建组件包含有参数和无参数两种方式。 说明 创建组件时不需要new运算…

What is `addArgumentResolvers` does in `WebMvcConfigurer` ?

addArgumentResolvers 在SpringMVC框架中&#xff0c;主要用于向Spring容器注册自定义的参数解析器。在处理HTTP请求时&#xff0c;SpringMVC会使用这些参数解析器将请求中的数据&#xff08;如查询参数、路径变量、表单数据等&#xff09;转换并注入到控制器方法的参数中。 使…

[C++] VS 2022演练 - 创建和使用静态连接库(Static Lib) (详细图文)

什么是静态连接库? 静态连接库是一种将代码编译成二进制可执行文件时使用的库。在静态链接库中,代码被直接嵌入到可执行文件中,而不是作为外部库单独链接。这意味着当程序运行时,不需要额外的依赖项或库文件。 使用静态连接库的优点是减少了对外部依赖的需求,并且可以更…

【Linux系统编程】环境变量的组织方式

environ和getenv函数 在Linux中&#xff0c;environ是一个全局的外部变量&#xff0c;其类型为char**&#xff0c;存储着系统的环境变量。除了使用主函数中的第三个参数外&#xff0c;我们也可使用environ函数直接访问系统的环境变量。 注意&#xff1a;这里在代码内部使用envi…

使用pdfbox 为 PDF 增加水印

使用pdfbox 为 PDF增加水印https://www.jylt.cc/#/detail?activityIndex2&idbd410851b0a72dad3105f9d50787f914 引入依赖 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>3.0.1</ve…

【计算机组成与体系结构Ⅱ】Tomasulo 算法模拟和分析(实验)

实验5&#xff1a;Tomasulo 算法模拟和分析 一、实验目的 1&#xff1a;加深对指令级并行性及开发的理解。 2&#xff1a;加深对 Tomasulo 算法的理解。 3&#xff1a;掌握 Tomasulo 算法在指令流出、执行、写结果各阶段对浮点操作指令以及 load 和 store 指令进行了什么处…

网工每日一练(1月15日)

1.某计算机系统由下图所示的部件构成&#xff0c;假定每个部件的千小时可靠度为R&#xff0c;则该系统的千小时的可靠度为 ( D ) 。 2.以下IP地址中&#xff0c;属于网络 201.110.12.224/28 的主机IP是&#xff08; B &#xff09;。 A.201.110.12.224 B.201.110.12.238 C.20…

1. SpringBoot3 基础

文章目录 1. SpringBoot 概述2. SpringBoot 入门3. SpringBoot 配置文件3.1 SpringBoot 配置文件基本使用3.2 yml 配置文件 4. SpringBoot 整合 Mybatis5. Bean 管理5.1 Bean 扫描5.2 Bean 注册5.3 注册条件 6. 组合注解7. 自动配置原理8. 自定义 Starter 1. SpringBoot 概述 …

蓝桥杯(C++ 矩形总面积 错误票据 分糖果1 三国游戏 分糖果2)

目录 一、矩形总面积 思路&#xff1a; 代码&#xff1a; 二、错误票据 思路&#xff1a; 代码&#xff1a; 三、分糖果1 思路&#xff1a; 代码&#xff1a; 四、三国游戏 思路&#xff1a; 代码&#xff1a; 五、分糖果2 思路&#xff1a; 代码&#xff1a;…

LLM:Sinusoidal位置编码

1&#xff1a;什么是大模型的外推性&#xff1f; 外推性是指大模型在训练时和预测时的输入长度不一致&#xff0c;导致模型的泛化能力下降的问题。例如&#xff0c;如果一个模型在训练时只使用了512个 token 的文本&#xff0c;那么在预测时如果输入超过512个 token&#xff0…

「云渲染科普」效果图渲染吃显卡还是cpu

准确来说看渲染器属于CPU渲染、还是显卡渲染。通常情况下&#xff0c;不少的渲染工作为了追求渲染效果的和速度&#xff0c;同时利用 CPU 和 GPU 的计算资源&#xff0c;达到最佳的效果图呈现方式。 一、效果图显卡渲染与cpu渲染对比 1、CPU(中央处理器)&#xff1a; - 传统的…