Oracle
  • 记一次oracle数据库迁移至mysql数据库(表同步)

    一、利用Navicat将oracle迁移至mysql数据库 1、建立数据传输 2、选择需要迁移的数据库跟目标库 3、数据传输选项  4、选择需要迁移表信息 选好需要同步的表之后点击开始即可  二、迁移之后遇到的一些问题 1、大小写问题 由于oracle不区分大小写,所以同步过来的表及字段我默认为全部大写,但是在系统中表名并不是全部大写,比如一个mysqlTest表,数据库中是MYSQLTEST,但是程序中的sql是 SELECT * FROM mysqlTest,那就会报错mysqlTest表不存在,因此需要设置mysql不区分大小写。 进入mysql的my.cnf目录下,比如/etc/my.cnf,然后在后边加上 lower_case_table_names=1 lower_case_table_names=1 然后重启mysql即可。 2、数据库函数问题 比如一些 Unknown column 'sysdate' in 'where clause' ,oracle使用sysdate来取当前时间,mysql则需要加括号sysdate(),或者使用 CURRENT_TIMESTAMP(),包括其他截取,分页(limit跟rownum)等就不赘述 3、sql语句是否使用空格隔开问题 oracle中使用以下语句 ,可以正常查询,但是在mysql中则会报错 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'a.age<21' at line 1 SELECT * from test a WHERE a.id>10and a.age<21 ; 在10和and之间加一个空格即可解决 SELECT * from test a WHERE a.id>10 and a.age<21 ; 4、关于子查询别命名问题 比如分页的时候可以这样查询总数,oracle可以正常返回,mysql则会报错 > 1248 - Every derived table must have its own alias SELECT count(*) FROM(SELECT * from test ); 需要给子查询加一个别命名 SELECT count(*) FROM(SELECT * from test ) a; 5、数据库自增问题 oracle中可以使用序列号自增,select SEQ_TES……

    SE_Meng 2024-11-20
    8 0 0
  • Oracle数据库启动过程

    一、Oracle数据库的四种状态 Oracle数据库有四种状态:SHUTDOWN、NOMOUNT、MOUNT、OPEN. 二、Oracle数据库的启动过程详解 Oracle数据库启动主要包括三个过程: (1) shutdown状态 ;= 数据库没有启动 (2)启动数据库到 NOMOUNT 状态;=(只是启动instance实例,尚未打开控制文件)= 启动后台进程+分配了内存 (3)启动数据库到 MOUNT 状态;=(加载控制文件)加载了 controlfile (4)启动数据库到 OPEN 状态;=(执行控制文件,打开数据文件和redo日志文件) 三、执行 startup 命令,Oracle数据库会依次完成这三个过程; 另外,也可以通过手工命令依次进行: 1、数据库启动到NOMOUNT 状态 该状态查询不到控制文件和数据文件 SQL> startup nomount ORACLE instance started. Total System Global Area 3774873224 bytes Fixed Size 9141896 bytes Variable Size 788529152 bytes Database Buffers 2969567232 bytes Redo Buffers 7634944 bytes SQL> select status from v$instance; STATUS ------------------------ STARTED SQL> select status from v$controlfile; no rows selected SQL> select status from v$datafile; select status from v$datafile * ERROR at line 1: ORA-01507: database not mounted SQL> select status from v$log; select status from v$log * ERROR at line 1: ORA-01507: database not mounted 已启动实例进程 [oracle@rhel dbs]$ ps -ef |grep sanshi oracle 126788 1 0 17:28 ? 00:00:00 ora_pmon_sanshi oracle 126790 1 0 17:28 ? 00:00:00 ora_clmn_sanshi oracle 126792 1 0 17:28 ? 00:00:00 ora_psp0_sanshi oracle 126795 1 0 17:28 ? 00:00:01 ora_vktm_sanshi oracle 126799 1 0 17:28 ? 00:00:00 ora_gen0_sanshi oracle 126801 1 0 17:28 ? 00:00:……

    SE_Meng 2024-11-19
    9 0 0
  • Oracle的快速入门

    概念了解 Oracle: Oracle数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库。可以看作是 Oracle 就只有一个大数据库。 实例: 一个 Oracle实例(OracleInstance)有一系列的后台进程(BackguoundProcesses)和内存结构(Memory Structures)组成。一个数据库可以有 n 个实例 表空间: Oracle 对物理数据库上相关数据文件(ORA 或者 DBF文件)的逻辑映射用户是在实例下建立的。不同实例可以建相同名字的用户 数据文件: 数据库的物理存储单位 基础语法 空间操作 创建表空间 create tablespace hello datafile 'c:\hello.dbf' size 100m autoextend on next 10m; 删除表空间 drop tablespace hello; 用户操作 解锁scott用户 alter user scott account unlock; 解锁scott用户的密码【此句也可以用来重置密码】alter user scott identified by tiger; 创建用户 create user tableSpace identified by tableSpace default tablespace tableSpace; 授予角色 角色类型 connect: 连接角色,基本角色 resource: 开发者角色 dba: 超级管理员角色 授予角色 grant dba to user; 基础查询 日期查询 查询入职天数 select sysdate-e.hiredate from emp e; 明天此刻 select sysdate+1 from dual; 查询入职月数 select months_between(sysdate,e.hiredate) from emp e; 查询入职周数 select round((sysdate-e.hiredate)/7) from emp e; 日期转字符串(fm可去掉0) select to_char(sysdate, 'fm yyyy-mm-dd hh24:mi:ss') from dual; 字符串转日期 select to_date('2020-2-24 17:2:32', 'fm yyyy-mm-dd hh24:mi:ss') from dual; 其他 给emp表中员工起中文名 select e.ename, case e.ename when 'SMITH' then '曹贼' when 'ALLEN' then '大耳贼' when 'WARD' then '诸葛小儿' --else '无名' end from emp e; oracle专……

    SE_Meng 2024-11-18
    6 0 0
  • Oracle database oracle 12c 单节点 安装部署

    oracle12c单节点部署 环境情况 linux环境: #cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) oracle版本: 12.2.0.1 下载地址:Oracle12c linux-server下载器 oracle安装目录: /oracledata/app/oracle/product/12.2.0/dbhome_1 主机名与实例名: orcl 服务器地址: 172.17.36.23 安装步骤 1、修改主机名 #hostname orcl #vi /etc/sysconfig/network 1 2 etc/sysconfig/network增加: NETWORKING=yes HOSTNAME=orcl 1 2 #vi /etc/hosts 1 etc/hosts 增加: #本机地址 主机名 172.17.36.23 orcl 2、配置yum源 #cd /etc/yum.repos.d/ #wget http://mirrors.aliyun.com/repo/Centos-7.repo #mv Centos-7.repo CentOS-Base.repo #yum clean all #yum makecache #yum update 3、安装依赖 yum -y install binutils compat-libcap1 compat-libstdc++-33 compat-libstdc++-33* elfutilslibelf-devel gcc gcc-c++ glibc* glibc glibc-devel glibc-devel* ksh libgcc* libgcc libstdc++ libstdc++ libstdc++-devel libstdc++-devel* libaio libaio* libaio-devel libaio-devel*.i686 make sysstat unixODBC unixODBC* unixODBC-devel unixODBCdevel* libXp 4、创建Oracle用户与组 #groupadd --gid 54321 oinstall #groupadd --gid 54322 dba #groupadd --gid 54323 oper #useradd --uid 1101 --gid oinstall --groups dba,oper oracle #passwd oracle 5、修改内核参数(可参考其他环境) #cp /etc/sysctl.conf /etc/sysctl.conf.bkup #vi /etc/sysctl.conf etc/sysctl.conf: # Controls IP packet forwarding net.ipv4.ip_forward = 0 # Controls source route verification net.ipv4.conf.default.rp_filter = 1 # Do not accept source routing net.ipv4.conf.default.accept_source_route = 0 # Controls ……

    SE_Meng 2024-11-15
    6 0 0
  • Oracle19C入门到熟练002-入门简介

    视频教程 新版Oracle19C入门到熟练_哔哩哔哩_bilibili 学习要求 有一定关系型数据库知识储备 教学目标 掌握关系型数据库理论, 了解Oracle相关 数据库概念 数据库 数据库是按照某种数据结构来组织、存储和管理数据的仓库。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。 数据库管理系统 数据库管理系统(Database Management System,DBMS)是一种操纵和管理数据库的大型软件,是用于建立、使用和维护数据库。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过dbms访问数据库中的数据,数据库管理员也通过dbms进行数据库的维护工作。 关系型数据库管理系统 关系数据库管理系统(Relational Database Management System:RDBMS)是指包括相互联系的逻辑组织和存取这些数据的一套程序 (数据库管理系统软件)。关系数据库管理系统就是管理关系数据库,并将数据逻辑组织的系统。 数据表 数据表是由表名、表中的字段和表的记录三个部分组成的。设计数据表结构就是定义数据表文件名,确定数据表包含哪些字段,各字段的字段名、字段类型、及宽度,并将这些数据输入到计算机当中。 关系 关系是笛卡儿积的有一定意义的、有限的子集,所以关系也是一个二维表,表的每一行对应一个元组,表的每一列对应一个域。由于域可以相同,为了加以区分,必须对每列起一个唯一的名字,称为属性(Attribute)。n目关系有n个属性。当n=1时,称该关系为单元关系,当n=2时,称该关系为二元关系。 SQL 结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。 Oracle概念 Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数……

    SE_Meng 2024-11-14
    7 0 0
  • oracle 实现自增长

    MySQL自增长与Oracle序列的区别: 自增长只能用于表中的其中一个字段 自增长只能被分配给固定表的固定的某一字段,不能被多个表共用. 自增长会把一个未指定或NULL值的字段自动填上. 在mysql中添加序列,请看下面的实例: 在MYSQL里有这样一张表:  CREATE TABLE Movie(   id           INT NOT NULL AUTO_INCREMENT,   name     VARCHAR(60) NOT NULL,   released YEAR NOT NULL,   PRIMARY KEY (id)   ) ENGINE=InnoDB;   INSERT INTO Movie (name,released) VALUES ('Gladiator',2000);   INSERT INTO Movie (id,name,released) VALUES (NULL,'The Bourne Identity',1998);   在ORACLE是这样的:  CREATE TABLE Movie(   id          INT NOT NULL,   name     VARCHAR2(60) NOT NULL,   released INT NOT NULL,   PRIMARY KEY (id)   );   CREATE SEQUENCE MovieSeq;   INSERT INTO Movie (id,name,released) VALUES (MovieSeq.NEXTVAL,'Gladiator',2000);   在oracle下为表添加一个触发器,就可以实现mysql自增长功能:  CREATE OR REPLACE TRIGGER BRI_MOVIE_TRG   BEFORE INSERT ON Movie   FOR EACH ROW   BEGIN     SELECT MovieSeq.NEXTVAL INTO :new.id FROM DUAL;   END BRI_MOVIE_TRG;   .   RUN;   这样,插件记录就可以成为MYSQL风格:  INSERT INTO Movie (name,released) VALUES ('The Lion King',1994);   下面我们来看看如何在mysql数据里使用Oracle序列语法.NEXTVAL 和 .CURVAL. 我们假设在mysql中序列的语法是:  NEXTVAL(’sequence’); CURRVAL(’sequence’); SETVAL(’sequence’,value); 下面就是 CURRRVAL 的实现方案:  DROP TABLE IF EXISTS sequence;   CREATE TABLE sequence (   name              VARCHAR(50) NOT NULL,   current_value INT NOT NULL,   increment       I……

    SE_Meng 2024-11-12
    17 0 0
  • Oracle数据库表主键自增

    Oracle如何设置主键自增 Oracle 无法直接设置逐渐自增 只能通过设置序列 设置触发器来实现主键自增流程如下 创建一个表 预留主键字段ID CREATE TBALE TEST( ID INT PRIMARY KEY, NAME VARCHAR(40) WORD1 VARCHAR (40) ); 创建自增序列 DROP SEQUENCE TEST _tb_seq; CREATE SEQUENCE TEST_tb_seq minvalue 1 maxvalue 99999999 increment by 1 start with 1; /*步长为1*/ 设置触发器实现逐渐自增 --创建触发器 CREATE TRIGGER TEST_tb_tri //触发器创建并命名 BERORE INSERT ON TEST //触发条件:往test表里加入数据之前 BEGIN //触发器启动 SELECT TEST_tb_seq.nextval INTO : NEW.ID FROM DUAL; //设置触发器的主要执行体 END; 加入数据 INSERT INTO TEST (NAME,WORD1) VALUES('什么啊','什么啊2'); over 这样就可以实现Oracle逐渐自增了 注意序列起始号 如果sql运行失败 可能是因为你数据库本来就有数据 注意把自增序列起始值设置成和数据库表里的最大ID相同。

    SE_Meng 2024-11-11
    6 0 0
  • Oracle快速备份表

    1.备份表结构: create table 新表名 as select * from 旧表名 where 1=2; 例如: create table mdm_gw_codebak20210922 as select * from mdm_gw_code where 1=2; 2.备份表数据: insert into 新表名 select * from 旧表名; ​​​​​​​例如: insert into mdm_gw_codebak20210922 select * from mdm_gw_code;

    SE_Meng 2024-05-16
    37 0 0
  • Oracle单表备份三种方案

    备份方案一: 备份 create table [备份名] as select * from [表名]; 恢复 truncate table org_group; insert into org_group select * from [备份名] ; 说明 此种情况适用于,同一个数据库,需要备份某张表。 备份方案二: 备份 oracle用户终端执行: exp [用户名]/[密码] tables=[表一],[表二] file=/home/oracle/table.dmp 恢复 oracle用户终端执行: imp [用户名]/[密码] grants=y commit=y full=y ignore=y file=/home/oracle/table.dmp 备份方案三: 备份 登录sqlplus: sqlplus / as sysdba 创建directory: create directory dpdata as ‘/home/oracle/’; 目录创建以后,就可以把读写权限授予特定用户: grant read, write on directory dpdata to [用户名]; oracle用户终端执行: expdp [用户名]/[密码] tables=[表一],[表二] directory=dpdata dumpfile=table.dmp job_name=cases_export 恢复 登录sqlplus : sqlplus / as sysdba 创建directory: create directory dpdata as ‘/home/oracle/’; 目录创建以后,就可以把读写权限授予特定用户: grant read, write on directory dpdata to [用户名]; oracle用户终端执行: impdp [用户名]/[密码] directory=dpdata dumpfile=table.dmp job_name=cases_export 说明 查询dba_directories查看所有directory: select * from dba_directories; 删除directory: drop directory dpdata;

    SE_Meng 2024-05-15
    134 0 0
  • ORACLE 知识

    一. 插入指定数量的数据 ⏹当需要向表中插入若干测试数据的时候,可通过下面这种方式造数据 先从DUAL虚拟表中检索后造出10000条数据后,再插入到指定的表中 除了主键之类的关键字段之外,其余字段写固定值即可 INSERT INTO 表名 SELECT -- 因为该字段为字符串形式,所以使用TO_CHAR转换 TO_CHAR(100000000 + LEVEL) || 'TEST_CONTENT' -- 固定字段值1 ,'6599' -- 固定字段值2 , '20240323' -- 固定字段值3 , '121212'  FROM DUAL CONNECT BY LEVEL <= 10000; 二. 索引 2.1 创建索引 索引可以由一个字段构成,也可以由多个字段联合构成一个索引 ⏹创建global全局索引 CREATE INDEX 索引名 ON 表名(字段名1,字段名2,...) GLOBAL PARTITION BY HASH(字段名1,字段名2,...) PARTITIONS 256; ⏹创建local局部索引 CREATE INDEX 索引名 ON 表名(字段名) LOCAL ONLINE; 2.2 删除索引 DROP INDEX 索引名 ONLINE; 三. 查询计划 EXPLAN PLAN FOR SQL语句; SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY()); 四. Oracle SQLPlus常用设置 SET LINESIZE用于设置输出行的最大长度。 如果不设置或者设置的值过小,在命令行窗口进行查询的时候可能导致一行内容被截断,无法更好的在页面上显示。 SET PAGESIZE 0; SET LINESIZE 1000; 用于关闭替代变量的替换功能 在 SQLPlus 中,默认情况下,替代变量以 & 开头,并且在执行命令时会被替换为用户输入的值。 执行 SET DEFINE OFF;后,SQL*Plus 将不再替换以 & 开头的内容,而会将&视为普通的文本。 当你需要输入包含 & 字符的文本而不想让 SQL*Plus 将其作为替代变量处理时常用。例如插入的数据为aaa&bbb。 SET DEFINE OFF; Oracle 数据库中启用 SQL 语句执行时间统计的命令。 当运行这个命令后,在执行 SQL 语句时会显示出执行时间,……

    SE_Meng 2024-05-13
    10 0 0