-
Oracle–oracle导出表结构到sql文件 ,数据库的导入导出CMD命令exp和imp、使用数据泵导入(impdp)和导出(expdp)
1.oracle导出表结构到sql文件 需要登陆oralce用户: sqlplus 用户名/密码@实例名 SQL> set serveroutput on SQL> set long 999999 SQL> set feedback off SQL> spool temp.sql SQL> SELECT DBMS_METADATA.GET_DDL('TABLE',table_name) FROM USER_TABLES; SQL> spool off 1.数据库导出功能: 1).将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中 exp system/manager@TEST file=d:\daochu.dmp full=y 2).将数据库中system用户与sys用户的表导出 exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys) 3).将数据库中的表table1 、table2导出 exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2) 4).将数据库中的表table1中的字段filed1以"00"打头的数据导出 exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\" 如果是导出远程数据库,需要在Test前加上ip,如system/manager@192.168.1.123/test 2.数据的导入 1).将D:\daochu.dmp 中的数据导入 orcl数据库中。 imp system/manager@127.0.0.1:1521/orcl file=d:\daochu.dmp full=y ignore=y 2).将d:\daochu.dmp中的表table1 导入 imp system/manager@TEST file=d:\daochu.dmp tables=(table1) 数据泵文件 expdp介绍 EXPDP命令行选项 1. ATTACH 该选项用于在客户会话与已存在导出作用之间建立关联.语法如下 ATTACH=[schema_name.]job_name Schema_name用于指定方案名,job_name用于指定导出作业名.注意,如果使用ATTACH选项,在命令行除了连接字符串和ATTACH选项外,不能指定任何其他选项,示例如下: Expdp scott/tiger ATTACH=scott.export_job 2. CONTENT 该选项用于指定要导出的内容.默认值为ALL CONTENT={ALL | DATA_ONLY | METADATA_ONLY} 当设置CONT……
SE_Meng 2024-12-3154 0 0 -
Oracle使用expdp和impdp导出导入数据以及全Oracle库导入导出
一、创建表 [oracle@oraclehost ~]$ sqlplus /nolog; #连接 conn /as sysdba; #创建表 create tablespace BLZK logging datafile '/opt/oracle/oradata/ewell/BLZK.dbf' size 500m autoextend on next 50m maxsize 20480m extent management local; 二、创建用户 1、新增用户并分配对应的表空间 #创建hlzk_liuzhou用户并指定表空间 create user BLZK identified by BLZK123 default tablespace BLZK temporary tablespace temp profile default; #授权 grant connect,resource to BLZK ; grant dba to BLZK ; Grant imp_full_database to BLZK ; 2、新增用户不分配表空间默认USERS表空间,删除命令 #tablespacename:表空间的名字 #d:\data.dbf':表空间的存储位置 #xxx表空间的大小,m单位为兆(M) create tablespace tablespacename datafile 'd:\data.dbf' size xxxm; #username:新用户名的用户名 #password: 新用户的密码 create user username identified by password; #将空间分配给用户 alter user username default tablespace tablespacename; #查询当前用户表空间 select default_tablespace from dba_users where username='username'; #删除用户 drop user username cascade; 三、绑定目录 #root用户: mkdir -p /opt/oracle/oradata/ewell/my_dbdata; chmod -R 777 /opt/oracle/oradata/ewell/my_dbdata; #oracle用户: [oracle@oraclehost ~]$ sqlplus /nolog; SQL> conn /as sysdba; #绑定 CREATE DIRECTORY my_dbdata AS '/opt/oracle/oradata/ewell/my_dbdata'; #查看创建是否成功 select * from dba_directories where DIRECTORY_NAME = 'my_dbdata'; #授权 GRANT read, write ON DIRECTORY my_dbdata TO BLZK; 1、directory操作 directory 用于数据泵 导入、导出创建的目录。 1、查询direc……
SE_Meng 2024-12-305 0 0 -
Python 连接 Oracle 并实现增删改查(cx_Oracle)
1 概述 1.1 安装第三方库 cx_Oracle 参考 CSDN 博客:Python 安装第三方库详解(含离线) 1.2 测试连接 import cx_Oracle # 1.基本信息 user = 'scott' # 用户名 password = '123456' # 密码 host = '127.0.0.1:1521' # 主机:端口 instance = 'orcl' # 服务名 # 2.格式:user/password@host/service_name connect_str = f'{user}/{password}@{host}/{instance}' # 3.测试 try: connect_info = cx_Oracle.connect(connect_str) print(f'[提示]连接成功,信息:{connect_info}') except Exception as e: print(f'[提示]连接失败,报错:{e}') 执行结果: <cx_Oracle.Connection to scott@127.0.0.1:1521/orcl> 2 常用操作 2.1 查询 2.1.1 查询所有记录 import cx_Oracle class Oracle(object): def __init__(self, user_name, password, host, instance): self._conn = cx_Oracle.connect(f'{user_name}/{password}@{host}/{instance}') self.cursor = self._conn.cursor() print('[提示]: 连接成功') def query_all(self, sql): """查询所有记录""" self.cursor.execute(sql) return self.cursor.fetchall() if __name__ == '__main__': test = Oracle('scott', '123456', '127.0.0.1:1521', 'orcl') # 测试:查询所有记录 test_sql = 'select * from scott.dept' result = test.query_all(test_sql) print(result) 执行结果: [提示]: 连接成功 [(10, 'ACCOUNTING', 'NEW YORK'), (20, 'RESEARCH', 'DALLAS'), (30, 'SALES', 'CHICAGO'), (40, 'OPERATIONS', 'BOSTON')] 2.1.2 查询单条记录 import cx_Oracle class Oracle(object): def __init__(self, user_name, password, host, instance): self._conn = cx_Oracle.connect(f'{user_name}/{password}@{host}/{instance}') self.cursor = self._conn.……
SE_Meng 2024-12-275 0 0 -
Oracle分页查询
Oracle分页查询 方法一 -- 40为pageCurrent * pageSize,30 应为为(pageCurrent - 1) * pageSize SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME WHERE 1 = 1 -- 条件 ORDER BY CREATETIME DESC -- 排序 ) A WHERE ROWNUM <= 40 ) WHERE RN > 30 方法二 SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A ) WHERE 30 < RN AND RN <= 40 方法一比方法二效率要高很多,查询效率提高主要体现在 WHERE ROWNUM <= 40 这个语句上。 这是由于CBO 优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。方法一中,第二层的查询条件WHERE ROWNUM <= 40就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。 方法二中,由于查询条件30 < RN <= 40 是存在于查询的第三层,而Oracle无法将第三层的查询条件推到最内层(即使推到最内层也没有意义,因为最内层查询不知道RN代表什么)。在方法二中,Oracle最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,效率要比方法一要低得多。 注意 由于oracle排序算法问题,如果排序遇到相同的条件,比如时间,会使分页后一页包含前一页的内容,所以这个时候要把方法改成下面这两种。 方法一,order by 加上id主键 SELECT * FROM (SELECT tt.*,ROWNUM AS RN FROM (SELECT t.* FROM ${tableName} t where 1=1 -- 条件 ORDER BY t.createTime DESC,t.id -- 排序) tt WHERE tt.ROWNUM <= #{pageNum}*#{pageSize} ) rs WHERE rs.RN > #{pageNum-1}*#{pageSize} 方法二 SELECT * FROM (SELECT tt.*,ROWNUM AS RN FROM (SELECT t.* FROM ${tableName} t where ……
SE_Meng 2024-12-265 0 0 -
Oracle数据库数据丢失恢复的几种方法总结
根据oracle数据库的特点和提供的工具,主要方法有以下几种方法: 利用逻辑备份使用import工具丢失数据的表 利用物理备份来通过还原数据文件并进行不完全恢复 利用dbms_logmnr包从redo log文件中恢复 利用flashback特性恢复数据 前提 为了方便使用方法的介绍,上述恢复方法都将基于以下场景进行:系统管理员在前一天晚上11点用export对数据库做了全库逻辑备份,然后对所有数据文件进行了热备份。第二天上午10点,系统管理员在修改表TFUNDASSET的数据时,由于修改语句的条件写错了,导致一批记录(几千条)的ztm字段被修改成了错误的值,而且已经提交。这个表是资产表,相对而言数据变化不频繁。 一、利用逻辑备份使用import工具恢复丢失的数据 export/import是oracle提供的用于对数据库进行逻辑备份的工具。该工具适用于备份那些数据量不大、业务量不多的数据库系统。因为如果在前一天晚上11点用export做了逻辑备份,那么当今天上午10点数据库意外崩溃时,从备份起到数据库崩溃的这段时间里的数据修改操作(包括DDL和DML)都会丢失。如果丢失数据内的表上的数据是相对比较稳定,也就是说该表上基本没有DML操作,例如标准代码表、分区表里的历史数据,那么采用import来导入该表可以比较完整的恢复数据。如果该表是经常变化的业务表,那么这些丢失的数据只能根据业务情况从纸质记录恢复,或者其他途径恢复。 ▲示例如下:这个表是一个资产表。相对来说,今天系统运行中修改的数据较少,丢失的数据量可以承受或者可以从别的途径恢复。那就可以用import来恢复。 方法一: 1、把这个表的数据备份到另一个表: 2、删除该表的记录: 3、执行下面的命令: 这个命令中在关键字tables中指定需要导入的表名字,ignore=y表示忽略表已经存在的错误。 4、导入结束后,检查表中的记录,并用适当的方……
SE_Meng 2024-11-2827 0 0 -
【oracle】 linux 下oracle 启动监听错误
Message 1070 not found; No message file for product=network, facility=TNSTNS-12545: Message 12545 not found; No message file for product=network, facility=TNSTNS-12560: Message 12560 not found; No message file for product=network, facility=TNSTNS-00515: Message 515 not found; No message file for product=network, facility=TNSLinux Error: 2: No such file or directory oracle环境变量没有配置.
SE_Meng 2024-11-275 0 0 -
linux下Oracle自动启动与停止(二)
概述 让数据库在操作系统启动的时候自动启动,会让数据库的维护变得更加简单、方便。 曾经写过一篇在linux自动启动oracle的文章“linux下Oracle自动启动与停止(一)”http://blog.csdn.net/chenxiaohua/archive/2008/02/26/2121878.aspx。该文章的方法需要用到/etc/oratab、$ORACLE_HOME/bin/dbstart和$ORACLE_HOME/bin/dbshut,显得不够灵活。下面讲解另外一个方法自动启动多个oracle实例和监听器。 文章“创建、启动oracle数据库”讲述了怎样创建多个数据库和实例,并启动这些实例,现在将讲述怎样在系统启动的时候,自动启动这些数据库。 编写脚本 用root用户,进入进入目录/etc/rc.d/init.d,创建文件oracle_linuxdb,该脚本用于启动实例linuxdb,内容如下: 在上面的代码是一个shell脚本,首先设置oracle相关的环境变量,注意ORACLE_SID指定了启动的实例名。 然后赋予oracle_linuxdb执行权限,执行命令:chmod +x oracle_linuxdb 下面可以运行该脚本,进行测试。 启动,运行命令:./oracle_linuxdb start 关闭,执行命令:./oracle_linuxdb stop 可以用sqlplus user/pass@tnsname来测试启动和关闭数据库是否成功。 创建文件oracle_wldev,用于启动数据库实例wldev,内容如下: 然后赋予oracle_wldev执行权限,执行命令:chmod +x oracle_wldev 下面可以运行该脚本,进行测试。 启动,运行命令:./oracle_wldev start 关闭,执行命令:./oracle_wldev stop 可以用sqlplus user/pass@tnsname来测试启动和关闭数据库是否成功。 现在有了启动和关闭oracle的脚本,只要把这些脚本设置好,让系统在启动和关闭的时候,自动执行就好了。 发布 执行如下命令: chkconfig --add oracle_linuxdb chkconfig --add oracle_wldev chkconfig命令运行成功后,在rc2.d,rc3.d,rc4.d,rc5.d下面建立了S80oracle_linuxdb和S80oracle_……
SE_Meng 2024-11-2616 0 0 -
linux下重启oracle服务:监听器和实例
linux下重启oracle服务:监听器和实例 一、在linux下重启oracle数据库及监听器: 方法1: 用root以ssh登录到linux,打开终端输入以下命令: cd $ORACLE_HOME #进入到oracle的安装目录 dbstart #重启服务器 lsnrctl start #重启监听器 cd $ORACLE_HOME #进入到oracle的安装目录dbstart #重启服务器lsnrctl start #重启监听器 ----------------------------------- 方法2: Sql代码 cd $ORACLE_HOME/bin #进入到oracle的安装目录 ./dbstart #重启服务器 ./lsnrctl start #重启监听器 ----------------------------------- 方法3: (1) 以oracle身份登录数据库,命令:su -oracle(2) 进入Sqlplus控制台,命令:sqlplus /nolog(3) 以系统管理员登录,命令:connect / as sysdba(4) 启动数据库,命令:startup(5) 如果是关闭数据库,命令:shutdown immediate(6) 退出sqlplus控制台,命令:exit (7) 进入监听器控制台,命令:lsnrctl(8) 启动监听器,命令:start(9) 退出监听器控制台,命令:exit 二、重启实例: (1) 切换需要启动的数据库实例:export ORACLE_SID=C1(2) 进入Sqlplus控制台,命令:sqlplus /nolog(3) 以系统管理员登录,命令:connect / as sysdba(4) 如果是关闭数据库,命令:shutdown abort(5) 启动数据库,命令:startup(6) 退出sqlplus控制台,命令:exit
SE_Meng 2024-11-2567 0 0 -
Linux下启动Oracle服务和监听程序
linux中启动oracle主要分两步:一个是启动监听器,一个是启动实例。 工具/原料linux 安装 oracle数据库SecureCRT 任意ssh连接工具都可以 方法/步骤一、secureCRT连接到数据库所在的linux机器,切换到oracle用户模式下[root@nstlbeta ~]# su - oracle 二、然后用sqlplus登录到数据库,关闭数据库[oracle@nstlbeta bin]$ sqlplus /nolog //登录sqlplusSQL> connect /as sysdba //连接oracleSQL> startup //起动数据库SQL> exit //退出sqlplus ,起动监听 三、起动监听[oracle@nstlbeta bin]cd��ORACLE_HOME/bin //进入oracle安装目录[oracle@nstlbeta bin]$ lsnrctl start //起动监听 四、客户端连接这样重启监听成功了,可以使用客户端连接了
SE_Meng 2024-11-224 0 0 -
Oracle运维(数据库、监听、重启)
一、概述 二、数据库重启 # su到oracle用户下 [root@localhost ~]# su - oracle #重启数据库 [oracle@localhost ~]$ sqlplus /nolog SQL> conn /as sysdba # 关闭数据库 SQL> shutdown immediate # 数据库启动 SQL> startup SQL> exit shutdown有四个参数,四个参数的含义如下: Normal 需要等待所有的用户断开连接 Immediate 等待用户完成当前的语句 Transactional 等待用户完成当前的事务 Abort 不做任何等待,直接关闭数据库 normal需要在所有连接用户断开后才执行关闭数据库任务,所以有的时候看起来好象命令没有运行一样!在执行这个命令后不允许新的连接 immediate在用户执行完正在执行的语句后就断开用户连接,并不允许新用户连接。 transactional 在拥护执行完当前事物后断开连接,并不允许新的用户连接数据库。 abort 执行强行断开连接并直接关闭数据库。 前三种方式不回丢失用户数据。第四种在不的已的情况下,不建议采用! 经常遇到的问题: 权限问题,解决方法,切换到oracle用户 没有关闭监听器 ,解决方法:关闭监听器 有oracle实例没有关闭,解决办法:关闭oracle实例 环境变量设置不全,解决办法:修改环境变量 三、监听 1、常用命令 前提:登录用户有dba权限,能够进行查看 # 查看监听状态 [oracle@scorl root]$ lsnrctl status # 启用监听 [oracle@localhost ~]$ lsnrctl start # 停掉lsnrctl [oracle@localhost ~]$ lsnrctl stop # 退出oracle用户 [oracle@localhost ~]$ exit logout [root@localhost ~]# 2、案例 # 查看监听状态 [oracle@scorl root]$ lsnrctl status LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 18-JUL-2019 14:45:23 Copyright (c) 1991, 2011, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC15……
SE_Meng 2024-11-218 0 0