Thanks max.
Here is the debug output, and the SQL does look a little suspect (or at least it’s not a syntax I’m familiar with). It is certainly different from the SQL that shows up in the «Dynamic SQL Preview» view.
However, the SQL that shows up when I run a Java program that passes the same string to createQuery() looks the same as below, so I guess it must be something else. This is from the Java code run:
Code:
2007-02-15 21:59:06,390 [main] DEBUG org.hibernate.SQL — select * from ( select rlgc0_.KEYCOL as col_0_0_ from RLGDB.RLG_COMPANY rlgc0_ ) where rownum <= ?
Can you tell why this query would not work in the HQL Query window but work fine when the same string is passed to createQuery()?
From the Hibernate Log console view:
Code:
2007-02-15 16:45:36,921 INFO Worker-6 org.hibernate.cfg.Configuration — configuring from file: hibernate.cfg.xml
2007-02-15 16:45:37,500 INFO Worker-6 org.hibernate.cfg.Configuration — Reading mappings from resource: com/company/rlg/hibernate/CoAdesind.hbm.xml
2007-02-15 16:45:37,593 INFO Worker-6 org.hibernate.cfg.HbmBinder — Mapping class: com.company.rlg.hibernate.CoAdesind -> CO_ADESIND
2007-02-15 16:45:37,609 INFO Worker-6 org.hibernate.cfg.Configuration — Reading mappings from resource: com/company/rlg/hibernate/RlgAnnfund.hbm.xml
2007-02-15 16:45:37,640 INFO Worker-6 org.hibernate.cfg.HbmBinder — Mapping class: com.company.rlg.hibernate.RlgAnnfund -> RLG_ANNFUND
2007-02-15 16:45:37,640 INFO Worker-6 org.hibernate.cfg.Configuration — Reading mappings from resource: com/company/rlg/hibernate/RlgCompany.hbm.xml
2007-02-15 16:45:37,671 INFO Worker-6 org.hibernate.cfg.HbmBinder — Mapping class: com.company.rlg.hibernate.RlgCompany -> RLG_COMPANY
2007-02-15 16:45:37,671 INFO Worker-6 org.hibernate.cfg.Configuration — Reading mappings from resource: com/company/rlg/hibernate/RlgDprc.hbm.xml
2007-02-15 16:45:37,687 INFO Worker-6 org.hibernate.cfg.HbmBinder — Mapping class: com.company.rlg.hibernate.RlgDprc -> RLG_DPRC
2007-02-15 16:45:37,687 INFO Worker-6 org.hibernate.cfg.Configuration — Reading mappings from resource: com/company/rlg/hibernate/RlgQtrfund.hbm.xml
2007-02-15 16:45:37,703 INFO Worker-6 org.hibernate.cfg.HbmBinder — Mapping class: com.company.rlg.hibernate.RlgQtrfund -> RLG_QTRFUND
2007-02-15 16:45:37,703 INFO Worker-6 org.hibernate.cfg.Configuration — Reading mappings from resource: com/company/rlg/hibernate/RlgSecurity.hbm.xml
2007-02-15 16:45:37,703 INFO Worker-6 org.hibernate.cfg.HbmBinder — Mapping class: com.company.rlg.hibernate.RlgSecurity -> RLG_SECURITY
2007-02-15 16:45:37,703 INFO Worker-6 org.hibernate.cfg.Configuration — Configured SessionFactory: null
2007-02-15 16:45:39,796 INFO Worker-4 org.hibernate.connection.DriverManagerConnectionProvider — Using Hibernate built-in connection pool (not for production use!)
2007-02-15 16:45:39,796 INFO Worker-4 org.hibernate.connection.DriverManagerConnectionProvider — Hibernate connection pool size: 20
2007-02-15 16:45:39,796 INFO Worker-4 org.hibernate.connection.DriverManagerConnectionProvider — autocommit mode: false
2007-02-15 16:45:39,796 INFO Worker-4 org.hibernate.connection.DriverManagerConnectionProvider — using driver: oracle.jdbc.driver.OracleDriver at URL: jdbc:oracle:thin:@grolsch.company.com:1521:riskatl
2007-02-15 16:45:39,796 INFO Worker-4 org.hibernate.connection.DriverManagerConnectionProvider — connection properties: {user=rlgdb, password=****}
2007-02-15 16:45:40,796 INFO Worker-4 org.hibernate.cfg.SettingsFactory — RDBMS: Oracle, version: Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 — 64bit Production
With the Partitioning, OLAP and Data Mining options
2007-02-15 16:45:40,796 INFO Worker-4 org.hibernate.cfg.SettingsFactory — JDBC driver: Oracle JDBC driver, version: 10.2.0.2.0
2007-02-15 16:45:40,828 INFO Worker-4 org.hibernate.dialect.Dialect — Using dialect: org.hibernate.dialect.OracleDialect
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.transaction.TransactionFactoryFactory — Using default transaction strategy (direct JDBC transactions)
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.transaction.TransactionManagerLookupFactory — No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.cfg.SettingsFactory — Automatic flush during beforeCompletion(): disabled
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.cfg.SettingsFactory — Automatic session close at end of transaction: disabled
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.cfg.SettingsFactory — JDBC batch size: 15
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.cfg.SettingsFactory — JDBC batch updates for versioned data: disabled
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.cfg.SettingsFactory — Scrollable result sets: enabled
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.cfg.SettingsFactory — JDBC3 getGeneratedKeys(): disabled
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.cfg.SettingsFactory — Connection release mode: auto
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.cfg.SettingsFactory — Default schema: RLGDB
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.cfg.SettingsFactory — Default batch fetch size: 1
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.cfg.SettingsFactory — Generate SQL with comments: disabled
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.cfg.SettingsFactory — Order SQL updates by primary key: disabled
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.cfg.SettingsFactory — Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.hql.ast.ASTQueryTranslatorFactory — Using ASTQueryTranslatorFactory
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.cfg.SettingsFactory — Query language substitutions: {}
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.cfg.SettingsFactory — JPA-QL strict compliance: disabled
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.cfg.SettingsFactory — Second-level cache: enabled
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.cfg.SettingsFactory — Query cache: disabled
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.cfg.SettingsFactory — Cache provider: org.hibernate.cache.NoCacheProvider
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.cfg.SettingsFactory — Optimize cache for minimal puts: disabled
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.cfg.SettingsFactory — Structured second-level cache entries: disabled
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.cfg.SettingsFactory — Echoing all SQL to stdout
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.cfg.SettingsFactory — Statistics: disabled
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.cfg.SettingsFactory — Deleted entity synthetic identifier rollback: disabled
2007-02-15 16:45:40,843 INFO Worker-4 org.hibernate.cfg.SettingsFactory — Default entity-mode: pojo
2007-02-15 16:45:40,906 INFO Worker-4 org.hibernate.impl.SessionFactoryImpl — building session factory
2007-02-15 16:45:41,500 INFO Worker-4 org.hibernate.impl.SessionFactoryObjectFactory — Not binding factory to JNDI, no JNDI name configured
2007-02-15 16:47:38,781 DEBUG main org.hibernate.jdbc.AbstractBatcher — about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
2007-02-15 16:47:38,781 DEBUG main org.hibernate.jdbc.ConnectionManager — opening JDBC connection
2007-02-15 16:47:38,781 DEBUG main org.hibernate.SQL — select * from ( select rlgc0_.KEYCOL as col_0_0_ from RLGDB.RLG_COMPANY rlgc0_ ) where rownum <= ?
2007-02-15 16:47:38,781 DEBUG main org.hibernate.jdbc.AbstractBatcher — preparing statement
2007-02-15 16:47:38,781 DEBUG main org.hibernate.jdbc.AbstractBatcher — about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
2007-02-15 16:47:38,781 DEBUG main org.hibernate.jdbc.AbstractBatcher — closing statement
2007-02-15 16:47:38,781 WARN main org.hibernate.util.JDBCExceptionReporter — SQL Error: 17003, SQLState: null
2007-02-15 16:47:38,781 ERROR main org.hibernate.util.JDBCExceptionReporter — Invalid column index
2007-02-15 16:47:38,781 DEBUG main org.hibernate.jdbc.JDBCContext — after autocommit
2007-02-15 16:47:38,781 DEBUG main org.hibernate.jdbc.ConnectionManager — aggressively releasing JDBC connection
2007-02-15 16:47:38,781 DEBUG main org.hibernate.jdbc.ConnectionManager — releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
2007-02-15 16:47:38,781 DEBUG main org.hibernate.jdbc.ConnectionManager — connection already null in cleanup : no action
Cheers…
_________________
Roy Goodman
Hi,
I created a WMI alert which actually monitor any DDL event on a database. Like when ever a Database got Created/Altered/Deleted its entry will be written to a table in Master database. I am reading this class thru WMI.
SELECT * FROM AUDIT_LOGIN_CHANGE_PASSWORD_EVENT
So once such event occurs this alert got triggered and kicks a job which interns insert data to a table. Now if I run a Create/Alter/Delete database Alert does got fired but SQL Job not able to insert data into table and fails with this error.
Date 5/28/2010 6:14:26 PM
Log Job History (capture pwd_change_EVENTS)
Step ID 1
Server GURPSETH
Job Name capture pwd_change_EVENTS
Step Name Insert data into LogEvents
Duration 00:00:00
Sql Severity 0
Sql Message ID 0
Operator Emailed
Operator Net sent
Operator Paged
Retries Attempted 0
Message
Unable to start execution of step 1 (reason: Variable WMI(HostName) not found). The step failed.
In SQL Server Error Logs we have these errors.
2010-05-28 18:13:21.14 spid57 Error: 17003, Severity: 16, State: 1.
2010-05-28 18:13:21.14 spid57 Closed event notification conversation endpoint with handle ‘{F143118A-3B6A-DF11-B9E1-0022FAD17E6A}’, due to the following error: ‘<?xml version=»1.0″?><Error xmlns=»http://schemas.microsoft.com/SQL/ServiceBroker/Error»><Code>-8470</Code><Description>Remote
service has been dropped.</Description></Error>’.
2010-05-28 18:13:55.14 spid12s Error: 17001, Severity: 16, State: 1.
2010-05-28 18:13:55.14 spid12s Failure to send an event notification instance of type ‘AUDIT_LOGIN_CHANGE_PASSWORD_EVENT’ on conversation handle ‘{F143118A-3B6A-DF11-B9E1-0022FAD17E6A}’. Error Code = ‘8429’.
2010-05-28 18:13:58.08 spid14s Error: 17005, Severity: 16, State: 1.
2010-05-28 18:13:58.08 spid14s Event notification ‘SQLWEP_DDD57A95_4218_4830_AC03_1127C9AABB1C’ in database ‘master’ dropped due to send time service broker errors. Check to ensure the conversation handle, service broker contract, and
service specified in the event notification are active.
Need help on this.
Below is the script which I am using which is creating table, job and alert.
/*******************************************************************************************
* This script will create 1 Alert to Monitor Create database, Alter Database &
* Drop database events. The alert will run a job and the job will enter data in a table.
*
* For any suggestion contact :gur.sethi@in.ibm.com and abhay.chaudhary@in.ibm.com
*******************************************************************************************/
/* Step 1: creating the table to capture the DDL information */
USE Master
GO
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[DDl_DATABASE_EVENTS]’) AND OBJECTPROPERTY(id, N’IsUserTable’) = 1)
DROP TABLE [dbo].[DDL_DATABASE_EVENTS]
GO
CREATE TABLE [dbo].[DDL_DATABASE_EVENTS] (
[computerName] Varchar(20),
[DatabaseName] varchar(20),
[Loginname] Varchar(20),
[PostTime] [datetime] NOT NULL ,
[SQLInstance] Varchar(20),
[TSqlcommand] Varchar (500),
[RecordID] [int] IDENTITY (1,1) NOT FOR REPLICATION NOT NULL,
[Flag] [int] NOT NULL CONSTRAINT [DF_DDL_DATABASE_EVENTS_Flag] DEFAULT ((0))
) ON [PRIMARY]
GO
CREATE INDEX [DDL_DATABASE_EVENTS_IDX01] ON [dbo].[DDL_DATABASE_EVENTS]([Posttime]) WITH FILLFACTOR = 100 ON [PRIMARY]
GO
/*Step 2 : Creating the Job that will enter values into the DDL_DATABASE_EVENTS table created above*/
/* Service account and sql operator option are optional*/
/* Error handling is also added and we are running it in a transaction*/
USE [msdb]
GO
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N’capture DDL_DATABASE_EVENTS’)
EXEC msdb.dbo.sp_delete_job @job_name = N’capture DDL_DATABASE_EVENTS’, @delete_unused_schedule=1
GO
—DECLARE @ServiceAccount varchar(128)
—SET @ServiceAccount = N'<job_owner_account>’
—DECLARE @SQLOperator varchar(128)
—SET @SQLOperator = N'<sql_agent_operator>’
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]’ AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N’JOB’, @type=N’LOCAL’, @name=N'[Uncategorized (Local)]’
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N’capture DDL_DATABASE_EVENTS’,
@enabled=1,
@notify_level_eventlog=2,
@notify_level_email=3,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N’Job for responding to SP change events’,
@category_name=N'[Uncategorized (Local)]’,
—@owner_login_name=@ServiceAccount,
—@notify_email_operator_name=@SQLOperator,
@job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/*Step 3: Insert values into DDL_DATABASE_EVENTS*/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N’Insert data into LogEvents’,
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N’TSQL’,
@command=N’
INSERT INTO DDL_DATABASE_EVENTS (
Computername,
DatabaseName,
LoginName,
PostTime,
SQLInstance,
TSqlCommand
)
VALUES (
N»$(ESCAPE_NONE(WMI(ComputerName)))»,
N»$(ESCAPE_NONE(WMI(DatabaseName)))»,
N»$(ESCAPE_NONE(WMI(Loginname)))»,
GETDATE(),
N»$(ESCAPE_NONE(WMI(SQLInstance)))»,
N»$(ESCAPE_NONE(WMI(TSQLCommand)))»
)’,
@database_name=N’master’,
@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)’
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO
/*Step 4:Creating ALTER DATABASE alert and associating it with the Job to be fired */
USE [msdb]
GO
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = N’Respond to ALTER_DATABASE_EVENTS’)
EXEC msdb.dbo.sp_delete_alert @name=N’Respond to ALTER_DATABASE_EVENTS’
GO
DECLARE @server_namespace varchar(255)
IF ISNULL(CHARINDEX(», @@SERVERNAME), 0) > 0
SET @server_namespace = N’\.rootMicrosoftSqlServerServerEvents’ + SUBSTRING(@@SERVERNAME, ISNULL(CHARINDEX(», @@SERVERNAME), 0) + 1, LEN(@@SERVERNAME) — ISNULL(CHARINDEX(‘/’, @@SERVERNAME), 0))
ELSE
SET @server_namespace = N’\.rootMicrosoftSqlServerServerEventsMSSQLSERVER’
EXEC msdb.dbo.sp_add_alert @name=N’Respond to ALTER_DATABASE_EVENTS’,
@enabled=1,
@notification_message=N’Your Message’,
@wmi_namespace=@server_namespace,
@wmi_query=N’SELECT * FROM ALTER_DATABASE’,
@job_name=’capture DDL_DATABASE_EVENTS’ ;
GO
/*Step 5: Creating CREATE DATABASE alert and associating it with the Job to be fired */
USE [msdb]
GO
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = N’Respond to CREATE_DATABASE_EVENTS’)
EXEC msdb.dbo.sp_delete_alert @name=N’Respond to CREATE_DATABASE_EVENTS’
GO
DECLARE @server_namespace varchar(255)
IF ISNULL(CHARINDEX(», @@SERVERNAME), 0) > 0
SET @server_namespace = N’\.rootMicrosoftSqlServerServerEvents’ + SUBSTRING(@@SERVERNAME, ISNULL(CHARINDEX(», @@SERVERNAME), 0) + 1, LEN(@@SERVERNAME) — ISNULL(CHARINDEX(‘/’, @@SERVERNAME), 0))
ELSE
SET @server_namespace = N’\.rootMicrosoftSqlServerServerEventsMSSQLSERVER’
EXEC msdb.dbo.sp_add_alert @name=N’Respond to CREATE_DATABASE_EVENTS’,
@enabled=1,
@notification_message=N’Your Message’,
@wmi_namespace=@server_namespace,
@wmi_query=N’SELECT * FROM CREATE_DATABASE’,
@job_name=’capture DDL_DATABASE_EVENTS’ ;
GO
/*Step 6: Creating DROP DATABASE alert and associating it with the Job to be fired */
USE [msdb]
GO
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = N’Respond to DROP_DATABASE_EVENTS’)
EXEC msdb.dbo.sp_delete_alert @name=N’Respond to DROP_DATABASE_EVENTS’
GO
DECLARE @server_namespace varchar(255)
IF ISNULL(CHARINDEX(», @@SERVERNAME), 0) > 0
SET @server_namespace = N’\.rootMicrosoftSqlServerServerEvents’ + SUBSTRING(@@SERVERNAME, ISNULL(CHARINDEX(», @@SERVERNAME), 0) + 1, LEN(@@SERVERNAME) — ISNULL(CHARINDEX(‘/’, @@SERVERNAME), 0))
ELSE
SET @server_namespace = N’\.rootMicrosoftSqlServerServerEventsMSSQLSERVER’
EXEC msdb.dbo.sp_add_alert @name=N’Respond to DROP_DATABASE_EVENTS’,
@enabled=1,
@notification_message=N’Your Message’,
@wmi_namespace=@server_namespace,
@wmi_query=N’SELECT * FROM DROP_DATABASE’,
@job_name=’capture DDL_DATABASE_EVENTS’ ;
GO
Hi,
I created a WMI alert which actually monitor any DDL event on a database. Like when ever a Database got Created/Altered/Deleted its entry will be written to a table in Master database. I am reading this class thru WMI.
SELECT * FROM AUDIT_LOGIN_CHANGE_PASSWORD_EVENT
So once such event occurs this alert got triggered and kicks a job which interns insert data to a table. Now if I run a Create/Alter/Delete database Alert does got fired but SQL Job not able to insert data into table and fails with this error.
Date 5/28/2010 6:14:26 PM
Log Job History (capture pwd_change_EVENTS)
Step ID 1
Server GURPSETH
Job Name capture pwd_change_EVENTS
Step Name Insert data into LogEvents
Duration 00:00:00
Sql Severity 0
Sql Message ID 0
Operator Emailed
Operator Net sent
Operator Paged
Retries Attempted 0
Message
Unable to start execution of step 1 (reason: Variable WMI(HostName) not found). The step failed.
In SQL Server Error Logs we have these errors.
2010-05-28 18:13:21.14 spid57 Error: 17003, Severity: 16, State: 1.
2010-05-28 18:13:21.14 spid57 Closed event notification conversation endpoint with handle ‘{F143118A-3B6A-DF11-B9E1-0022FAD17E6A}’, due to the following error: ‘<?xml version=»1.0″?><Error xmlns=»http://schemas.microsoft.com/SQL/ServiceBroker/Error»><Code>-8470</Code><Description>Remote service has been dropped.</Description></Error>’.
2010-05-28 18:13:55.14 spid12s Error: 17001, Severity: 16, State: 1.
2010-05-28 18:13:55.14 spid12s Failure to send an event notification instance of type ‘AUDIT_LOGIN_CHANGE_PASSWORD_EVENT’ on conversation handle ‘{F143118A-3B6A-DF11-B9E1-0022FAD17E6A}’. Error Code = ‘8429’.
2010-05-28 18:13:58.08 spid14s Error: 17005, Severity: 16, State: 1.
2010-05-28 18:13:58.08 spid14s Event notification ‘SQLWEP_DDD57A95_4218_4830_AC03_1127C9AABB1C’ in database ‘master’ dropped due to send time service broker errors. Check to ensure the conversation handle, service broker contract, and service specified in the event notification are active.
Need help on this.
Below is the script which I am using which is creating table, job and alert.
/*******************************************************************************************
* This script will create 1 Alert to Monitor Create database, Alter Database &
* Drop database events. The alert will run a job and the job will enter data in a table.
*
*******************************************************************************************/
/* Step 1: creating the table to capture the DDL information */
USE Master
GO
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[DDl_DATABASE_EVENTS]’) AND OBJECTPROPERTY(id, N’IsUserTable’) = 1)
DROP TABLE [dbo].[DDL_DATABASE_EVENTS]
GO
CREATE TABLE [dbo].[DDL_DATABASE_EVENTS] (
[computerName] Varchar(20),
[DatabaseName] varchar(20),
[Loginname] Varchar(20),
[PostTime] [datetime] NOT NULL ,
[SQLInstance] Varchar(20),
[TSqlcommand] Varchar (500),
[RecordID] [int] IDENTITY (1,1) NOT FOR REPLICATION NOT NULL,
[Flag] [int] NOT NULL CONSTRAINT [DF_DDL_DATABASE_EVENTS_Flag] DEFAULT ((0))
) ON [PRIMARY]
GO
CREATE INDEX [DDL_DATABASE_EVENTS_IDX01] ON [dbo].[DDL_DATABASE_EVENTS]([Posttime]) WITH FILLFACTOR = 100 ON [PRIMARY]
GO
/*Step 2 : Creating the Job that will enter values into the DDL_DATABASE_EVENTS table created above*/
/* Service account and sql operator option are optional*/
/* Error handling is also added and we are running it in a transaction*/
USE [msdb]
GO
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N’capture DDL_DATABASE_EVENTS’)
EXEC msdb.dbo.sp_delete_job @job_name = N’capture DDL_DATABASE_EVENTS’, @delete_unused_schedule=1
GO
—DECLARE @ServiceAccount varchar(128)
—SET @ServiceAccount = N'<job_owner_account>’
—DECLARE @SQLOperator varchar(128)
—SET @SQLOperator = N'<sql_agent_operator>’
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]’ AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N’JOB’, @type=N’LOCAL’, @name=N'[Uncategorized (Local)]’
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N’capture DDL_DATABASE_EVENTS’,
@enabled=1,
@notify_level_eventlog=2,
@notify_level_email=3,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N’Job for responding to SP change events’,
@category_name=N'[Uncategorized (Local)]’,
—@owner_login_name=@ServiceAccount,
—@notify_email_operator_name=@SQLOperator,
@job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/*Step 3: Insert values into DDL_DATABASE_EVENTS*/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N’Insert data into LogEvents’,
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N’TSQL’,
@command=N’
INSERT INTO DDL_DATABASE_EVENTS (
Computername,
DatabaseName,
LoginName,
PostTime,
SQLInstance,
TSqlCommand
)
VALUES (
N»$(ESCAPE_NONE(WMI(ComputerName)))»,
N»$(ESCAPE_NONE(WMI(DatabaseName)))»,
N»$(ESCAPE_NONE(WMI(Loginname)))»,
GETDATE(),
N»$(ESCAPE_NONE(WMI(SQLInstance)))»,
N»$(ESCAPE_NONE(WMI(TSQLCommand)))»
)’,
@database_name=N’master’,
@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)’
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO
/*Step 4:Creating ALTER DATABASE alert and associating it with the Job to be fired */
USE [msdb]
GO
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = N’Respond to ALTER_DATABASE_EVENTS’)
EXEC msdb.dbo.sp_delete_alert @name=N’Respond to ALTER_DATABASE_EVENTS’
GO
DECLARE @server_namespace varchar(255)
IF ISNULL(CHARINDEX(», @@SERVERNAME), 0) > 0
SET @server_namespace = N’\.rootMicrosoftSqlServerServerEvents’ + SUBSTRING(@@SERVERNAME, ISNULL(CHARINDEX(», @@SERVERNAME), 0) + 1, LEN(@@SERVERNAME) — ISNULL(CHARINDEX(‘/’, @@SERVERNAME), 0))
ELSE
SET @server_namespace = N’\.rootMicrosoftSqlServerServerEventsMSSQLSERVER’
EXEC msdb.dbo.sp_add_alert @name=N’Respond to ALTER_DATABASE_EVENTS’,
@enabled=1,
@notification_message=N’Your Message’,
@wmi_namespace=@server_namespace,
@wmi_query=N’SELECT * FROM ALTER_DATABASE’,
@job_name=’capture DDL_DATABASE_EVENTS’ ;
GO
/*Step 5: Creating CREATE DATABASE alert and associating it with the Job to be fired */
USE [msdb]
GO
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = N’Respond to CREATE_DATABASE_EVENTS’)
EXEC msdb.dbo.sp_delete_alert @name=N’Respond to CREATE_DATABASE_EVENTS’
GO
DECLARE @server_namespace varchar(255)
IF ISNULL(CHARINDEX(», @@SERVERNAME), 0) > 0
SET @server_namespace = N’\.rootMicrosoftSqlServerServerEvents’ + SUBSTRING(@@SERVERNAME, ISNULL(CHARINDEX(», @@SERVERNAME), 0) + 1, LEN(@@SERVERNAME) — ISNULL(CHARINDEX(‘/’, @@SERVERNAME), 0))
ELSE
SET @server_namespace = N’\.rootMicrosoftSqlServerServerEventsMSSQLSERVER’
EXEC msdb.dbo.sp_add_alert @name=N’Respond to CREATE_DATABASE_EVENTS’,
@enabled=1,
@notification_message=N’Your Message’,
@wmi_namespace=@server_namespace,
@wmi_query=N’SELECT * FROM CREATE_DATABASE’,
@job_name=’capture DDL_DATABASE_EVENTS’ ;
GO
/*Step 6: Creating DROP DATABASE alert and associating it with the Job to be fired */
USE [msdb]
GO
IF EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = N’Respond to DROP_DATABASE_EVENTS’)
EXEC msdb.dbo.sp_delete_alert @name=N’Respond to DROP_DATABASE_EVENTS’
GO
DECLARE @server_namespace varchar(255)
IF ISNULL(CHARINDEX(», @@SERVERNAME), 0) > 0
SET @server_namespace = N’\.rootMicrosoftSqlServerServerEvents’ + SUBSTRING(@@SERVERNAME, ISNULL(CHARINDEX(», @@SERVERNAME), 0) + 1, LEN(@@SERVERNAME) — ISNULL(CHARINDEX(‘/’, @@SERVERNAME), 0))
ELSE
SET @server_namespace = N’\.rootMicrosoftSqlServerServerEventsMSSQLSERVER’
EXEC msdb.dbo.sp_add_alert @name=N’Respond to DROP_DATABASE_EVENTS’,
@enabled=1,
@notification_message=N’Your Message’,
@wmi_namespace=@server_namespace,
@wmi_query=N’SELECT * FROM DROP_DATABASE’,
@job_name=’capture DDL_DATABASE_EVENTS’ ;
GO
Regards
GURSETHi
SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Enterprise Core SQL Server 2012 Standard SQL Server 2012 Service Pack 3 SQL Server 2014 Developer SQL Server 2014 Enterprise SQL Server 2014 Enterprise Core SQL Server 2014 Standard SQL Server 2014 Service Pack 2 SQL Server 2016 Developer SQL Server 2016 Enterprise SQL Server 2016 Enterprise Core SQL Server 2016 Standard SQL Server 2016 Service Pack 1 More…Less
Symptoms
Assume that you use Windows Management Instrumentation (WMI) to monitor events in Microsoft SQL Server. In this situation, a memory leak occurs in SQLWEP. This causes the Wmiprvse.exe process to crash with a ‘WBEM_E_OUT_OF_MEMORY’ error. Additionally, error messages that resemble the following are logged in the SQL Server error log:
Error: 17003 — Closed event notification conversation endpoint with handle ‘{7BC24B36-B24C-E611-944D-0050569F4BF2}’, due to the following error: ‘<?xml version=»1.0″?><Error xmlns=»http://schemas.microsoft.com/SQL/ServiceBroker/Error»><Code>-8470</Code><Description>Remote service has been dropped.</Description></Error>’.
Error: 17001 — Failure to send an event notification instance of type ‘AUDIT_DATABASE_OBJECT_MANAGEMENT_EVENT’ on conversation handle ‘{7EC24B36-B24C-E611-944D-0050569F4BF2}’. Error Code = ‘8429’.
Error: 17005 — Event notification ‘SQLWEP_2C6B2B50_50D2_4615_BEDF_A1E2092223C7’ in database ‘master’ dropped due to send time service broker errors.
Resolution
This issue is fixed in the following cumulative updates for SQL Server:
Cumulative Update 6 for SQL Server 2016 RTM
Cumulative Update 3 for SQL Server 2016 SP1
Cumulative Update 5 for SQL Server 2014 SP2
Cumulative Update 12 for SQL Server 2014 SP1
Cumulative Update 8 for SQL Server 2012 SP3
Status
Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the «Applies to» section.
References
Learn about the terminologythat Microsoft uses to describe software updates.
Need more help?
Я создал родительский и дочерний классы в спящем режиме и JPA. Когда я пытаюсь сохранить класс, я получаю исключение SQL с указанием «недопустимый индекс столбца».
Это родительский класс:
@Entity
@Table(name = "vnd_base_file_format")
public class VendorBaseFileFormat implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "base_file_format_id")
private int baseFileFormatId;
@Column(name = "vendor_id")
private int vendorId;
@Column(name = "format_name")
private String formatName;
@Column(name = "enabled")
private boolean enabled;
@Column(name = "month_year_format")
private String monthYearFormat;
@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name="base_file_format_id", nullable=false)
@OrderBy("index")
private List<VendorBaseFileDimension> dimensions;
Это дочерний класс:
@Entity
@Table(name = "vnd_base_file_format_dim")
public class VendorBaseFileDimension implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "dimension_id")
private int dimensionId;
@Column(name = "alternate_name")
private String alternateName;
@Column(name = "dimension_index")
private int index;
@Id
@ManyToOne
@JoinColumn(name="base_file_format_id", nullable=false, insertable=false)
private VendorBaseFileFormat format;
Я просто создаю родительский класс и добавляю к нему один дочерний класс. Когда я вызываю entityManager.persist, я получаю следующее сообщение:
Hibernate: insert into vnd_base_file_format (enabled, format_name, month_year_format, vendor_id, base_file_format_id) values (?, ?, ?, ?, ?)
Hibernate: insert into vnd_base_file_format_dim (alternate_name, dimension_index, base_file_format_id, dimension_id) values (?, ?, ?, ?)
[21:53:01.159] WARN JDBCExceptionReporter - SQL Error: 17003, SQLState: 99999
[21:53:01.159] ERROR JDBCExceptionReporter - Invalid column index
Любая помощь будет оценена по достоинству. Я пробовал несколько вещей, таких как установка вставляемого значения false, но не повезло. Я видел один вопрос, в котором упоминалась проблема с составными ключами. Нужно ли мне создавать уникальный столбец последовательности для дочернего элемента, если он будет существовать только как часть родителя?