ORACLE创建表空间、用户、授权和Navicat创建序列和触发器及解决ORA-00942、ORA-01219错误

删除
--- 删除用户
DROP user TEST cascade;
--- 删除表空间
drop tablespace TEST including contents and datafiles;
drop tablespace TEST_TEMP including contents and datafiles;
创建

确保路径里的文件夹都是存在的,最后一个是文件名称

---临时表空间
create temporary tablespace TEST_TEMP tempfile 'D:\softwareWork\Oracle\oradata\test\TEST_TEMP.DBF' size 50M autoextend on next 50m maxsize 4096M extent management local;
---表空间
CREATE TABLESPACE TEST DATAFILE 'D:\softwareWork\Oracle\oradata\test\TEST.DBF' size 50M  autoextend on next 50m maxsize 4096M extent management local;
--- 创建用户TEST密码TEST授予表空间TEST
create user TEST identified by TEST default tablespace TEST temporary tablespace TEST_TEMP;
---授权:不授权dba,可能会出现ORA-00942: 表或视图不存在的错误
grant connect,resource,dba to TEST;

Navicat创建序列和触发器

序列

在这里插入图片描述
新建序列
在这里插入图片描述
序列命名建议SEQ_加表名,如:SEQ_USER

触发器

新建触发器
在这里插入图片描述
点击定义
在这里插入图片描述

SEQ_USER是你创建的序列的名称,NEW.ID其中ID是你表里面的主键列名

BEGIN
  select SEQ_USER.nextval into:NEW.ID from dual;
END;

触发器命名建议TRG_加表名,如:TRG_USER

问题描述:因为每次Oracle删除数据库的时候磁盘文件还没删除,然后自己手动停止Oracle,删除磁盘里的.DBF文件导致数据库重启后无法连接。

cmd
sqlplus
sys as sysdba
执行alter database open;查看你报错的数据文件(就是你停止Oracle删除的数据库文件路径
alter database open;

错误提示如下

alter database open
*
第 1 行出现错误:
ORA-01110: 数据文件 6: ‘D:\SOFTWAREWORK\ORACLE\ORADATA\TEST’ #这个就是你停止数据库后删除的文件路径
ORA-01115: 从文件 6 读取块时出现 IO 错误 (块 # 1)
ORA-27069: 试图超出文件范围执行 I/O
OSD-04026: 传递的参数无效。
O/S-Error: (OS 1) 函数不正确。

删除Oracle里已经删除的数据库
alter database datafile 'D:\SOFTWAREWORK\ORACLE\ORADATA\TEST' offline drop;

-- 数据库已更改。

alter database open;

--数据库已更改。

重新使用sys连接数据库即可

Oracle创建表使用自增主键本质上就是使用序列

下面这种默认使用自增主键,允许用户手动填充主键。【不推荐,因为使用自增了,还允许人为填充字段,容易出现主键冲突】

"ID" NUMBER(18,0) GENERATED BY DEFAULT AS IDENTITY

下面这种强制使用自增主键,不允许用户手动填充主键。【推荐,因为这种方式不会导致性能问题】

"ID" NUMBER(18,0) GENERATED ALWAYS AS IDENTITY

完整SQL

CREATE TABLE "DB"."TABLE_NAME" (
  "ID" NUMBER(18,0) GENERATED BY DEFAULT AS IDENTITY
)
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
  BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT;
COMMENT ON COLUMN "DB"."TABLE_NAME"."ID" IS '主键';

ALTER TABLE "DB"."TABLE_NAME" ADD CONSTRAINT "SYS_C0043295" PRIMARY KEY ("ID");

直接删除由GENERATED BY DEFAULT AS IDENTITY或GENERATED ALWAYS AS IDENTITY创建的表导致的问题

需要注意的点,如下所示:直接删除表是不会删除系统生成的序列的。因为drop table删除表以后会放到回收站,相当于逻辑删除,要清空回收站中的表才会删除序列

DROP TABLE "DB"."TABLE_NAME";

清除回收站中的所有对象(如果表被放入了回收站)

PURGE RECYCLEBIN;

要使用如下所示的SQL语句删除表及相关依赖才会把系统生成的序列一并删除,相当于是物理删除了。

DROP TABLE "DB"."TABLE_NAME" CASCADE CONSTRAINT PURGE;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值