标签: view

创建 MV 日志时是否需要枚举物化视图中使用的列?

我目前正在一大堆表上创建物化视图日志,以支持具有快速刷新的物化视图。我们正在创建的物化视图包含来自各种表的大约 30 列。我们的一个事实表包含大约 15 列,这些列将用于物化视图。

创建MV日志时,是否有必要枚举MV中所需的基表中的所有列?

CREATE MATERIALIZED VIEW LOG ON SCHEMA.TABLE_A 
  WITH ROWID, PRIMARY KEY, SEQUENCE (COL1, COL2, COL3, ..., COL48)
  INCLUDING NEW VALUES;
Run Code Online (Sandbox Code Playgroud)

以上是我目前如何创建 MV 日志的示例。我承认以上是反复试验的结果,没有彻底了解语句中每个组件的工作原理(我最了解)。

什么情况下我需要定义哪些列应该包含在MV日志中?

一些物化视图只是跨多个表的连接。其他将包括聚合、分组、总和等。

oracle data-warehouse view

7
推荐指数
1
解决办法
3989
查看次数

创建视图时,如果用户已经通过角色拥有相同的权限,为什么还需要直接对象权限?

我在 Oracle 10g 中遇到权限问题。我希望有人可以帮助我理解这一点。

我有一个带有表格的架构。我已将该表上的 select 授予一个角色。

grant select on user1.example_table to example_role;
Run Code Online (Sandbox Code Playgroud)

然后我将该角色授予用户:

grant example_role to user2;
Run Code Online (Sandbox Code Playgroud)

然后 user2 想在该表的顶部创建一个视图:

create or replace view user2.example_view as
select *
from user1.example_table;
Run Code Online (Sandbox Code Playgroud)

但是,这会引发错误:

ORA-01031: insufficient privileges
Run Code Online (Sandbox Code Playgroud)

为什么?如果他们通过角色拥有选择权限,为什么他们不能在该对象上创建视图?

我发现我必须将对象直接授予用户才能工作。

grant select on user1.example_table to user2;
Run Code Online (Sandbox Code Playgroud)

无论如何不必这样做吗?我想使用角色,因为我有很多表和很多用户,并且不想为单个用户维护一百万个不同的授权。

oracle permissions role view

7
推荐指数
3
解决办法
3万
查看次数

每次有人查询视图时,sql server 都会计算视图吗?

我想知道每次有人查询视图时,sql server 是否都会计算视图。这是因为我每次查询视图都需要很长时间。

当我试图通过仅从视图中选择前 10 行来缩短时间时,它花费了相同的时间。我怀疑 sql server 需要计算整个表的视图,即使我只想要视图中的几行,对吗?

sql-server view

7
推荐指数
1
解决办法
2234
查看次数

在不存在的视图上创建视图

我有一大堆需要创建的视图。其中许多视图依赖于其他视图。

如果我创建的视图依赖于尚未创建的视图,则会收到无效对象错误。

与其遍历整个过程并找出依赖关系,然后按照正确的顺序创建它们,有没有一种方法可以关闭此检查,直到创建所有视图?

视图安装后可以删除依赖视图,因此数据库可能处于视图存在依赖于不存在对象的状态。我需要它接受在创建过程中处于这种状态..

sql-server view

7
推荐指数
1
解决办法
3168
查看次数

Oracle SQL 创建视图权限

这更像是一个理论问题,但我需要尽快帮助。这里是:

通过适当使用 SQL 查询,将系统管理员所需的访问权限授予名为 STD01 的数据库用户,以便他可以创建名为 CUSTOMER 的表的视图,该表属于另一个数据库用户 STD00。

谁能帮我这个?

我知道我必须授予他 CREATE (ANY) VIEW 的系统权限,并授予他 CUSTOMER 表上的所有对象权限(SELECT、INSERT、UPDATE 和 DELETE),但我不知道我该怎么做通过使用 SQL...

oracle permissions view

7
推荐指数
1
解决办法
9万
查看次数

在恢复mysql数据库时,视图变成了表

我有一个完整的数据库转储并恢复了它。但是在我新恢复的服务器中,所有视图都显示为 MyISAM 表。在早期,垃圾场得到了完美的恢复。任何人都可以帮我触发这个问题吗?

问候, 普拉文

mysql view restore

7
推荐指数
1
解决办法
1万
查看次数

在创建视图时使用 SQL 安全定义器还是调用器?

CREATE VIEW 语法是

CREATE
    [OR REPLACE]
    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    [DEFINER = { user | CURRENT_USER }]
    [SQL SECURITY { DEFINER | INVOKER }]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]
Run Code Online (Sandbox Code Playgroud)

因为SECURITY您可以设置DEFINERINVOKER。什么时候选择“定义器”才有意义?据我了解,这意味着检查我的安全权限,即创建视图的人。如果我对我们的数据库拥有完全权限,那么我只是创建了一个视图,为任何调用者提供完全访问权限。这听起来不对。难道您不总是希望安全性是实际使用视图的人吗?

mysql security view

7
推荐指数
1
解决办法
1万
查看次数

有人能解释一下为什么在 mysql 中左加入两个视图这么慢吗?

这是我昨天问的一个问题 - /sf/ask/1552650921/

我得到了一个很好的答案,对我有帮助,但我不明白为什么 LEFT JOIN 比查找慢得多。LEFT JOIN 是 16 秒 - 我很确定我的表至少优化了 90% - 在进行查找时它只有 0.14 秒。当我 LEFT JOIN 表时,它并没有那么慢,为什么要查看?

mysql join view

7
推荐指数
1
解决办法
2万
查看次数

mysqldump和view的问题

当使用mysqldump备份MySQL中,我得到了下面的错误。

mysqldump --all-databases --routines >> all.sql
mysqldump: Couldn't execute 'show table status like 'hdkien'': SELECT command denied to user 'tungbt'@'192.168.12.197' for column 'id' in table 'hdcn_hd' (1143)
Run Code Online (Sandbox Code Playgroud)

hdkien 是一种观点

CREATE ALGORITHM=UNDEFINED DEFINER=`tungbt`@`192.168.12.197` SQL SECURITY DEFINER VIEW `hdcn`.`hdkien` AS (...striped...)
Run Code Online (Sandbox Code Playgroud)

用户tungbt@192.168.12.197已经有权在表上进行选择hdcn_hd,我可以hdkien毫无问题地从视图中进行选择。

mysql> select * from hdkien limit 1;
+------+-----------+
| id   | shd       |
+------+-----------+
|  876 | ADFADFA1  |
+------+-----------+
Run Code Online (Sandbox Code Playgroud)

更多信息:

  • MySQL版本: mysql-community-server-5.5.37-4.el6.x86_64
  • 操作系统:CentOS 6.5

为什么我在运行时出现错误,我该mysqldump如何解决?

更新 1 …

mysql mysqldump backup view

7
推荐指数
2
解决办法
6万
查看次数

视图设计器奇怪的连接语法

我有一个数据仓库,里面有很多用 SSMS 视图设计器内置的视图。查看语法,FROM我无法理解这些子句,因为ON语句没有紧跟在相关的JOIN <table>. 通常RIGHT连接查询的主表并在FROM. 所以我有这样的情况:

SELECT *
FROM tableC
LEFT JOIN TableB
RIGHT JOIN TableA
ON TableA.ID = TableB.ID
ON TableB.TypeID = TableC.TypeID 
WHERE ....
Run Code Online (Sandbox Code Playgroud)

将各种JOINandON子句的顺序更改为我手写的内容会以意想不到的方式改变结果。似乎大多数 SQL 美化者都对这种丑陋的语法感到窒息,而 SSMS 则不然。我一直无法找到押韵、原因或文档来帮助解开正在发生的事情。

请提供任何建议或链接以找出和修复视图设计器查询?

sql-server syntax ssms t-sql view

7
推荐指数
1
解决办法
377
查看次数