AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 188868
Accepted
tanitelle
tanitelle
Asked: 2017-10-20 11:03:36 +0800 CST2017-10-20 11:03:36 +0800 CST 2017-10-20 11:03:36 +0800 CST

Encontre quais pares de valores-chave SESSION_CONTEXT foram definidos

  • 772

Descobri que a consulta a seguir mostra quantas variáveis ​​de contexto de sessão foram definidas:

SELECT cache_address
      ,name
      ,pages_kb
      ,pages_in_use_kb
      ,entries_count
      ,entries_in_use_count
FROM   sys.dm_os_memory_cache_counters
WHERE  TYPE = 'CACHESTORE_SESSION_CONTEXT';

Mas agora eu gostaria de saber quais pares de valores-chave SESSION_CONTEXT()foram definidos - se houver.

Depois de fazer uma extensa pesquisa em sites da microsoft não encontrei nada relacionado.

Desde já, obrigado.

sql-server sql-server-2016
  • 1 1 respostas
  • 1640 Views

1 respostas

  • Voted
  1. Best Answer
    Hannah Vernon
    2018-02-22T06:55:08+08:002018-02-22T06:55:08+08:00

    Verifiquei a definição de muitas exibições, funções e procedimentos armazenados do sistema relacionados ao contexto e não consigo localizar mais detalhes sobre as variáveis ​​de contexto da sessão.

    Por exemplo, a sys.dm_os_memory_cache_countersvisualização de gerenciamento dinâmico mencionada em sua pergunta tem a seguinte definição:

    CREATE VIEW sys.dm_os_memory_cache_counters AS
        SELECT *
        FROM OpenRowSet(TABLE SYSMEMORYCACHECOUNTERS)
    

    A definição da SYSMEMORYCACHECOUNTERStabela do sistema não é visível diretamente, mesmo a partir da conexão de administrador dedicada, ou DAC , que é, portanto, um beco sem saída.

    Usei esta consulta para procurar objetos de sistema relacionados ao contexto:

    ;WITH types AS
    (
        SELECT v.xType
            , v.TypeDescription
        FROM (VALUES 
              ('AF', 'Aggregate function (CLR)')
            , ('C', 'CHECK constraint')
            , ('D', 'Default or DEFAULT constraint')
            , ('F', 'FOREIGN KEY constraint')
            , ('L', 'Log')
            , ('FN', 'Scalar function')
            , ('FS', 'Assembly (CLR) scalar-function')
            , ('FT', 'Assembly (CLR) table-valued function')
            , ('IF', 'In-lined table-function')
            , ('IT', 'Internal table')
            , ('P', 'Stored procedure')
            , ('PC', 'Assembly (CLR) stored-procedure')
            , ('PK', 'PRIMARY KEY constraint (type is K)')
            , ('RF', 'Replication filter stored procedure')
            , ('S', 'System table')
            , ('SN', 'Synonym')
            , ('SQ', 'Service queue')
            , ('TA', 'Assembly (CLR) DML trigger')
            , ('TF', 'Table function')
            , ('TR', 'SQL DML Trigger')
            , ('TT', 'Table type')
            , ('U', 'User table')
            , ('UQ', 'UNIQUE constraint (type is K)')
            , ('V', 'View')
            , ('X', 'Extended stored procedure')
        )v(xType,TypeDescription)
    )
    , sc AS
    (
        SELECT so.id
            , ColumnList = STUFF(((SELECT ', ' + sc.name FROM sys.syscolumns sc WHERE sc.id = so.id FOR XML PATH(''))), 1, 2, '')
        FROM sys.sysobjects so
    )
    SELECT t.TypeDescription
        , so.name
        --, sc.ColumnList
    FROM sys.sysobjects so
        LEFT JOIN sc ON so.id = sc.id
        LEFT JOIN types t ON so.xtype = t.xType
    WHERE so.name LIKE '%context%'
        OR sc.ColumnList LIKE '%context%'
    ORDER BY t.TypeDescription
        , so.name;
    

    no SQL Server 2016, o resultado da consulta é:

    ╔═══════════════════════════╦═════════════════════ ═══════════════════╗
    ║ Procedimento armazenado estendido ║ sp_reset_session_context ║
    ╠═══════════════════════════╬═════════════════════ ═══════════════════╣
    ║ Procedimento armazenado estendido ║ sp_set_session_context ║
    ║ Procedimento armazenado estendido ║ sp_try_set_session_context ║
    ║ Função de tabela alinhada ║ dm_exec_cursors ║
    ║ Função de tabela alinhada ║ fn_dblog ║
    ║ Função de tabela alinhada ║ fn_dblog_xtp ║
    ║ Função de tabela alinhada ║ fn_dump_dblog ║
    ║ Função de tabela alinhada ║ fn_dump_dblog_xtp ║
    ║ Tabela interna ║ plan_persist_context_settings ║
    ║ Tabela interna ║ plan_persist_query ║
    ║ Procedimento armazenado ║ sp_MSadd_repl_error ║
    ║ Procedimento armazenado ║ sp_MSsetcontext_bypasswholeddleventbit ║
    ║ Procedimento armazenado ║ sp_MSsetcontext_replagent ║
    ║ Procedimento armazenado ║ sp_sqlagent_verify_database_context ║
    ║ Ver ║ dm_db_task_space_usage ║
    ║ Ver ║ dm_exec_query_stats ║
    ║ Ver ║ dm_exec_requests ║
    ║ Ver ║ dm_exec_sessions ║
    ║ Visualizar ║ dm_filestream_file_io_handles ║
    ║ Ver ║ dm_filestream_file_io_requests ║
    ║ Ver ║ dm_filestream_non_transacted_handles ║
    ║ Ver ║ dm_os_memory_cache_entries ║
    ║ Ver ║ dm_os_schedulers ║
    ║ Ver ║ dm_os_tasks ║
    ║ Ver ║ dm_os_threads ║
    ║ Ver ║ dm_os_waiting_tasks ║
    ║ Ver ║ dm_os_workers ║
    ║ Visualizar ║ dm_tran_locks ║
    ║ Ver ║ query_context_settings ║
    ║ Visualizar ║ query_store_query ║
    ║ Ver ║ sysprocesses ║
    ╚═══════════════════════════╩═════════════════════ ═══════════════════╝
    
    • Os procedimentos armazenados estendidos são implementados em várias DLLs do SQL Server e não são facilmente visualizados sem engenharia reversa; Eu as considerei como caixas pretas para o propósito desta pergunta.

    • sys.dm_exec_cursors, embora claramente não esteja diretamente relacionado ao "contexto" em que estamos interessados, tem a seguinte definição:

      CREATE FUNCTION sys.dm_exec_cursors (@spid int)
      RETURNS table
      AS
          RETURN SELECT *
          FROM OpenRowSet(TABLE DM_EXEC_CURSORS, @spid)
      

      Como você pode ver acima, esta função é realmente apenas um wrapper em torno da tabela do sistema DM_EXEC_CURSORS; a definição de tabelas de sistema como esta é novamente implementada dentro do mecanismo do SQL Server e não é facilmente inspecionada.

      As outras funções de tabela em linha listadas na saída da consulta acima utilizam a mesma OpenRowSet(TABLE ...)funcionalidade.

    • A sys.sp_MSsetcontext_bypasswholeddleventbitaparência intrigante:

      create procedure sys.sp_MSsetcontext_bypasswholeddleventbit @onoff bit -- 1 to turn on
      as
      begin
          declare @cur_context varbinary(128)
          declare @cur_context_first_byte binary(1)
          declare @bitmask tinyint
          declare @retcode int
      
          /*
          ** Security Check
          */
          EXEC @retcode = sys.sp_MSreplcheck_subscribe_withddladmin
          IF @@ERROR <> 0 or @retcode <> 0
              return (1)
      
          -- bit to set: snapshot=1, logreader=2, distrib=4, merge=8, 
          -- replication_agent=16, merge_identityrange_alterconstraint=32
          -- merge_bypasswholeddleventbit=64
          if @onoff=1
              set @bitmask=64
          else
              set @bitmask=255-64
      
          -- get the current context_info. remember we only want to modify a bit without changing the rest of the info
          select @cur_context = isnull(context_info(),0x00)
      
          -- get the first byte out. the replication agent flags are set in the first byte.
          select @cur_context_first_byte = substring(@cur_context, 1, 1)
          -- set the appropriate bit in this one byte (leaving other bits unchanged).
          if @onoff=1
              select @cur_context_first_byte = (convert(tinyint,@cur_context_first_byte) | @bitmask)
          else
              select @cur_context_first_byte = (convert(tinyint,@cur_context_first_byte) & @bitmask)
      
          -- replace the first byte of the 128 byte binary variable, so that now it has the appropriate bit set.
          select @cur_context = convert(varbinary(128),stuff (@cur_context, 1, 1, @cur_context_first_byte))
          -- set the context_info again with the new binary(128) value.
          set context_info @cur_context
      
          if @@error <> 0
              return 1
      
          return 0
      end
      

      No entanto, ele só usa SET CONTEXT_INFOe CONTEXT_INFO()para inspecionar e modificar as informações de contexto. Sem sorte aqui.

    • Talvez sys.query_context_settingscontém algum ouro? Não:

      CREATE VIEW sys.query_context_settings AS
          SELECT
              context_settings_id,
              CONVERT(varbinary(8), set_options) AS 'set_options',
              language_id,
              date_format,
              date_first,
              CONVERT(varbinary(2), status) AS 'status',
              required_cursor_options,
              acceptable_cursor_options,
              merge_action_type,
              default_schema_id,
              is_replication_specific,
              CONVERT(varbinary(1), status2) AS 'is_contained'
          FROM (
              SELECT * FROM sys.plan_persist_context_settings
              UNION ALL
              SELECT TOP 0 * FROM OpenRowSet(TABLE QUERY_STORE_CONTEXT_SETTINGS)
          ) AS ContextSettings
      

    Também verifiquei as definições dos módulos SQL, como procedimentos armazenados, funções, etc, com esta consulta:

    SELECT so.name
        , asm.definition
    FROM sys.all_sql_modules asm
        INNER JOIN sys.sysobjects so ON asm.object_id = so.id
    WHERE asm.definition LIKE '%context%'
    ORDER BY so.name;
    

    Nenhum dos itens listados nessa consulta também contém algo relevante.

    Em suma, não consegui encontrar nada relacionado ao contexto da sessão. Espero que isso ocorra por design, pois o contexto da sessão pode ser facilmente usado para armazenar dados confidenciais durante uma sessão.

    • 9

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve